aboutsummaryrefslogtreecommitdiff
path: root/Remote/Ddar.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2017-03-17 16:02:47 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2017-03-17 16:20:37 -0400
commit3286bebf998700d79ab766472cebfcc4399c8894 (patch)
treed2e9270d407c291621042fe5d70b75561b96ec9a /Remote/Ddar.hs
parentacc7effc35e2552809df830c4a8213771168c724 (diff)
Support GIT_SSH and GIT_SSH_COMMAND
They are handled close the same as they are by git. However, unlike git, git-annex sometimes needs to pass the -n parameter when using these. So, this has the potential for breaking some setup, and perhaps there ought to be a ANNEX_USE_GIT_SSH=1 needed to use these. But I'd rather avoid that if possible, so let's see if anyone complains. Almost all places where "ssh" was run have been changed to support the env vars. Anything still calling sshOptions does not support them. In particular, rsync special remotes don't. Seems that annex-rsync-transport already gives sufficient control there. (Fixed in passing: Remote.Helper.Ssh.toRepo used to extract remoteAnnexSshOptions and pass them to sshOptions, which was redundant since sshOptions also extracts those.) This commit was sponsored by Jeff Goeke-Smith on Patreon.
Diffstat (limited to 'Remote/Ddar.hs')
-rw-r--r--Remote/Ddar.hs25
1 files changed, 10 insertions, 15 deletions
diff --git a/Remote/Ddar.hs b/Remote/Ddar.hs
index 146928499..e1c2a21e4 100644
--- a/Remote/Ddar.hs
+++ b/Remote/Ddar.hs
@@ -121,13 +121,12 @@ splitRemoteDdarRepo ddarrepo =
ddarRemoteCall :: ConsumeStdin -> DdarRepo -> Char -> [CommandParam] -> Annex (String, [CommandParam])
ddarRemoteCall cs ddarrepo cmd params
| ddarLocal ddarrepo = return ("ddar", localParams)
- | otherwise = do
- os <- sshOptions cs (host, Nothing) (ddarRepoConfig ddarrepo) []
- return ("ssh", os ++ remoteParams)
+ | otherwise = sshCommand cs (host, Nothing) (ddarRepoConfig ddarrepo) remoteCommand
where
(host, ddarrepo') = splitRemoteDdarRepo ddarrepo
localParams = Param [cmd] : Param (ddarRepoLocation ddarrepo) : params
- remoteParams = Param host : Param "ddar" : Param [cmd] : Param ddarrepo' : params
+ remoteCommand = unwords $ map shellEscape $ toCommand $
+ [Param "ddar", Param [cmd], Param ddarrepo'] ++ params
{- Specialized ddarRemoteCall that includes extraction command and flags -}
ddarExtractRemoteCall :: ConsumeStdin -> DdarRepo -> Key -> Annex (String, [CommandParam])
@@ -159,23 +158,19 @@ ddarDirectoryExists ddarrepo
Left _ -> Right False
Right status -> Right $ isDirectory status
| otherwise = do
- ps <- sshOptions NoConsumeStdin (host, Nothing)
- (ddarRepoConfig ddarrepo) []
- exitCode <- liftIO $ safeSystem "ssh" (ps ++ params)
+ let remotecmd = unwords $ map shellEscape
+ [ "test", "-d", ddarrepo' ]
+ (sshcmd, sshps) <- sshCommand NoConsumeStdin (host, Nothing)
+ (ddarRepoConfig ddarrepo) remotecmd
+ exitCode <- liftIO $ safeSystem sshcmd sshps
case exitCode of
ExitSuccess -> return $ Right True
ExitFailure 1 -> return $ Right False
- ExitFailure code -> return $ Left $ "ssh call " ++
- show (unwords $ toCommand params) ++
+ ExitFailure code -> return $ Left $ "ssh " ++
+ show (unwords $ toCommand sshps) ++
" failed with status " ++ show code
where
(host, ddarrepo') = splitRemoteDdarRepo ddarrepo
- params =
- [ Param host
- , Param "test"
- , Param "-d"
- , Param ddarrepo'
- ]
{- Use "ddar t" to determine if a given key is present in a ddar archive -}
inDdarManifest :: DdarRepo -> Key -> Annex (Either String Bool)