# HG changeset patch # User Matt Mackall # Date 2009-06-08 23:14:44 # Node ID a964ab624385fad0fd29bc2c3f2758ccb878da06 # Parent e592180ba435007f1300c34b8b9a895956d09729 merge: allow merging going backwards New behavior is generally superior and more correct, except possibly with regards to missing files. hg up . is now effectively a no-op, which is probably the desired behavior for people expecting to move to tip, but may surprise people who were expecting deleted files to reappear. case 1: update to . a-w -> a-w classic: ancestor a missing recreated right? rmed recreated WRONG added forgotten WRONG changed preserved RIGHT conflicted can't happen backward merge: ancestor a (NO EFFECT) missing missing wrong? rm'ed rm'ed RIGHT added preserved RIGHT changed preserved RIGHT conflicted can't happen case 2: update to ancestor of . a-b-w -> b-w \ a classic: ancestor a missing recreated right? rmed recreated wrong? added forgotten wrong? changed preserved RIGHT conflicted preserved wrong? backwards merge: ancestor b missing missing or conflict right? rm'ed missing or conflict right? changed preserved RIGHT conflicted merge RIGHT added preserved right? diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -131,11 +131,14 @@ def manifestmerge(repo, p1, p2, pa, over m1 = p1.manifest() m2 = p2.manifest() - ma = pa.manifest() backwards = (pa == p2) - if backwards or overwrite: + if overwrite: ma = m1 + elif backwards: + ma = p1.p1().manifest() + else: + ma = pa.manifest() action = [] copy, copied, diverge = {}, {}, {} diff --git a/tests/test-custom-filters b/tests/test-custom-filters --- a/tests/test-custom-filters +++ b/tests/test-custom-filters @@ -43,7 +43,7 @@ hg cat stuff.txt echo '% Fresh checkout:' rm stuff.txt -hg up +hg up -C cat stuff.txt echo >> stuff.txt < m b: other deleted -> r +preserving a for resolve of a removing b -0 files updated, 0 files merged, 1 files removed, 0 files unresolved +picked tool 'true' for a (binary False symlink False) +merging a +my a@802f095af299+ other a@33aaa84a386b ancestor a@33aaa84a386b + premerge successful +0 files updated, 1 files merged, 1 files removed, 0 files unresolved changeset: 0:33aaa84a386b user: test date: Mon Jan 12 13:46:40 1970 +0000 diff --git a/tests/test-win32text b/tests/test-win32text --- a/tests/test-win32text +++ b/tests/test-win32text @@ -117,7 +117,7 @@ cat .hg/hgrc echo rm f3 f4.bat bin -hg co 2>&1 | python -c 'import sys, os; sys.stdout.write(sys.stdin.read().replace(os.getcwd(), "...."))' +hg co -C 2>&1 | python -c 'import sys, os; sys.stdout.write(sys.stdin.read().replace(os.getcwd(), "...."))' python print.py < bin python print.py < f3 python print.py < f4.bat @@ -152,7 +152,7 @@ cat .hg/hgrc echo rm f3 f4.bat bin -hg co 2>&1 | python -c 'import sys, os; sys.stdout.write(sys.stdin.read().replace(os.getcwd(), "...."))' +hg co -C 2>&1 | python -c 'import sys, os; sys.stdout.write(sys.stdin.read().replace(os.getcwd(), "...."))' python print.py < bin python print.py < f3 python print.py < f4.bat diff --git a/tests/test-win32text.out b/tests/test-win32text.out --- a/tests/test-win32text.out +++ b/tests/test-win32text.out @@ -314,7 +314,7 @@ win32text = [encode] ** = ! -3 files updated, 0 files merged, 0 files removed, 0 files unresolved +4 files updated, 0 files merged, 0 files removed, 0 files unresolved hello sometext rem empty