assistant: Pass ssh-options through 3 more git pull/push calls that were missed before.
authorJoey Hess <joeyh@joeyh.name>
Tue, 10 Nov 2015 20:52:30 +0000 (16:52 -0400)
committerJoey Hess <joeyh@joeyh.name>
Tue, 10 Nov 2015 20:52:30 +0000 (16:52 -0400)
It was used for regular pull, but not for regular push, tagged push, or the
fallback fetching.

Annex/Ssh.hs
Assistant/Sync.hs
debian/changelog
doc/bugs/annex-ssh-options_seem_to_be_ignored_in_some_occasion_by_the_assistnat.mdwn
doc/bugs/annex-ssh-options_seem_to_be_ignored_in_some_occasion_by_the_assistnat/comment_1_ee684ab3e96a1c1317562d8228d41463._comment [new file with mode: 0644]

index e92232b6fb0f8af09d742c70196380637164e9fd..9d716cdc89dc90975a62cc59f6b5347d2867d057 100644 (file)
@@ -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 
+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
index d914d2246c6a090a5409b4297ab36c2d09c5e9bb..7a9ea6a86c8b3e13372f246d06a81ac99658c526 100644 (file)
@@ -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
                        )
index fd0dad986cd95511f6ca6330686620ba9e7952a1..ae0ece4282e7c6e841f0659902b43223f479894b 100644 (file)
@@ -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/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 (file)
index 0000000..3a6e32b
--- /dev/null
@@ -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.
+"""]]