merge: simplify file revision comparison logic
authorMatt Mackall <mpm@selenic.com>
Mon, 08 Jun 2009 18:14:44 -0500
changeset 8752 f177bdab261b
parent 8751 e8d80e0835c7
child 8753 af5f099d932b
merge: simplify file revision comparison logic
mercurial/merge.py
--- a/mercurial/merge.py	Mon Jun 08 18:14:44 2009 -0500
+++ b/mercurial/merge.py	Mon Jun 08 18:14:44 2009 -0500
@@ -174,22 +174,16 @@
             continue
         if f in m2:
             rflags = fmerge(f, f, f)
-            # are files different?
-            if n != m2[f]:
-                a = ma.get(f, nullid)
-                # is remote's version newer?
-                if m2[f] != a:
-                    # are both different from the ancestor?
-                    if n != a:
-                        act("versions differ", "m", f, f, f, rflags, False)
-                    else:
-                        act("remote is newer", "g", f, rflags)
-                    continue
-            # contents don't need updating, check mode bits
-            if m1.flags(f) != rflags:
-                act("update permissions", "e", f, rflags)
-        elif f in copied:
-            continue
+            a = ma.get(f, nullid)
+            if n == m2[f] or m2[f] == a: # same or local newer
+                if m1.flags(f) != rflags:
+                    act("update permissions", "e", f, rflags)
+            elif n == a: # remote newer
+                act("remote is newer", "g", f, rflags)
+            else: # both changed
+                act("versions differ", "m", f, f, f, rflags, False)
+        elif f in copied: # files we'll deal with on m2 side
+            pass
         elif f in copy:
             f2 = copy[f]
             if f2 not in m2: # directory rename
@@ -215,9 +209,7 @@
     for f, n in m2.iteritems():
         if partial and not partial(f):
             continue
-        if f in m1:
-            continue
-        if f in copied:
+        if f in m1 or f in copied: # files already visited
             continue
         if f in copy:
             f2 = copy[f]