changeset 2899:8743188f4d2e

merge: consolidate dirstate updates
author Matt Mackall <mpm@selenic.com>
date Tue, 15 Aug 2006 23:17:06 -0500
parents db397c38005d
children ef8ee4477019 addb58e3b41c ee6ed2b29e1a
files mercurial/merge.py
diffstat 1 files changed, 32 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/merge.py	Tue Aug 15 22:46:35 2006 -0500
+++ b/mercurial/merge.py	Tue Aug 15 23:17:06 2006 -0500
@@ -254,11 +254,6 @@
         t = repo.file(f).read(node)
         repo.wwrite(f, t)
         util.set_exec(repo.wjoin(f), flag)
-        if not partial:
-            if branchmerge:
-                repo.dirstate.update([f], 'n', st_mtime=-1)
-            else:
-                repo.dirstate.update([f], 'n')
 
     # merge the tricky bits
     unresolved = []
@@ -271,7 +266,38 @@
         if ret:
             unresolved.append(f)
         util.set_exec(repo.wjoin(f), flag)
-        if not partial:
+
+    remove.sort()
+    for f in remove:
+        repo.ui.note(_("removing %s\n") % f)
+        util.audit_path(f)
+        try:
+            util.unlink(repo.wjoin(f))
+        except OSError, inst:
+            if inst.errno != errno.ENOENT:
+                repo.ui.warn(_("update failed to remove %s: %s!\n") %
+                             (f, inst.strerror))
+
+    # update dirstate
+    if not partial:
+        repo.dirstate.setparents(p1, p2)
+        repo.dirstate.forget(forget)
+        if branchmerge:
+            repo.dirstate.update(remove, 'r')
+        else:
+            repo.dirstate.forget(remove)
+
+        files = get.keys()
+        files.sort()
+        for f in files:
+            if branchmerge:
+                repo.dirstate.update([f], 'n', st_mtime=-1)
+            else:
+                repo.dirstate.update([f], 'n')
+
+        files = merge.keys()
+        files.sort()
+        for f in files:
             if branchmerge:
                 # We've done a branch merge, mark this file as merged
                 # so that we properly record the merger later
@@ -286,26 +312,6 @@
                 f_len = fl.size(fl.rev(other))
                 repo.dirstate.update([f], 'n', st_size=f_len, st_mtime=-1)
 
-    remove.sort()
-    for f in remove:
-        repo.ui.note(_("removing %s\n") % f)
-        util.audit_path(f)
-        try:
-            util.unlink(repo.wjoin(f))
-        except OSError, inst:
-            if inst.errno != errno.ENOENT:
-                repo.ui.warn(_("update failed to remove %s: %s!\n") %
-                             (f, inst.strerror))
-    if not partial:
-        if branchmerge:
-            repo.dirstate.update(remove, 'r')
-        else:
-            repo.dirstate.forget(remove)
-
-    if not partial:
-        repo.dirstate.setparents(p1, p2)
-        repo.dirstate.forget(forget)
-
     if show_stats:
         stats = ((len(get), _("updated")),
                  (len(merge) - len(unresolved), _("merged")),