git-annex merge branch

* merge: When run with a branch parameter, merges from that branch.
  This is especially useful when using an adjusted branch, because
  it applies the same adjustment to the branch before merging it.
This commit is contained in:
Joey Hess 2019-08-09 13:21:15 -04:00
parent b90ee6dc52
commit b87ea12b6b
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
7 changed files with 58 additions and 28 deletions

View file

@ -1,6 +1,6 @@
{- git-annex command
-
- Copyright 2011, 2013 Joey Hess <id@joeyh.name>
- Copyright 2011-2019 Joey Hess <id@joeyh.name>
-
- Licensed under the GNU AGPL version 3 or higher.
-}
@ -9,27 +9,38 @@ module Command.Merge where
import Command
import qualified Annex.Branch
import qualified Git
import qualified Git.Branch
import Annex.CurrentBranch
import Command.Sync (prepMerge, mergeLocal, mergeConfig)
import Command.Sync (prepMerge, mergeLocal, mergeConfig, merge)
cmd :: Command
cmd = command "merge" SectionMaintenance
"automatically merge changes from remotes"
paramNothing (withParams seek)
"merge changes from remotes"
(paramOptional paramRef) (withParams seek)
seek :: CmdParams -> CommandSeek
seek _ = do
commandAction mergeBranch
commandAction mergeSynced
seek [] = do
prepMerge
commandAction mergeAnnexBranch
commandAction mergeSyncedBranch
seek bs = do
prepMerge
forM_ bs (commandAction . mergeBranch . Git.Ref)
seek _ = giveup ""
mergeBranch :: CommandStart
mergeBranch = starting "merge" (ActionItemOther (Just "git-annex")) $ do
mergeAnnexBranch :: CommandStart
mergeAnnexBranch = starting "merge" (ActionItemOther (Just "git-annex")) $ do
Annex.Branch.update
-- commit explicitly, in case no remote branches were merged
Annex.Branch.commit =<< Annex.Branch.commitMessage
next $ return True
mergeSynced :: CommandStart
mergeSynced = do
prepMerge
mergeLocal mergeConfig def =<< getCurrentBranch
mergeSyncedBranch :: CommandStart
mergeSyncedBranch = mergeLocal mergeConfig def =<< getCurrentBranch
mergeBranch :: Git.Ref -> CommandStart
mergeBranch r = starting "merge" (ActionItemOther (Just (Git.fromRef r))) $ do
currbranch <- getCurrentBranch
merge currbranch mergeConfig def Git.Branch.ManualCommit r
next $ return True