Hi,

Eric Kow <ko...@darcs.net> writes:
> OK, I think I'm almost ready to apply this (no obvious bugs or things to
> complain about).
>>  copyFileUsingCache :: OrOnlySpeculate -> Cache -> HashedDir -> String -> IO 
>> ()
>> -copyFileUsingCache oos (Ca cache) subdir f =
>> -    do debugMessage $ "I'm doing copyFileUsingCache on "++(hashedDir 
>> subdir)++"/"++f
>> +copyFileUsingCache oos (Ca unsortedCache) subdir f =
>> +    do let (Ca cache) = Ca (sortBy compareByLocality unsortedCache)
>> +       debugMessage $ "I'm doing copyFileUsingCache on "++(hashedDir 
>> subdir)++"/"++f
>
> Interesting.  One question: does this sorting belong here?  What if in
> the future we want to sort by proximity to the repository directory?
> How would we manage that?  What's the right attitude to adopt here?  One
> possible answer, for example, is YAGNI.  Is that the right one?

I wouldn't say that future-proofing is the problem with this bit of
code. What I find sorely inadequate is that the caches are re-sorted for
every single file that needs to be fetched. Note that with populated
cache and hardlinking, this is a *very* fast operation and the constant
sorting could actually contribute non-negligible amount of time to it.

I think a more global solution that sorts the cache as it is populated
would be more appropriate.

>>  fetchFileUsingCachePrivate :: FromWhere -> Cache -> HashedDir -> String -> 
>> IO (String, B.ByteString)
>> -fetchFileUsingCachePrivate fromWhere (Ca cache) subdir f =
>> +fetchFileUsingCachePrivate fromWhere (Ca unsortedCache) subdir f =
>>      do when (fromWhere == Anywhere) $ copyFileUsingCache ActuallyCopy (Ca 
>> cache) subdir f
>>         ffuc cache
>>      `catchall` debugFail ("Couldn't fetch `"++f++"'\nin subdir 
>> "++(hashedDir subdir)++
>> hunk ./src/Darcs/Repository/Cache.hs 265
>>  
>>            ffuc [] = debugFail $ "No sources from which to fetch file 
>> `"++f++"'\n"++ show (Ca cache)
>>  
>> +          Ca cache = Ca (sortBy compareByLocality unsortedCache)
>
> What's the difference between these two functions?

(This obviously points out the other problem with the "late" sorting:
you need to do it in every function that non-trivially uses the
cache... so it's not just performance, but also maintainability)

Yours,
    Petr.
_______________________________________________
darcs-users mailing list
darcs-users@darcs.net
http://lists.osuosl.org/mailman/listinfo/darcs-users

Reply via email to