changeset 3097:fe9b13e35e46

Merge with crew
author Matt Mackall <mpm@selenic.com>
date Fri, 15 Sep 2006 15:22:45 -0500
parents 1b738357bba9 (diff) f422c8265ae5 (current diff)
children 09e8aecd8016
files mercurial/merge.py
diffstat 4 files changed, 22 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- 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
 
--- 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
--- 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
--- 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