diff options
Diffstat (limited to 'Git/Merge.hs')
-rw-r--r-- | Git/Merge.hs | 47 |
1 files changed, 34 insertions, 13 deletions
diff --git a/Git/Merge.hs b/Git/Merge.hs index 21eeaf181..c783521df 100644 --- a/Git/Merge.hs +++ b/Git/Merge.hs @@ -1,36 +1,51 @@ {- git merging - - - Copyright 2012, 2014 Joey Hess <id@joeyh.name> + - Copyright 2012-2016 Joey Hess <id@joeyh.name> - - Licensed under the GNU GPL version 3 or higher. -} -module Git.Merge where +module Git.Merge ( + MergeConfig(..), + CommitMode(..), + merge, + merge', + stageMerge, +) where import Common import Git import Git.Command import Git.BuildVersion import Git.Branch (CommitMode(..)) +import Git.Env -{- Avoids recent git's interactive merge. -} -mergeNonInteractive :: Ref -> CommitMode -> Repo -> IO Bool -mergeNonInteractive = mergeNonInteractive' [] +data MergeConfig + = MergeNonInteractive + -- ^ avoids recent git's interactive merge + | MergeUnrelatedHistories + -- ^ avoids recent git's prevention of merging unrelated histories + deriving (Eq) -mergeNonInteractive' :: [CommandParam] -> Ref -> CommitMode -> Repo -> IO Bool -mergeNonInteractive' extraparams branch commitmode - | older "1.7.7.6" = merge [Param $ fromRef branch] - | otherwise = merge $ [Param "--no-edit", Param $ fromRef branch] +merge :: Ref -> [MergeConfig] -> CommitMode -> Repo -> IO Bool +merge = merge' [] + +merge' :: [CommandParam] -> Ref -> [MergeConfig] -> CommitMode -> Repo -> IO Bool +merge' extraparams branch mergeconfig commitmode r + | MergeNonInteractive `notElem` mergeconfig || older "1.7.7.6" = + go [Param $ fromRef branch] + | otherwise = go [Param "--no-edit", Param $ fromRef branch] where - merge ps = runBool $ sp ++ [Param "merge"] ++ ps ++ extraparams + go ps = runBool (sp ++ [Param "merge"] ++ ps ++ extraparams) + =<< cfgRepo mergeconfig r sp | commitmode == AutomaticCommit = [Param "-c", Param "commit.gpgsign=false"] | otherwise = [] {- Stage the merge into the index, but do not commit it.-} -stageMerge :: Ref -> Repo -> IO Bool -stageMerge branch = runBool +stageMerge :: Ref -> [MergeConfig] -> Repo -> IO Bool +stageMerge branch mergeconfig r = runBool [ Param "merge" , Param "--quiet" , Param "--no-commit" @@ -38,4 +53,10 @@ stageMerge branch = runBool -- commit. , Param "--no-ff" , Param $ fromRef branch - ] + ] =<< cfgRepo mergeconfig r + +cfgRepo :: [MergeConfig] -> Repo -> IO Repo +cfgRepo mergeconfig r + | MergeUnrelatedHistories `elem` mergeconfig = + addGitEnv r "GIT_MERGE_ALLOW_UNRELATED_HISTORIES" "1" + | otherwise = return r |