diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -125,15 +125,6 @@ def manifestmerge(repo, p1, p2, pa, over partial = function to filter file lists """ - repo.ui.note(_("resolving manifests\n")) - repo.ui.debug(_(" overwrite %s partial %s\n") % (overwrite, bool(partial))) - repo.ui.debug(_(" ancestor %s local %s remote %s\n") % (pa, p1, p2)) - - action = [] - copy, copied = {}, {} - m1 = p1.manifest() - m2 = p2.manifest() - def fmerge(f, f2, fa): """merge flags""" a, m, n = ma.flags(fa), m1.flags(f), m2.flags(f2) @@ -155,18 +146,24 @@ def manifestmerge(repo, p1, p2, pa, over repo.ui.debug(" %s: %s -> %s\n" % (f, msg, m)) action.append((f, m) + args) + action, copy = [], {} + if overwrite: - ma = m1 - elif p2 == pa: # backwards - ma = p1.p1().manifest() - else: - ma = pa.manifest() - if pa and repo.ui.configbool("merge", "followcopies", True): - dirs = repo.ui.configbool("merge", "followdirs", True) - copy, diverge = copies.copies(repo, p1, p2, pa, dirs) - for of, fl in diverge.iteritems(): - act("divergent renames", "dr", of, fl) - copied = set(copy.values()) + pa = p1 + elif pa == p2: # backwards + pa = p1.p1() + elif pa and repo.ui.configbool("merge", "followcopies", True): + dirs = repo.ui.configbool("merge", "followdirs", True) + copy, diverge = copies.copies(repo, p1, p2, pa, dirs) + for of, fl in diverge.iteritems(): + act("divergent renames", "dr", of, fl) + + repo.ui.note(_("resolving manifests\n")) + repo.ui.debug(_(" overwrite %s partial %s\n") % (overwrite, bool(partial))) + repo.ui.debug(_(" ancestor %s local %s remote %s\n") % (pa, p1, p2)) + + m1, m2, ma = p1.manifest(), p2.manifest(), pa.manifest() + copied = set(copy.values()) # Compare manifests for f, n in m1.iteritems(): diff --git a/tests/test-copy-move-merge.out b/tests/test-copy-move-merge.out --- a/tests/test-copy-move-merge.out +++ b/tests/test-copy-move-merge.out @@ -1,7 +1,4 @@ 1 files updated, 0 files merged, 2 files removed, 0 files unresolved -resolving manifests - overwrite None partial False - ancestor 583c7b748052 local fb3948d97f07+ remote 40da226db0f0 searching for copies back to rev 1 unmatched files in other: b @@ -10,6 +7,9 @@ resolving manifests c -> a * b -> a * checking for directory renames +resolving manifests + overwrite None partial False + ancestor 583c7b748052 local fb3948d97f07+ remote 40da226db0f0 a: remote moved to c -> m a: remote moved to b -> m preserving a for resolve of b diff --git a/tests/test-double-merge.out b/tests/test-double-merge.out --- a/tests/test-double-merge.out +++ b/tests/test-double-merge.out @@ -9,15 +9,15 @@ user: test date: Mon Jan 12 13:46:40 1970 +0000 summary: cp foo bar; change both -resolving manifests - overwrite None partial False - ancestor 310fd17130da local 2092631ce82b+ remote 7731dad1c2b9 searching for copies back to rev 1 unmatched files in other: bar all copies found (* = to merge, ! = divergent): bar -> foo * checking for directory renames +resolving manifests + overwrite None partial False + ancestor 310fd17130da local 2092631ce82b+ remote 7731dad1c2b9 foo: versions differ -> m foo: remote copied to bar -> m preserving foo for resolve of bar diff --git a/tests/test-issue522.out b/tests/test-issue522.out --- a/tests/test-issue522.out +++ b/tests/test-issue522.out @@ -1,12 +1,12 @@ reverting foo changeset 2:4d9e78aaceee backs out changeset 1:b515023e500e 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + searching for copies back to rev 1 + unmatched files in local: + bar resolving manifests overwrite None partial False ancestor bbd179dfa0a7 local 71766447bdbb+ remote 4d9e78aaceee - searching for copies back to rev 1 - unmatched files in local: - bar foo: remote is newer -> g getting foo 1 files updated, 0 files merged, 0 files removed, 0 files unresolved diff --git a/tests/test-issue672.out b/tests/test-issue672.out --- a/tests/test-issue672.out +++ b/tests/test-issue672.out @@ -2,15 +2,15 @@ adding 1 adding 2 1 files updated, 0 files merged, 1 files removed, 0 files unresolved created new head -resolving manifests - overwrite None partial False - ancestor 81f4b099af3d local c64f439569a9+ remote 2f8037f47a5c searching for copies back to rev 1 unmatched files in other: 1a all copies found (* = to merge, ! = divergent): 1a -> 1 checking for directory renames +resolving manifests + overwrite None partial False + ancestor 81f4b099af3d local c64f439569a9+ remote 2f8037f47a5c 1: other deleted -> r 1a: remote created -> g removing 1 @@ -20,15 +20,15 @@ 1 files updated, 0 files merged, 1 files 1 files updated, 0 files merged, 1 files removed, 0 files unresolved created new head 1 files updated, 0 files merged, 1 files removed, 0 files unresolved -resolving manifests - overwrite None partial False - ancestor c64f439569a9 local ac7575e3c052+ remote 746e9549ea96 searching for copies back to rev 1 unmatched files in local: 1a all copies found (* = to merge, ! = divergent): 1a -> 1 * checking for directory renames +resolving manifests + overwrite None partial False + ancestor c64f439569a9 local ac7575e3c052+ remote 746e9549ea96 1a: local copied/moved to 1 -> m preserving 1a for resolve of 1a picked tool 'internal:merge' for 1a (binary False symlink False) @@ -38,15 +38,15 @@ my 1a@ac7575e3c052+ other 1@746e9549ea96 0 files updated, 1 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) 1 files updated, 0 files merged, 1 files removed, 0 files unresolved -resolving manifests - overwrite None partial False - ancestor c64f439569a9 local 746e9549ea96+ remote ac7575e3c052 searching for copies back to rev 1 unmatched files in other: 1a all copies found (* = to merge, ! = divergent): 1a -> 1 * checking for directory renames +resolving manifests + overwrite None partial False + ancestor c64f439569a9 local 746e9549ea96+ remote ac7575e3c052 1: remote moved to 1a -> m preserving 1 for resolve of 1a removing 1 diff --git a/tests/test-merge-commit.out b/tests/test-merge-commit.out --- a/tests/test-merge-commit.out +++ b/tests/test-merge-commit.out @@ -22,10 +22,10 @@ 2:0a3ab4856510 0:2665aaee66e9 1:5cd961e4045d 0:2665aaee66e9 % this should use bar@rev2 as the ancestor + searching for copies back to rev 1 resolving manifests overwrite None partial False ancestor 0a3ab4856510 local 2d2f9a22c82b+ remote 7d3b554bfdf1 - searching for copies back to rev 1 bar: versions differ -> m preserving bar for resolve of bar picked tool 'internal:merge' for bar (binary False symlink False) @@ -72,10 +72,10 @@ 2:0a3ab4856510 0:2665aaee66e9 1:5cd961e4045d 0:2665aaee66e9 % this should use bar@rev2 as the ancestor + searching for copies back to rev 1 resolving manifests overwrite None partial False ancestor 0a3ab4856510 local 2d2f9a22c82b+ remote 96ab80c60897 - searching for copies back to rev 1 bar: versions differ -> m preserving bar for resolve of bar picked tool 'internal:merge' for bar (binary False symlink False) diff --git a/tests/test-merge-types.out b/tests/test-merge-types.out --- a/tests/test-merge-types.out +++ b/tests/test-merge-types.out @@ -1,10 +1,10 @@ adding a 0 files updated, 0 files merged, 0 files removed, 0 files unresolved created new head + searching for copies back to rev 1 resolving manifests overwrite None partial False ancestor c334dc3be0da local 521a1e40188f+ remote 3574f3e69b1c - searching for copies back to rev 1 conflicting flags for a (n)one, e(x)ec or sym(l)ink? n a: update permissions -> e @@ -13,10 +13,10 @@ 0 files updated, 0 files merged, 0 files % symlink is local parent, executable is other a has no flags (default for conflicts) 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + searching for copies back to rev 1 resolving manifests overwrite None partial False ancestor c334dc3be0da local 3574f3e69b1c+ remote 521a1e40188f - searching for copies back to rev 1 conflicting flags for a (n)one, e(x)ec or sym(l)ink? n a: remote is newer -> g diff --git a/tests/test-merge7.out b/tests/test-merge7.out --- a/tests/test-merge7.out +++ b/tests/test-merge7.out @@ -19,10 +19,10 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) (run 'hg heads' to see heads, 'hg merge' to merge) + searching for copies back to rev 1 resolving manifests overwrite None partial False ancestor faaea63e63a9 local 451c744aabcc+ remote a070d41e8360 - searching for copies back to rev 1 test.txt: versions differ -> m preserving test.txt for resolve of test.txt picked tool 'internal:merge' for test.txt (binary False symlink False) diff --git a/tests/test-rename-dir-merge.out b/tests/test-rename-dir-merge.out --- a/tests/test-rename-dir-merge.out +++ b/tests/test-rename-dir-merge.out @@ -5,9 +5,6 @@ moving a/a to b/a moving a/b to b/b 2 files updated, 0 files merged, 2 files removed, 0 files unresolved created new head -resolving manifests - overwrite None partial False - ancestor f9b20c0d4c51 local ce36d17b18fb+ remote 55119e611c80 searching for copies back to rev 1 unmatched files in local: a/c @@ -22,6 +19,9 @@ resolving manifests dir a/ -> b/ file a/c -> b/c file a/d -> b/d +resolving manifests + overwrite None partial False + ancestor f9b20c0d4c51 local ce36d17b18fb+ remote 55119e611c80 a/d: remote renamed directory to b/d -> d a/c: remote renamed directory to b/c -> d a/b: other deleted -> r @@ -47,9 +47,6 @@ R a/c ? b/d b/c renamed from a/c:354ae8da6e890359ef49ade27b68bbc361f3ca88 0 files updated, 0 files merged, 1 files removed, 0 files unresolved -resolving manifests - overwrite None partial False - ancestor f9b20c0d4c51 local 55119e611c80+ remote ce36d17b18fb searching for copies back to rev 1 unmatched files in local: b/a @@ -63,6 +60,9 @@ resolving manifests checking for directory renames dir a/ -> b/ file a/c -> b/c +resolving manifests + overwrite None partial False + ancestor f9b20c0d4c51 local 55119e611c80+ remote ce36d17b18fb None: local renamed directory to b/c -> d getting a/c to b/c 1 files updated, 0 files merged, 0 files removed, 0 files unresolved diff --git a/tests/test-rename-merge1.out b/tests/test-rename-merge1.out --- a/tests/test-rename-merge1.out +++ b/tests/test-rename-merge1.out @@ -2,9 +2,6 @@ checkout 2 files updated, 0 files merged, 2 files removed, 0 files unresolved created new head merge -resolving manifests - overwrite None partial False - ancestor af1939970a1c local f26ec4fc3fa3+ remote 8e765a822af2 searching for copies back to rev 1 unmatched files in local: c2 @@ -17,6 +14,9 @@ resolving manifests b2 -> a2 ! checking for directory renames a2: divergent renames -> dr +resolving manifests + overwrite None partial False + ancestor af1939970a1c local f26ec4fc3fa3+ remote 8e765a822af2 a: remote moved to b -> m b2: remote created -> g preserving a for resolve of b diff --git a/tests/test-rename-merge2.out b/tests/test-rename-merge2.out --- a/tests/test-rename-merge2.out +++ b/tests/test-rename-merge2.out @@ -2,15 +2,15 @@ created new head -------------- test L:up a R:nc a b W: - 1 get local a to b -------------- -resolving manifests - overwrite None partial False - ancestor 924404dff337 local e300d1c794ec+ remote 735846fee2d7 searching for copies back to rev 1 unmatched files in other: b all copies found (* = to merge, ! = divergent): b -> a * checking for directory renames +resolving manifests + overwrite None partial False + ancestor 924404dff337 local e300d1c794ec+ remote 735846fee2d7 rev: versions differ -> m a: remote copied to b -> m preserving a for resolve of b @@ -34,15 +34,15 @@ created new head -------------- test L:nc a b R:up a W: - 2 get rem change to a and b -------------- -resolving manifests - overwrite None partial False - ancestor 924404dff337 local ac809aeed39a+ remote f4db7e329e71 searching for copies back to rev 1 unmatched files in local: b all copies found (* = to merge, ! = divergent): b -> a * checking for directory renames +resolving manifests + overwrite None partial False + ancestor 924404dff337 local ac809aeed39a+ remote f4db7e329e71 a: remote is newer -> g b: local copied/moved to a -> m rev: versions differ -> m @@ -68,15 +68,15 @@ created new head -------------- test L:up a R:nm a b W: - 3 get local a change to b, remove a -------------- -resolving manifests - overwrite None partial False - ancestor 924404dff337 local e300d1c794ec+ remote e03727d2d66b searching for copies back to rev 1 unmatched files in other: b all copies found (* = to merge, ! = divergent): b -> a * checking for directory renames +resolving manifests + overwrite None partial False + ancestor 924404dff337 local e300d1c794ec+ remote e03727d2d66b rev: versions differ -> m a: remote moved to b -> m preserving a for resolve of b @@ -100,15 +100,15 @@ created new head -------------- test L:nm a b R:up a W: - 4 get remote change to b -------------- -resolving manifests - overwrite None partial False - ancestor 924404dff337 local ecf3cb2a4219+ remote f4db7e329e71 searching for copies back to rev 1 unmatched files in local: b all copies found (* = to merge, ! = divergent): b -> a * checking for directory renames +resolving manifests + overwrite None partial False + ancestor 924404dff337 local ecf3cb2a4219+ remote f4db7e329e71 b: local copied/moved to a -> m rev: versions differ -> m preserving b for resolve of b @@ -131,15 +131,15 @@ created new head -------------- test L: R:nc a b W: - 5 get b -------------- -resolving manifests - overwrite None partial False - ancestor 924404dff337 local 94b33a1b7f2d+ remote 735846fee2d7 searching for copies back to rev 1 unmatched files in other: b all copies found (* = to merge, ! = divergent): b -> a checking for directory renames +resolving manifests + overwrite None partial False + ancestor 924404dff337 local 94b33a1b7f2d+ remote 735846fee2d7 rev: versions differ -> m b: remote created -> g preserving rev for resolve of rev @@ -158,15 +158,15 @@ created new head -------------- test L:nc a b R: W: - 6 nothing -------------- -resolving manifests - overwrite None partial False - ancestor 924404dff337 local ac809aeed39a+ remote 97c705ade336 searching for copies back to rev 1 unmatched files in local: b all copies found (* = to merge, ! = divergent): b -> a checking for directory renames +resolving manifests + overwrite None partial False + ancestor 924404dff337 local ac809aeed39a+ remote 97c705ade336 rev: versions differ -> m preserving rev for resolve of rev picked tool 'python ../merge' for rev (binary False symlink False) @@ -183,15 +183,15 @@ created new head -------------- test L: R:nm a b W: - 7 get b -------------- -resolving manifests - overwrite None partial False - ancestor 924404dff337 local 94b33a1b7f2d+ remote e03727d2d66b searching for copies back to rev 1 unmatched files in other: b all copies found (* = to merge, ! = divergent): b -> a checking for directory renames +resolving manifests + overwrite None partial False + ancestor 924404dff337 local 94b33a1b7f2d+ remote e03727d2d66b a: other deleted -> r rev: versions differ -> m b: remote created -> g @@ -211,15 +211,15 @@ created new head -------------- test L:nm a b R: W: - 8 nothing -------------- -resolving manifests - overwrite None partial False - ancestor 924404dff337 local ecf3cb2a4219+ remote 97c705ade336 searching for copies back to rev 1 unmatched files in local: b all copies found (* = to merge, ! = divergent): b -> a checking for directory renames +resolving manifests + overwrite None partial False + ancestor 924404dff337 local ecf3cb2a4219+ remote 97c705ade336 rev: versions differ -> m preserving rev for resolve of rev picked tool 'python ../merge' for rev (binary False symlink False) @@ -235,10 +235,10 @@ created new head -------------- test L:um a b R:um a b W: - 9 do merge with ancestor in a -------------- + searching for copies back to rev 1 resolving manifests overwrite None partial False ancestor 924404dff337 local ec03c2ca8642+ remote 79cc6877a3b7 - searching for copies back to rev 1 b: versions differ -> m rev: versions differ -> m preserving b for resolve of b @@ -259,9 +259,6 @@ created new head -------------- test L:nm a b R:nm a c W: - 11 get c, keep b -------------- -resolving manifests - overwrite None partial False - ancestor 924404dff337 local ecf3cb2a4219+ remote e6abcc1a30c2 searching for copies back to rev 1 unmatched files in local: b @@ -272,6 +269,9 @@ resolving manifests b -> a ! checking for directory renames a: divergent renames -> dr +resolving manifests + overwrite None partial False + ancestor 924404dff337 local ecf3cb2a4219+ remote e6abcc1a30c2 rev: versions differ -> m c: remote created -> g preserving rev for resolve of rev @@ -293,10 +293,10 @@ created new head -------------- test L:nc a b R:up b W: - 12 merge b no ancestor -------------- + searching for copies back to rev 1 resolving manifests overwrite None partial False ancestor 924404dff337 local ac809aeed39a+ remote af30c7647fc7 - searching for copies back to rev 1 b: versions differ -> m rev: versions differ -> m preserving b for resolve of b @@ -318,10 +318,10 @@ created new head -------------- test L:up b R:nm a b W: - 13 merge b no ancestor -------------- + searching for copies back to rev 1 resolving manifests overwrite None partial False ancestor 924404dff337 local 59318016310c+ remote e03727d2d66b - searching for copies back to rev 1 a: other deleted -> r b: versions differ -> m rev: versions differ -> m @@ -344,10 +344,10 @@ created new head -------------- test L:nc a b R:up a b W: - 14 merge b no ancestor -------------- + searching for copies back to rev 1 resolving manifests overwrite None partial False ancestor 924404dff337 local ac809aeed39a+ remote 8dbce441892a - searching for copies back to rev 1 a: remote is newer -> g b: versions differ -> m rev: versions differ -> m @@ -371,10 +371,10 @@ created new head -------------- test L:up b R:nm a b W: - 15 merge b no ancestor, remove a -------------- + searching for copies back to rev 1 resolving manifests overwrite None partial False ancestor 924404dff337 local 59318016310c+ remote e03727d2d66b - searching for copies back to rev 1 a: other deleted -> r b: versions differ -> m rev: versions differ -> m @@ -397,10 +397,10 @@ created new head -------------- test L:nc a b R:up a b W: - 16 get a, merge b no ancestor -------------- + searching for copies back to rev 1 resolving manifests overwrite None partial False ancestor 924404dff337 local ac809aeed39a+ remote 8dbce441892a - searching for copies back to rev 1 a: remote is newer -> g b: versions differ -> m rev: versions differ -> m @@ -424,10 +424,10 @@ created new head -------------- test L:up a b R:nc a b W: - 17 keep a, merge b no ancestor -------------- + searching for copies back to rev 1 resolving manifests overwrite None partial False ancestor 924404dff337 local 0b76e65c8289+ remote 735846fee2d7 - searching for copies back to rev 1 b: versions differ -> m rev: versions differ -> m preserving b for resolve of b @@ -449,10 +449,10 @@ created new head -------------- test L:nm a b R:up a b W: - 18 merge b no ancestor -------------- + searching for copies back to rev 1 resolving manifests overwrite None partial False ancestor 924404dff337 local ecf3cb2a4219+ remote 8dbce441892a - searching for copies back to rev 1 b: versions differ -> m rev: versions differ -> m remote changed a which local deleted @@ -478,10 +478,10 @@ created new head -------------- test L:up a b R:nm a b W: - 19 merge b no ancestor, prompt remove a -------------- + searching for copies back to rev 1 resolving manifests overwrite None partial False ancestor 924404dff337 local 0b76e65c8289+ remote e03727d2d66b - searching for copies back to rev 1 local changed a which remote deleted use (c)hanged version or (d)elete? c a: prompt keep -> a @@ -506,15 +506,15 @@ created new head -------------- test L:up a R:um a b W: - 20 merge a and b to b, remove a -------------- -resolving manifests - overwrite None partial False - ancestor 924404dff337 local e300d1c794ec+ remote 79cc6877a3b7 searching for copies back to rev 1 unmatched files in other: b all copies found (* = to merge, ! = divergent): b -> a * checking for directory renames +resolving manifests + overwrite None partial False + ancestor 924404dff337 local e300d1c794ec+ remote 79cc6877a3b7 rev: versions differ -> m a: remote moved to b -> m preserving a for resolve of b @@ -537,15 +537,15 @@ created new head -------------- test L:um a b R:up a W: - 21 merge a and b to b -------------- -resolving manifests - overwrite None partial False - ancestor 924404dff337 local ec03c2ca8642+ remote f4db7e329e71 searching for copies back to rev 1 unmatched files in local: b all copies found (* = to merge, ! = divergent): b -> a * checking for directory renames +resolving manifests + overwrite None partial False + ancestor 924404dff337 local ec03c2ca8642+ remote f4db7e329e71 b: local copied/moved to a -> m rev: versions differ -> m preserving b for resolve of b @@ -567,9 +567,6 @@ created new head -------------- test L:nm a b R:up a c W: - 23 get c, keep b -------------- -resolving manifests - overwrite None partial False - ancestor 924404dff337 local ecf3cb2a4219+ remote 2b958612230f searching for copies back to rev 1 unmatched files in local: b @@ -578,6 +575,9 @@ resolving manifests all copies found (* = to merge, ! = divergent): b -> a * checking for directory renames +resolving manifests + overwrite None partial False + ancestor 924404dff337 local ecf3cb2a4219+ remote 2b958612230f b: local copied/moved to a -> m rev: versions differ -> m c: remote created -> g diff --git a/tests/test-up-local-change.out b/tests/test-up-local-change.out --- a/tests/test-up-local-change.out +++ b/tests/test-up-local-change.out @@ -15,12 +15,12 @@ user: test date: Mon Jan 12 13:46:40 1970 +0000 summary: 1 + searching for copies back to rev 1 + unmatched files in other: + b resolving manifests overwrite False partial False ancestor 33aaa84a386b local 33aaa84a386b+ remote 802f095af299 - searching for copies back to rev 1 - unmatched files in other: - b a: versions differ -> m b: remote created -> g preserving a for resolve of a @@ -37,7 +37,7 @@ summary: 2 resolving manifests overwrite False partial False - ancestor 33aaa84a386b local 802f095af299+ remote 33aaa84a386b + ancestor 802f095af299 local 802f095af299+ remote 33aaa84a386b a: versions differ -> m b: other deleted -> r preserving a for resolve of a @@ -59,12 +59,12 @@ user: test date: Mon Jan 12 13:46:40 1970 +0000 summary: 1 + searching for copies back to rev 1 + unmatched files in other: + b resolving manifests overwrite False partial False ancestor 33aaa84a386b local 33aaa84a386b+ remote 802f095af299 - searching for copies back to rev 1 - unmatched files in other: - b a: versions differ -> m b: remote created -> g preserving a for resolve of a @@ -115,10 +115,10 @@ abort: crosses branches (use 'hg merge' failed abort: outstanding uncommitted changes (use 'hg status' to list changes) failed + searching for copies back to rev 1 resolving manifests overwrite False partial False ancestor 33aaa84a386b local 802f095af299+ remote 030602aee63d - searching for copies back to rev 1 a: versions differ -> m b: versions differ -> m preserving a for resolve of a diff --git a/tests/test-update-reverse.out b/tests/test-update-reverse.out --- a/tests/test-update-reverse.out +++ b/tests/test-update-reverse.out @@ -42,7 +42,7 @@ side1 side2 resolving manifests overwrite True partial False - ancestor 537353581d3d local ded32b0db104+ remote 221226fb2bd8 + ancestor ded32b0db104+ local ded32b0db104+ remote 221226fb2bd8 side2: other deleted -> r side1: other deleted -> r main: remote created -> g