Bugfix: Direct mode no longer repeatedly checksums duplicated files.
Fixed by storing a list of cached inodes for a key, instead of just one. Backwards compatability note: An old git-annex version will fail to parse an inode cache file that has been written by a new version, and has multiple items. It will succees if just one. So old git-annexes will have even worse behavior when there are duplicated files, if that is possible. I don't think it will be a problem. (Famous last words.) Also, note that it doesn't expire old and unused inode caches for a key. It would be possible to add this if needed; just look through the associated files for a key and if there are more cached inodes, throw out any not corresponding to associated files. Unless a file is being copied repeatedly and the old copy deleted, this lack of expiry should not be a problem.
This commit is contained in:
parent
54d7637b3a
commit
602baae12e
6 changed files with 56 additions and 26 deletions
|
@ -52,8 +52,8 @@ stageDirect = do
|
|||
- it really was. -}
|
||||
oldcache <- recordedInodeCache key
|
||||
case oldcache of
|
||||
Nothing -> modifiedannexed file key cache
|
||||
Just c -> unlessM (compareInodeCaches c cache) $
|
||||
[] -> modifiedannexed file key cache
|
||||
_ -> unlessM (elemInodeCaches cache oldcache) $
|
||||
modifiedannexed file key cache
|
||||
(Just key, Nothing, _) -> deletedannexed file key
|
||||
(Nothing, Nothing, _) -> deletegit file
|
||||
|
@ -87,11 +87,11 @@ addDirect file cache = do
|
|||
got Nothing = do
|
||||
showEndFail
|
||||
return False
|
||||
got (Just (key, _)) = ifM (sameInodeCache file $ Just cache)
|
||||
got (Just (key, _)) = ifM (sameInodeCache file [cache])
|
||||
( do
|
||||
l <- inRepo $ gitAnnexLink file key
|
||||
stageSymlink file =<< hashSymlink l
|
||||
writeInodeCache key cache
|
||||
addInodeCache key cache
|
||||
void $ addAssociatedFile key file
|
||||
logStatus key InfoPresent
|
||||
showEndOk
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue