summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Git/Merge.hs30
-rw-r--r--debian/changelog7
2 files changed, 20 insertions, 17 deletions
diff --git a/Git/Merge.hs b/Git/Merge.hs
index c783521df..76ea35ddd 100644
--- a/Git/Merge.hs
+++ b/Git/Merge.hs
@@ -16,9 +16,9 @@ module Git.Merge (
import Common
import Git
import Git.Command
-import Git.BuildVersion
+import qualified Git.BuildVersion
+import qualified Git.Version
import Git.Branch (CommitMode(..))
-import Git.Env
data MergeConfig
= MergeNonInteractive
@@ -32,20 +32,30 @@ merge = merge' []
merge' :: [CommandParam] -> Ref -> [MergeConfig] -> CommitMode -> Repo -> IO Bool
merge' extraparams branch mergeconfig commitmode r
- | MergeNonInteractive `notElem` mergeconfig || older "1.7.7.6" =
+ | MergeNonInteractive `notElem` mergeconfig || Git.BuildVersion.older "1.7.7.6" =
go [Param $ fromRef branch]
| otherwise = go [Param "--no-edit", Param $ fromRef branch]
where
- go ps = runBool (sp ++ [Param "merge"] ++ ps ++ extraparams)
- =<< cfgRepo mergeconfig r
+ go ps = merge'' (sp ++ [Param "merge"] ++ ps ++ extraparams) mergeconfig r
sp
| commitmode == AutomaticCommit =
[Param "-c", Param "commit.gpgsign=false"]
| otherwise = []
+merge'' :: [CommandParam] -> [MergeConfig] -> Repo -> IO Bool
+merge'' ps mergeconfig r
+ | MergeUnrelatedHistories `elem` mergeconfig =
+ ifM (Git.Version.older "2.8.2")
+ ( go (ps ++ [Param "--allow-unrelated-histories"])
+ , go ps
+ )
+ | otherwise = go ps
+ where
+ go ps' = runBool ps' r
+
{- Stage the merge into the index, but do not commit it.-}
stageMerge :: Ref -> [MergeConfig] -> Repo -> IO Bool
-stageMerge branch mergeconfig r = runBool
+stageMerge branch = merge''
[ Param "merge"
, Param "--quiet"
, Param "--no-commit"
@@ -53,10 +63,4 @@ stageMerge branch mergeconfig r = 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
+ ]
diff --git a/debian/changelog b/debian/changelog
index 0775a1270..938ed35c0 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -19,10 +19,9 @@ git-annex (6.20160419) UNRELEASED; urgency=medium
* git 2.8.1 (or perhaps 2.9.0) is going to prevent git merge from
merging in unrelated branches. Since the webapp's pairing etc features
often combine together repositories with unrelated histories, work around
- this behavior change by setting GIT_MERGE_ALLOW_UNRELATED_HISTORIES
- when the assistant merges. Note though that this is not done for
- git annex sync's merges, so it will follow git's default or configured
- behavior.
+ this behavior change when the assistant merges. Note though that this is
+ not done for git annex sync's merges, so it will follow git's default or
+ configured behavior.
-- Joey Hess <id@joeyh.name> Tue, 19 Apr 2016 12:57:15 -0400