aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Assistant/Sync.hs3
-rw-r--r--Assistant/Threads/Committer.hs7
-rw-r--r--Command/Sync.hs10
-rw-r--r--debian/changelog6
-rw-r--r--doc/bugs/failed_sync_with_direct_mode_repo.mdwn2
5 files changed, 22 insertions, 6 deletions
diff --git a/Assistant/Sync.hs b/Assistant/Sync.hs
index c748f6e1a..4bc63241c 100644
--- a/Assistant/Sync.hs
+++ b/Assistant/Sync.hs
@@ -96,7 +96,7 @@ reconnectRemotes notifypushes rs = void $ do
=<< fromMaybe [] . M.lookup (Remote.uuid r) . connectRemoteNotifiers
<$> getDaemonStatus
-{- Updates the local sync branch, then pushes it to all remotes, in
+{- Pushes the local sync branch to all remotes, in
- parallel, along with the git-annex branch. This is the same
- as "git annex sync", except in parallel, and will co-exist with use of
- "git annex sync".
@@ -148,7 +148,6 @@ 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]
- liftIO $ Command.Sync.updateBranch (Command.Sync.syncBranch branch) g
(succeeded, failed) <- liftIO $ inParallel (push g branch) rs
updatemap succeeded []
if null failed
diff --git a/Assistant/Threads/Committer.hs b/Assistant/Threads/Committer.hs
index 275586343..2b60e42f3 100644
--- a/Assistant/Threads/Committer.hs
+++ b/Assistant/Threads/Committer.hs
@@ -35,6 +35,7 @@ import qualified Annex
import Utility.InodeCache
import Annex.Content.Direct
import qualified Command.Sync
+import qualified Git.Branch
import Data.Time.Clock
import Data.Tuple.Utils
@@ -219,7 +220,11 @@ commitStaged = do
v <- tryAnnex Annex.Queue.flush
case v of
Left _ -> return False
- Right _ -> Command.Sync.commitStaged ""
+ Right _ -> do
+ ok <- Command.Sync.commitStaged ""
+ when ok $
+ Command.Sync.updateSyncBranch =<< inRepo Git.Branch.current
+ return ok
{- OSX needs a short delay after a file is added before locking it down,
- when using a non-direct mode repository, as pasting a file seems to
diff --git a/Command/Sync.hs b/Command/Sync.hs
index a5d6d46f1..983689118 100644
--- a/Command/Sync.hs
+++ b/Command/Sync.hs
@@ -172,8 +172,13 @@ mergeLocal (Just branch) = go =<< needmerge
next $ next $ autoMergeFrom syncbranch (Just branch)
pushLocal :: Maybe Git.Ref -> CommandStart
-pushLocal Nothing = stop
-pushLocal (Just branch) = do
+pushLocal b = do
+ updateSyncBranch b
+ stop
+
+updateSyncBranch :: Maybe Git.Ref -> Annex ()
+updateSyncBranch Nothing = noop
+updateSyncBranch (Just branch) = do
-- Update the sync branch to match the new state of the branch
inRepo $ updateBranch $ syncBranch branch
-- In direct mode, we're operating on some special direct mode
@@ -181,7 +186,6 @@ pushLocal (Just branch) = do
-- branch.
whenM isDirect $
inRepo $ updateBranch $ fromDirectBranch branch
- stop
updateBranch :: Git.Ref -> Git.Repo -> IO ()
updateBranch syncbranch g =
diff --git a/debian/changelog b/debian/changelog
index 7a4f9d71e..931694fc3 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+git-annex (5.20140614) UNRELEASED; urgency=medium
+
+ * assistant: Fix one-way assistant->assistant sync in direct mode.
+
+ -- Joey Hess <joeyh@debian.org> Mon, 16 Jun 2014 11:28:42 -0400
+
git-annex (5.20140613) unstable; urgency=medium
* Ignore setsid failures.
diff --git a/doc/bugs/failed_sync_with_direct_mode_repo.mdwn b/doc/bugs/failed_sync_with_direct_mode_repo.mdwn
index 970aa60ef..879146deb 100644
--- a/doc/bugs/failed_sync_with_direct_mode_repo.mdwn
+++ b/doc/bugs/failed_sync_with_direct_mode_repo.mdwn
@@ -5,3 +5,5 @@ When a change is made on A, the assistant commits it to annex/direct/master. But
B notices there is a change, pulls from A. Gets annex/direct/master, but does not merge it into its local branch at all.
[[!tag confirmed]]
+
+> [[fixed|done]] --[[Joey]]