# HG changeset patch # User Matt Mackall # Date 2008-01-14 22:28:32 # Node ID c704b03884efd730e8e57f79099e32a783cc70d4 # Parent 85888efbdfff94d349d0df9331e8c0a1715b4f60 merge: add a bit more sanity to divergent copy checks diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -210,21 +210,23 @@ def findcopies(repo, m1, m2, ma, limit): for f in u2: checkcopies(ctx(f, m2[f]), m1, ma) - d2 = {} + diverge2 = {} for of, fl in diverge.items(): - for f in fl: - fo = list(fl) - fo.remove(f) - d2[f] = (of, fo) + if len(fl) == 1: + del diverge[of] # not actually divergent + else: + diverge2.update(dict.fromkeys(fl)) # reverse map for below if fullcopy: repo.ui.debug(_(" all copies found (* = to merge, ! = divergent):\n")) for f in fullcopy: note = "" if f in copy: note += "*" - if f in diverge: note += "!" + if f in diverge2: note += "!" repo.ui.debug(_(" %s -> %s %s\n") % (f, fullcopy[f], note)) + del diverge2 + if not fullcopy or not repo.ui.configbool("merge", "followdirs", True): return copy, diverge 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 @@ -11,9 +11,9 @@ resolving manifests b b2 all copies found (* = to merge, ! = divergent): - c2 -> a2 + c2 -> a2 ! b -> a * - b2 -> a2 + b2 -> a2 ! checking for directory renames a2: divergent renames -> dr a: remote moved to b -> m 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 @@ -228,8 +228,8 @@ resolving manifests unmatched files in other: c all copies found (* = to merge, ! = divergent): - c -> a - b -> a + c -> a ! + b -> a ! checking for directory renames a: divergent renames -> dr rev: versions differ -> m