summaryrefslogtreecommitdiff
path: root/Assistant/Sync.hs
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2012-09-04 15:54:30 -0400
committerGravatar Joey Hess <joey@kitenet.net>2012-09-04 15:56:37 -0400
commit8a796cfa64264f615e3054ccbd4922bb44718a02 (patch)
tree8bed05474a4f9d36ed23535ee0bb4c2b86d4b9c5 /Assistant/Sync.hs
parent4abe03635e5fcfcbb843d09f44d9a3f25e319e91 (diff)
improve syncing support for special remotes
Avoid trying to git push/pull to special remotes, but still do transfer scans of them, after git pull from any other remotes, so we know about any values that have been placed on them.
Diffstat (limited to 'Assistant/Sync.hs')
-rw-r--r--Assistant/Sync.hs21
1 files changed, 13 insertions, 8 deletions
diff --git a/Assistant/Sync.hs b/Assistant/Sync.hs
index 499fc960c..9ba7f406f 100644
--- a/Assistant/Sync.hs
+++ b/Assistant/Sync.hs
@@ -19,6 +19,7 @@ import qualified Git
import qualified Git.Branch
import qualified Git.Command
import qualified Remote
+import qualified Types.Remote as Remote
import qualified Annex.Branch
import Data.Time.Clock
@@ -36,18 +37,22 @@ reconnectRemotes :: ThreadName -> ThreadState -> DaemonStatusHandle -> ScanRemot
reconnectRemotes _ _ _ _ [] = noop
reconnectRemotes threadname st dstatus scanremotes rs = void $
alertWhile dstatus (syncAlert rs) $ do
- sync =<< runThreadState st (inRepo Git.Branch.current)
+ (ok, diverged) <- sync
+ =<< runThreadState st (inRepo Git.Branch.current)
+ addScanRemotes scanremotes diverged rs
+ return ok
where
+ (gitremotes, specialremotes) =
+ partition (Git.repoIsUrl . Remote.repo) rs
sync (Just branch) = do
- diverged <- manualPull st (Just branch) rs
- addScanRemotes scanremotes diverged rs
- now <- getCurrentTime
- pushToRemotes threadname now st Nothing rs
+ diverged <- manualPull st (Just branch) gitremotes
+ now <- getCurrentTime
+ ok <- pushToRemotes threadname now st Nothing gitremotes
+ return (ok, diverged)
{- No local branch exists yet, but we can try pulling. -}
sync Nothing = do
- diverged <- manualPull st Nothing rs
- addScanRemotes scanremotes diverged rs
- return True
+ diverged <- manualPull st Nothing gitremotes
+ return (True, diverged)
{- Updates the local sync branch, then pushes it to all remotes, in
- parallel.