avoid uncessary call to inAnnex
sync --content: Avoid a redundant checksum of a file that was incrementally verified, when used on NTFS and perhaps other filesystems. When sync has just gotten the content, it does not need to check inAnnex a second time. On NTFS, for some reason the write of the inode cache after it gets the content is not immediately able to be read, and with an empty/non-matching inode cache due to that stale data, inAnnex falls back to hashing the whole object to determine if it's present. Sponsored-by: Brock Spratlen on Patreon
This commit is contained in:
parent
17a31f8e1b
commit
b9a1cc512d
4 changed files with 33 additions and 10 deletions
|
@ -809,10 +809,11 @@ syncFile ebloom rs af k = do
|
|||
let (have, lack) = partition (\r -> Remote.uuid r `elem` locs) rs
|
||||
|
||||
got <- anyM id =<< handleget have inhere
|
||||
putrs <- handleput lack
|
||||
let inhere' = inhere || got
|
||||
putrs <- handleput lack inhere'
|
||||
|
||||
u <- getUUID
|
||||
let locs' = concat [if inhere || got then [u] else [], putrs, locs]
|
||||
let locs' = concat [if inhere' then [u] else [], putrs, locs]
|
||||
|
||||
-- To handle --all, a bloom filter is populated with all the keys
|
||||
-- of files in the working tree in the first pass. On the second
|
||||
|
@ -855,14 +856,15 @@ syncFile ebloom rs af k = do
|
|||
| Remote.readonly r || remoteAnnexReadOnly (Remote.gitconfig r) = return False
|
||||
| isThirdPartyPopulated r = return False
|
||||
| otherwise = wantSend True (Just k) af (Remote.uuid r)
|
||||
handleput lack = catMaybes <$> ifM (inAnnex k)
|
||||
( forM lack $ \r ->
|
||||
ifM (wantput r <&&> put r)
|
||||
( return (Just (Remote.uuid r))
|
||||
, return Nothing
|
||||
)
|
||||
, return []
|
||||
)
|
||||
handleput lack inhere
|
||||
| inhere = catMaybes <$>
|
||||
( forM lack $ \r ->
|
||||
ifM (wantput r <&&> put r)
|
||||
( return (Just (Remote.uuid r))
|
||||
, return Nothing
|
||||
)
|
||||
)
|
||||
| otherwise = return []
|
||||
put dest = includeCommandAction $
|
||||
Command.Move.toStart' dest Command.Move.RemoveNever af k ai si
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue