summaryrefslogtreecommitdiff
path: root/Remote
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2013-01-10 11:52:11 -0400
committerGravatar Joey Hess <joey@kitenet.net>2013-01-10 11:56:06 -0400
commit3eaa2b6d6dec4fb21731c0622049a3cccf9a3669 (patch)
tree6f974314dadd606f584e02b140659acc1b6fe990 /Remote
parentbf4c44daf628a980666cc86fabae9522375d09e8 (diff)
check for direct mode file change when copying from a local git remote
Only missing direct mode transfer check now is git-annex shell recvkey.
Diffstat (limited to 'Remote')
-rw-r--r--Remote/Git.hs22
1 files changed, 13 insertions, 9 deletions
diff --git a/Remote/Git.hs b/Remote/Git.hs
index 2ece2fb8e..e8e1a1ba2 100644
--- a/Remote/Git.hs
+++ b/Remote/Git.hs
@@ -268,12 +268,16 @@ copyFromRemote r key file dest
-- run copy from perspective of remote
liftIO $ onLocal (repo r) $ do
ensureInitialized
- Annex.Content.sendAnnex key noop $ \object ->
- upload u key file noRetry $
- rsyncOrCopyFile params object dest
+ v <- Annex.Content.prepSendAnnex key
+ case v of
+ Nothing -> return False
+ Just (object, checksuccess) ->
+ upload u key file noRetry
+ (rsyncOrCopyFile params object dest)
+ <&&> checksuccess
| Git.repoIsSsh (repo r) = feedprogressback $ \feeder ->
rsyncHelper (Just feeder)
- =<< rsyncParamsRemote r True key dest file
+ =<< rsyncParamsRemote r Download key dest file
| Git.repoIsHttp (repo r) = Annex.Content.downloadUrl (keyUrls (repo r) key) dest
| otherwise = error "copying from non-ssh, non-http repo not supported"
where
@@ -335,7 +339,7 @@ copyToRemote r key file p
copylocal =<< Annex.Content.prepSendAnnex key
| Git.repoIsSsh (repo r) = commitOnCleanup r $
Annex.Content.sendAnnex key noop $ \object ->
- rsyncHelper (Just p) =<< rsyncParamsRemote r False key object file
+ rsyncHelper (Just p) =<< rsyncParamsRemote r Upload key object file
| otherwise = error "copying to non-ssh repo not supported"
where
copylocal Nothing = return False
@@ -391,19 +395,19 @@ rsyncOrCopyFile rsyncparams src dest p =
{- Generates rsync parameters that ssh to the remote and asks it
- to either receive or send the key's content. -}
-rsyncParamsRemote :: Remote -> Bool -> Key -> FilePath -> AssociatedFile -> Annex [CommandParam]
-rsyncParamsRemote r sending key file afile = do
+rsyncParamsRemote :: Remote -> Direction -> Key -> FilePath -> AssociatedFile -> Annex [CommandParam]
+rsyncParamsRemote r direction key file afile = do
u <- getUUID
let fields = (Fields.remoteUUID, fromUUID u)
: maybe [] (\f -> [(Fields.associatedFile, f)]) afile
Just (shellcmd, shellparams) <- git_annex_shell (repo r)
- (if sending then "sendkey" else "recvkey")
+ (if direction == Download then "sendkey" else "recvkey")
[ Param $ key2file key ]
fields
-- Convert the ssh command into rsync command line.
let eparam = rsyncShell (Param shellcmd:shellparams)
let o = rsyncParams r
- if sending
+ if direction == Download
then return $ o ++ rsyncopts eparam dummy (File file)
else return $ o ++ rsyncopts eparam (File file) dummy
where