summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Annex/Ssh.hs11
-rw-r--r--Assistant/Sync.hs23
-rw-r--r--debian/changelog2
-rw-r--r--doc/bugs/annex-ssh-options_seem_to_be_ignored_in_some_occasion_by_the_assistnat.mdwn2
-rw-r--r--doc/bugs/annex-ssh-options_seem_to_be_ignored_in_some_occasion_by_the_assistnat/comment_1_ee684ab3e96a1c1317562d8228d41463._comment8
5 files changed, 34 insertions, 12 deletions
diff --git a/Annex/Ssh.hs b/Annex/Ssh.hs
index e92232b6f..9d716cdc8 100644
--- a/Annex/Ssh.hs
+++ b/Annex/Ssh.hs
@@ -263,9 +263,10 @@ inRepoWithSshOptionsTo remote gc a =
{- To make any git commands be run with ssh caching enabled,
- and configured ssh-options alters the local Git.Repo's gitEnv
- - to set GIT_SSH=git-annex, and sets sshOptionsEnv. -}
+ - to set GIT_SSH=git-annex, and set sshOptionsEnv when running git
+ - commands. -}
sshOptionsTo :: Git.Repo -> RemoteGitConfig -> Git.Repo -> Annex Git.Repo
-sshOptionsTo remote gc g
+sshOptionsTo remote gc localr
| not (Git.repoIsUrl remote) || Git.repoIsHttp remote = unchanged
| otherwise = case Git.Url.hostuser remote of
Nothing -> unchanged
@@ -277,7 +278,7 @@ sshOptionsTo remote gc g
prepSocket sockfile
use (sshConnectionCachingParams sockfile)
where
- unchanged = return g
+ unchanged = return localr
use opts = do
let sshopts = concat
@@ -289,9 +290,9 @@ sshOptionsTo remote gc g
else do
command <- liftIO programPath
liftIO $ do
- g' <- addGitEnv g sshOptionsEnv
+ localr' <- addGitEnv localr sshOptionsEnv
(toSshOptionsEnv sshopts)
- addGitEnv g' "GIT_SSH" command
+ addGitEnv localr' "GIT_SSH" command
runSshOptions :: [String] -> String -> IO ()
runSshOptions args s = do
diff --git a/Assistant/Sync.hs b/Assistant/Sync.hs
index d914d2246..7a9ea6a86 100644
--- a/Assistant/Sync.hs
+++ b/Assistant/Sync.hs
@@ -28,6 +28,7 @@ import qualified Remote.List as Remote
import qualified Annex.Branch
import Annex.UUID
import Annex.TaggedPush
+import Annex.Ssh
import qualified Config
import Git.Config
import Assistant.NamedThread
@@ -148,7 +149,7 @@ pushToRemotes' now notifypushes remotes = do
go _ _ _ _ [] = return [] -- no remotes, so nothing to do
go shouldretry (Just branch) g u rs = do
debug ["pushing to", show rs]
- (succeeded, failed) <- liftIO $ inParallel (push g branch) rs
+ (succeeded, failed) <- parallelPush g rs (push branch)
updatemap succeeded []
if null failed
then do
@@ -172,15 +173,24 @@ pushToRemotes' now notifypushes remotes = do
fallback branch g u rs = do
debug ["fallback pushing to", show rs]
- (succeeded, failed) <- liftIO $
- inParallel (\r -> taggedPush u Nothing branch r g) rs
+ (succeeded, failed) <- parallelPush g rs (taggedPush u Nothing branch)
updatemap succeeded failed
when (notifypushes && (not $ null succeeded)) $
sendNetMessage $ NotifyPush $
map Remote.uuid succeeded
return failed
- push g branch remote = Command.Sync.pushBranch remote branch g
+ push branch remote = Command.Sync.pushBranch remote branch
+
+parallelPush :: Git.Repo -> [Remote] -> (Remote -> Git.Repo -> IO Bool)-> Assistant ([Remote], [Remote])
+parallelPush g rs a = do
+ rgs <- liftAnnex $ mapM topush rs
+ (succeededrgs, failedrgs) <- liftIO $ inParallel (uncurry a) rgs
+ return (map fst succeededrgs, map fst failedrgs)
+ where
+ topush r = (,)
+ <$> pure r
+ <*> sshOptionsTo (Remote.repo r) (Remote.gitconfig r) g
{- Displays an alert while running an action that syncs with some remotes,
- and returns any remotes that it failed to sync with.
@@ -221,8 +231,9 @@ manualPull :: Maybe Git.Ref -> [Remote] -> Assistant ([Remote], Bool)
manualPull currentbranch remotes = do
g <- liftAnnex gitRepo
let (xmppremotes, normalremotes) = partition Remote.isXMPPRemote remotes
- failed <- liftIO $ forM normalremotes $ \r ->
- ifM (Git.Command.runBool [Param "fetch", Param $ Remote.name r] g)
+ failed <- forM normalremotes $ \r -> do
+ g' <- liftAnnex $ sshOptionsTo (Remote.repo r) (Remote.gitconfig r) g
+ ifM (liftIO $ Git.Command.runBool [Param "fetch", Param $ Remote.name r] g')
( return Nothing
, return $ Just r
)
diff --git a/debian/changelog b/debian/changelog
index fd0dad986..ae0ece428 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -25,6 +25,8 @@ git-annex (5.20151102.2) UNRELEASED; urgency=medium
* fsck: When fscking a dead repo, avoid incorrect "fixing location log"
message, and display a message, since it's unusual to have access to a
dead repo.
+ * assistant: Pass ssh-options through 3 more git pull/push calls
+ that were missed before.
-- Joey Hess <id@joeyh.name> Wed, 04 Nov 2015 12:50:20 -0400
diff --git a/doc/bugs/annex-ssh-options_seem_to_be_ignored_in_some_occasion_by_the_assistnat.mdwn b/doc/bugs/annex-ssh-options_seem_to_be_ignored_in_some_occasion_by_the_assistnat.mdwn
index 6616db835..fbc05c2c6 100644
--- a/doc/bugs/annex-ssh-options_seem_to_be_ignored_in_some_occasion_by_the_assistnat.mdwn
+++ b/doc/bugs/annex-ssh-options_seem_to_be_ignored_in_some_occasion_by_the_assistnat.mdwn
@@ -44,4 +44,4 @@ log from .git/annex/daemon.log:
-
+> [[fixed|done]] --[[Joey]]
diff --git a/doc/bugs/annex-ssh-options_seem_to_be_ignored_in_some_occasion_by_the_assistnat/comment_1_ee684ab3e96a1c1317562d8228d41463._comment b/doc/bugs/annex-ssh-options_seem_to_be_ignored_in_some_occasion_by_the_assistnat/comment_1_ee684ab3e96a1c1317562d8228d41463._comment
new file mode 100644
index 000000000..3a6e32bab
--- /dev/null
+++ b/doc/bugs/annex-ssh-options_seem_to_be_ignored_in_some_occasion_by_the_assistnat/comment_1_ee684ab3e96a1c1317562d8228d41463._comment
@@ -0,0 +1,8 @@
+[[!comment format=mdwn
+ username="joey"
+ subject="""comment 1"""
+ date="2015-11-10T19:56:03Z"
+ content="""
+Ok, I was able to reproduce it, when using the assistant it seems the
+option is not passed when pushing and fetching there.
+"""]]