context: generate file ancestors in reverse revision order (issue2642) stable
authorMatt Mackall <mpm@selenic.com>
Wed, 23 Feb 2011 17:27:05 -0600
branchstable
changeset 13468 d100702326d5
parent 13467 31aa2e5b0750
child 13469 07a6460f829a
context: generate file ancestors in reverse revision order (issue2642) The related() function in copies assumes that revisions are generated in reverse revision order, so it was getting confused in some situations.
mercurial/context.py
tests/test-rename-merge1.t
--- a/mercurial/context.py	Wed Feb 23 13:21:55 2011 +0500
+++ b/mercurial/context.py	Wed Feb 23 17:27:05 2011 -0600
@@ -550,10 +550,14 @@
         return None
 
     def ancestors(self):
-        seen = set(str(self))
+        seen = set()
         visit = [self]
         while visit:
-            for parent in visit.pop(0).parents():
+            parents = visit.pop(0).parents()
+            if len(parents) > 1 and parents[1].rev() > parents[0].rev():
+                # make sure we return ancestors in reverse revision order
+                parents = reversed(parents)
+            for parent in parents:
                 s = str(parent)
                 if s not in seen:
                     visit.append(parent)
--- a/tests/test-rename-merge1.t	Wed Feb 23 13:21:55 2011 +0500
+++ b/tests/test-rename-merge1.t	Wed Feb 23 17:27:05 2011 -0600
@@ -99,3 +99,29 @@
    b3
    b4
   2 files updated, 0 files merged, 1 files removed, 0 files unresolved
+
+Check for issue2642
+
+  $ hg init t
+  $ cd t
+
+  $ echo c0 > f1
+  $ hg ci -Aqm0
+
+  $ hg up null -q
+  $ echo c1 > f1 # backport
+  $ hg ci -Aqm1
+  $ hg mv f1 f2
+  $ hg ci -qm2
+
+  $ hg up 0 -q
+  $ hg merge 1 -q --tool internal:local
+  $ hg ci -qm3
+
+  $ hg merge 2
+  merging f1 and f2 to f2
+  0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+  (branch merge, don't forget to commit)
+
+  $ cat f2
+  c0