get --from, move --from: When used with a local git remote, these used to
silently skip files that the location log thought were present on the
remote, when the remote actually no longer contained them. Since that
behavior could be surprising, now instead display a warning.
I got very confused when I encountered this behavior, since it was silently
skipping a file I needed that whereis said was on the remote.
get without --from already displayed a "unable to access these remotes"
message, which while a bit misleading in that the remote is likely
accessible, but just doesn't contain the file, at least indicated something
went wrong.
Having get --from display a warning makes it in line with get
w/o --from, so seems certianly ok. It might be there are situations where
move --from is used, on eg a whole directory, and the user only wants to
move whatever is present in the remote, and is perfectly ok with files
that are not present being skipped. So I'm less sure about the new warning
being ok there. OTOH, only local git remotes avoiding displaying a warning
in that case too, so this just brings them into line with other remotes.
(Also note that this makes it a little bit faster when dealing with a lot of
files, since it avoids a redundant stat of the file.)
with a large -J value.
* Avoid running with more git check-attr and check-ignore processes than
there are CPU cores when run with a large -J value.
+ * get --from, move --from: When used with a local git remote, these used
+ to silently skip files that the location log thought were present on the
+ remote, when the remote actually no longer contained them. Since that
+ behavior could be surprising, now instead display a warning.
-- Joey Hess <id@joeyh.name> Mon, 30 Mar 2020 15:58:34 -0400
fromPerform src removewhen key afile
fromOk :: Remote -> Key -> Annex Bool
-fromOk src key
- | Remote.hasKeyCheap src =
- either (const checklog) return =<< haskey
- | otherwise = checklog
- where
- haskey = Remote.hasKey src key
- checklog = do
- u <- getUUID
- remotes <- Remote.keyPossibilities key
- return $ u /= Remote.uuid src && elem src remotes
+fromOk src key = do
+ u <- getUUID
+ remotes <- Remote.keyPossibilities key
+ return $ u /= Remote.uuid src && elem src remotes
fromPerform :: Remote -> RemoveWhen -> Key -> AssociatedFile -> CommandPerform
fromPerform src removewhen key afile = do
onLocalFast st $ do
v <- Annex.Content.prepSendAnnex key
case v of
- Nothing -> return (False, UnVerified)
+ Nothing -> do
+ warning "content is not present in remote"
+ return (False, UnVerified)
Just (object, checksuccess) -> do
copier <- mkCopier hardlink st params
runTransfer (Transfer Download u (fromKey id key))
(This happened with a git remote on a drive fwiw).
--[[Joey]]
+
+> [[fixed|done]] --[[Joey]]