summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2016-03-03 14:13:54 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2016-03-03 14:13:54 -0400
commit923d0f546c4e041b22b1c1e23e53c27dc4d5f932 (patch)
tree08a359b53e3b4e9d3272378b8884f937b84e5053
parentb05583e78fdab70c157aad0c405a22b5ae164e30 (diff)
push original branch, not adjusted branch
-rw-r--r--Annex/AdjustedBranch.hs12
-rw-r--r--Command/Sync.hs21
2 files changed, 22 insertions, 11 deletions
diff --git a/Annex/AdjustedBranch.hs b/Annex/AdjustedBranch.hs
index 5a015e986..cea138f55 100644
--- a/Annex/AdjustedBranch.hs
+++ b/Annex/AdjustedBranch.hs
@@ -10,8 +10,10 @@ module Annex.AdjustedBranch (
OrigBranch,
AdjBranch,
adjustedToOriginal,
+ fromAdjustedBranch,
enterAdjustedBranch,
updateAdjustedBranch,
+ propigateAdjustedCommits,
) where
import Annex.Common
@@ -73,10 +75,11 @@ adjustedToOriginal b
bs = fromRef b
prefixlen = length adjustedBranchPrefix
+fromAdjustedBranch :: Branch -> OrigBranch
+fromAdjustedBranch b = maybe b snd (adjustedToOriginal b)
+
originalBranch :: Annex (Maybe OrigBranch)
-originalBranch = fmap getorig <$> inRepo Git.Branch.current
- where
- getorig currbranch = maybe currbranch snd (adjustedToOriginal currbranch)
+originalBranch = fmap fromAdjustedBranch <$> inRepo Git.Branch.current
{- Enter an adjusted version of current branch (or, if already in an
- adjusted version of a branch, changes the adjustment of the original
@@ -173,10 +176,11 @@ updateAdjustedBranch tomerge (origbranch, adj) commitmode =
recommit currbranch parent (Just commit) = do
commitsha <- commitAdjustedTree (commitTree commit) parent
inRepo $ Git.Branch.update currbranch commitsha
+ propigateAdjustedCommits origbranch adj
return True
recommit _ _ Nothing = return False
{- Check for any commits present on the adjusted branch that have not yet
- - been propigated to the master branch, and propigate them. -}
+ - been propigated to the orig branch, and propigate them. -}
propigateAdjustedCommits :: OrigBranch -> Adjustment -> Annex ()
propigateAdjustedCommits originbranch adj = return () -- TODO
diff --git a/Command/Sync.hs b/Command/Sync.hs
index 927ad8390..355f71d1d 100644
--- a/Command/Sync.hs
+++ b/Command/Sync.hs
@@ -172,8 +172,8 @@ merge (Just b, Just adj) commitmode tomerge =
merge (b, _) commitmode tomerge =
autoMergeFrom tomerge b commitmode
-syncBranch :: Git.Ref -> Git.Ref
-syncBranch = Git.Ref.under "refs/heads/synced" . fromDirectBranch
+syncBranch :: Git.Branch -> Git.Branch
+syncBranch = Git.Ref.under "refs/heads/synced" . fromDirectBranch . fromAdjustedBranch
remoteBranch :: Remote -> Git.Ref -> Git.Ref
remoteBranch remote = Git.Ref.underBase $ "refs/remotes/" ++ Remote.name remote
@@ -268,13 +268,20 @@ pushLocal b = do
updateSyncBranch :: CurrBranch -> Annex ()
updateSyncBranch (Nothing, _) = noop
updateSyncBranch (Just branch, _) = do
+ -- When in an adjusted branch, propigate any changes to it back to
+ -- the original branch.
+ branch' <- case adjustedToOriginal branch of
+ Just (adj, origbranch) -> do
+ propigateAdjustedCommits origbranch adj
+ return origbranch
+ Nothing -> return branch
-- Update the sync branch to match the new state of the branch
- inRepo $ updateBranch (syncBranch branch) branch
+ inRepo $ updateBranch (syncBranch branch') branch'
-- In direct mode, we're operating on some special direct mode
-- branch, rather than the intended branch, so update the intended
-- branch.
whenM isDirect $
- inRepo $ updateBranch (fromDirectBranch branch) branch
+ inRepo $ updateBranch (fromDirectBranch branch') branch'
updateBranch :: Git.Branch -> Git.Branch -> Git.Repo -> IO ()
updateBranch syncbranch updateto g =
@@ -368,16 +375,16 @@ pushRemote o remote (Just branch, _) = stopUnless (pure (pushOption o) <&&> need
- The sync push will fail to overwrite if receive.denyNonFastforwards is
- set on the remote.
-}
-pushBranch :: Remote -> Git.Ref -> Git.Repo -> IO Bool
+pushBranch :: Remote -> Git.Branch -> Git.Repo -> IO Bool
pushBranch remote branch g = tryIO (directpush g) `after` syncpush g
where
syncpush = Git.Command.runBool $ pushparams
[ Git.Branch.forcePush $ refspec Annex.Branch.name
- , refspec branch
+ , refspec $ fromAdjustedBranch branch
]
directpush = Git.Command.runQuiet $ pushparams
[ Git.fromRef $ Git.Ref.base $ Annex.Branch.name
- , Git.fromRef $ Git.Ref.base $ fromDirectBranch branch
+ , Git.fromRef $ Git.Ref.base $ fromDirectBranch $ fromAdjustedBranch branch
]
pushparams branches =
[ Param "push"