Optimized copy --from and get --from to avoid checking the location log for files that are already present.

This can be a significant speedup when running in large trees that are
only missing a few files; it makes copy --from just as fast as get.
This commit is contained in:
Joey Hess 2011-11-10 21:32:42 -04:00
parent 49d2177d51
commit 2de1e2c2ce
2 changed files with 16 additions and 8 deletions

View file

@ -110,14 +110,20 @@ toPerform dest move key = moveLock move key $ do
- from the remote.
-}
fromStart :: Remote.Remote Annex -> Bool -> FilePath -> CommandStart
fromStart src move file = isAnnexed file $ \(key, _) -> do
u <- getUUID
remotes <- Remote.keyPossibilities key
if u == Remote.uuid src || not (any (== src) remotes)
then stop
else do
showMoveAction move file
next $ fromPerform src move key
fromStart src move file
| move == True = isAnnexed file $ \(key, _) -> go key
| otherwise = isAnnexed file $ \(key, _) -> do
ishere <- inAnnex key
if ishere then stop else go key
where
go key = do
u <- getUUID
remotes <- Remote.keyPossibilities key
if u == Remote.uuid src || not (any (== src) remotes)
then stop
else do
showMoveAction move file
next $ fromPerform src move key
fromPerform :: Remote.Remote Annex -> Bool -> Key -> CommandPerform
fromPerform src move key = moveLock move key $ do
ishere <- inAnnex key

2
debian/changelog vendored
View file

@ -3,6 +3,8 @@ git-annex (3.20111108) UNRELEASED; urgency=low
* Handle a case where an annexed file is moved into a gitignored directory,
by having fix --force add its change.
* Avoid cyclic drop problems.
* Optimized copy --from and get --from to avoid checking the location log
for files that are already present.
-- Joey Hess <joeyh@debian.org> Mon, 07 Nov 2011 18:08:42 -0400