diff options
author | Joey Hess <joey@kitenet.net> | 2011-11-11 16:18:41 -0400 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2011-11-11 16:18:53 -0400 |
commit | 71b216d1fb2d2308c75ba0da62e6e6a85c5adb19 (patch) | |
tree | 495d6285d52c7df78d22806609f088765c7c2c3d /Command | |
parent | 826d5887b2c31c9dca1415997d7704d9442077b0 (diff) |
map: Support remotes with /~/ and /~user/
More accurately, it was supported already when map uses git-annex-shell,
but not when it does not.
Note that the user name cannot be shell escaped using git-annex's current
approach for shell escaping. I tried and some shells like dash cannot
cd ~'joey'. Rest of directory is still shell escaped, not for security but
in case a directory has a space or other weird character.
Diffstat (limited to 'Command')
-rw-r--r-- | Command/Map.hs | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/Command/Map.hs b/Command/Map.hs index f72cb107a..8755bc7c2 100644 --- a/Command/Map.hs +++ b/Command/Map.hs @@ -195,11 +195,17 @@ tryScan r configlist = onRemote r (pipedconfig, Nothing) "configlist" [] manualconfiglist = do - let sshcmd = - "cd " ++ shellEscape(Git.workTree r) ++ " && " ++ - "git config --list" sshparams <- sshToRepo r [Param sshcmd] liftIO $ pipedconfig "ssh" sshparams + where + sshcmd = cddir ++ " && " ++ + "git config --list" + dir = Git.workTree r + cddir + | take 2 dir == "/~" = + let (userhome, reldir) = span (/= '/') (drop 1 dir) + in "cd " ++ userhome ++ " && cd " ++ shellEscape (drop 1 reldir) + | otherwise = "cd " ++ shellEscape dir -- First, try sshing and running git config manually, -- only fall back to git-annex-shell configlist if that |