resolve: restore .orig only after merge is fully complete (
issue4952)
Previously, we'd restore the .orig file after the premerge is complete but
before the merge was complete. This would lead to the .orig file potentially
containing merge conflict markers in it, as a leftover from the last merge
attempt.
--- a/mercurial/commands.py Thu Nov 12 13:16:04 2015 -0800
+++ b/mercurial/commands.py Fri Nov 13 15:56:02 2015 -0800
@@ -5670,10 +5670,10 @@
ui.setconfig('ui', 'forcemerge', '', 'resolve')
ms.commit()
- # replace filemerge's .orig file with our resolve file
- # for files in tocomplete, ms.resolve will not overwrite
- # .orig -- only preresolve does
- util.rename(a + ".resolve", a + ".orig")
+ # replace filemerge's .orig file with our resolve file, but only
+ # for merges that are complete
+ if complete:
+ util.rename(a + ".resolve", a + ".orig")
for f in tocomplete:
try:
@@ -5687,6 +5687,10 @@
ui.setconfig('ui', 'forcemerge', '', 'resolve')
ms.commit()
+ # replace filemerge's .orig file with our resolve file
+ a = repo.wjoin(f)
+ util.rename(a + ".resolve", a + ".orig")
+
ms.commit()
if not didwork and pats:
--- a/tests/test-resolve.t Thu Nov 12 13:16:04 2015 -0800
+++ b/tests/test-resolve.t Fri Nov 13 15:56:02 2015 -0800
@@ -207,6 +207,30 @@
[1]
$ grep '<<<' file1 > /dev/null
+test .orig behavior with resolve
+
+ $ echo resolve > file
+ $ hg resolve -q file1 --tool 'f --dump $TESTTMP/repo/file1.orig'
+ */file1~base*: (glob)
+ >>>
+ foo
+ <<<
+ */file1~other*: (glob)
+ >>>
+ foo
+ bar
+ <<<
+ $TESTTMP/repo/file1: (glob)
+ >>>
+ foo
+ baz
+ <<<
+ $TESTTMP/repo/file1.orig: (glob)
+ >>>
+ foo
+ baz
+ <<<
+
resolve <file> should do nothing if 'file' was marked resolved
$ echo resolved > file1
$ hg resolve -m file1