# HG changeset patch # User Matt Mackall # Date 1158351765 18000 # Node ID fe9b13e35e46edd09a0ea10d8dad9db0812aada5 # Parent 1b738357bba95221d9a167257d62a9279a31a093# Parent f422c8265ae52958fb28c7d655ed341994a6e252 Merge with crew diff -r f422c8265ae5 -r fe9b13e35e46 mercurial/merge.py --- a/mercurial/merge.py Wed Sep 13 13:14:08 2006 -0700 +++ b/mercurial/merge.py Fri Sep 15 15:22:45 2006 -0500 @@ -88,12 +88,9 @@ if modified or added or removed: raise util.Abort(_("outstanding uncommitted changes")) - m1n = repo.changelog.read(p1)[0] - m2n = repo.changelog.read(p2)[0] - man = repo.manifest.ancestor(m1n, m2n) - m1 = repo.manifest.read(m1n).copy() - m2 = repo.manifest.read(m2n).copy() - ma = repo.manifest.read(man) + m1 = repo.changectx(p1).manifest().copy() + m2 = repo.changectx(p2).manifest().copy() + ma = repo.changectx(pa).manifest() if not force: for f in unknown: @@ -108,7 +105,7 @@ repo.ui.debug(_(" overwrite %s branchmerge %s partial %s linear %s\n") % (overwrite, branchmerge, bool(partial), linear_path)) repo.ui.debug(_(" ancestor %s local %s remote %s\n") % - (short(man), short(m1n), short(m2n))) + (short(p1), short(p2), short(pa))) action = {} forget = [] @@ -116,9 +113,10 @@ # update m1 from working dir umap = dict.fromkeys(unknown) - for f in added + modified + unknown: - m1[f] = m1.get(f, nullid) + "+" - m1.set(f, util.is_exec(repo.wjoin(f), m1.execf(f))) + for i,l in (("a", added), ("m", modified), ("u", unknown)): + for f in l: + m1[f] = m1.get(f, nullid) + i + m1.set(f, util.is_exec(repo.wjoin(f), m1.execf(f))) for f in deleted + removed: del m1[f] @@ -157,7 +155,7 @@ repo.ui.debug(_(" remote %s is newer, get\n") % f) action[f] = (m2.execf(f), m2[f], None) queued = 1 - elif f in umap or f in added: + elif n[20:] in ("u","a"): # this unknown file is the same as the checkout # we need to reset the dirstate if the file was added action[f] = (m2.execf(f), m2[f], None) @@ -188,7 +186,7 @@ action[f] = (None, None, None) else: # file is created on branch or in working directory - if overwrite and f not in umap: + if overwrite and n[20:] != "u": repo.ui.debug(_("remote deleted %s, clobbering\n") % f) action[f] = (None, None, None) elif not n[20:]: # same as parent @@ -237,8 +235,7 @@ repo.hook('preupdate', throw=True, parent1=xp1, parent2=xxp2) # update files - unresolved = [] - updated, merged, removed = 0, 0, 0 + updated, merged, removed, unresolved = 0, 0, 0, 0 files = action.keys() files.sort() for f in files: @@ -258,7 +255,7 @@ elif other: repo.ui.status(_("merging %s\n") % f) if merge3(repo, f, my, other, xp1, xp2): - unresolved.append(f) + unresolved += 1 util.set_exec(repo.wjoin(f), flag) merged += 1 else: @@ -303,9 +300,9 @@ if show_stats: stats = ((updated, _("updated")), - (merged - len(unresolved), _("merged")), + (merged - unresolved, _("merged")), (removed, _("removed")), - (len(unresolved), _("unresolved"))) + (unresolved, _("unresolved"))) note = ", ".join([_("%d files %s") % s for s in stats]) repo.ui.status("%s\n" % note) if not partial: @@ -323,6 +320,6 @@ repo.ui.status(_("There are unresolved merges with" " locally modified files.\n")) - repo.hook('update', parent1=xp1, parent2=xxp2, error=len(unresolved)) - return len(unresolved) + repo.hook('update', parent1=xp1, parent2=xxp2, error=unresolved) + return unresolved diff -r f422c8265ae5 -r fe9b13e35e46 tests/test-merge7.out --- a/tests/test-merge7.out Wed Sep 13 13:14:08 2006 -0700 +++ b/tests/test-merge7.out Fri Sep 15 15:22:45 2006 -0500 @@ -23,7 +23,7 @@ merge: warning: conflicts during merge resolving manifests overwrite None branchmerge True partial False linear False - ancestor 055d847dd401 local 2eded9ab0a5c remote 84cf5750dd20 + ancestor 451c744aabcc local a070d41e8360 remote faaea63e63a9 test.txt versions differ, resolve merging test.txt resolving test.txt diff -r f422c8265ae5 -r fe9b13e35e46 tests/test-up-local-change.out --- a/tests/test-up-local-change.out Wed Sep 13 13:14:08 2006 -0700 +++ b/tests/test-up-local-change.out Fri Sep 15 15:22:45 2006 -0500 @@ -16,7 +16,7 @@ resolving manifests overwrite False branchmerge False partial False linear True - ancestor a0c8bcbbb45c local a0c8bcbbb45c remote 1165e8bd193e + ancestor 33aaa84a386b local 802f095af299 remote 33aaa84a386b a versions differ, resolve remote created b merging a @@ -32,7 +32,7 @@ resolving manifests overwrite False branchmerge False partial False linear True - ancestor a0c8bcbbb45c local 1165e8bd193e remote a0c8bcbbb45c + ancestor 802f095af299 local 33aaa84a386b remote 33aaa84a386b remote deleted b removing b 0 files updated, 0 files merged, 1 files removed, 0 files unresolved @@ -50,7 +50,7 @@ resolving manifests overwrite False branchmerge False partial False linear True - ancestor a0c8bcbbb45c local a0c8bcbbb45c remote 1165e8bd193e + ancestor 33aaa84a386b local 802f095af299 remote 33aaa84a386b a versions differ, resolve remote created b merging a @@ -101,7 +101,7 @@ failed resolving manifests overwrite False branchmerge True partial False linear False - ancestor a0c8bcbbb45c local 1165e8bd193e remote 4096f2872392 + ancestor 802f095af299 local 030602aee63d remote 33aaa84a386b a versions differ, resolve b versions differ, resolve merging a diff -r f422c8265ae5 -r fe9b13e35e46 tests/test-update-reverse.out --- a/tests/test-update-reverse.out Wed Sep 13 13:14:08 2006 -0700 +++ b/tests/test-update-reverse.out Fri Sep 15 15:22:45 2006 -0500 @@ -41,7 +41,7 @@ side2 resolving manifests overwrite True branchmerge False partial False linear False - ancestor 8515d4bfda76 local 1c0f48f8ece6 remote 0594b9004bae + ancestor ded32b0db104 local 221226fb2bd8 remote 537353581d3d remote deleted side2, clobbering remote deleted side1, clobbering remote created main