adjustlinkrev: handle 'None' value as source stable
authorPierre-Yves David <pierre-yves.david@fb.com>
Thu, 19 Mar 2015 23:57:34 -0700
branchstable
changeset 24411 5a12ef618c03
parent 24410 86de531e07e1
child 24412 9372180b8c9b
adjustlinkrev: handle 'None' value as source When the source rev value is 'None', the ctx is a working context. We cannot compute the ancestors from there so we directly skip to its parents. This will be necessary to allow 'None' value for '_descendantrev' itself necessary to make all contexts used in 'mergecopies' reuse the same '_ancestrycontext'.
mercurial/context.py
--- a/mercurial/context.py	Thu Mar 19 23:52:26 2015 -0700
+++ b/mercurial/context.py	Thu Mar 19 23:57:34 2015 -0700
@@ -774,9 +774,15 @@
         # hack to reuse ancestor computation when searching for renames
         memberanc = getattr(self, '_ancestrycontext', None)
         iteranc = None
-        revs = [srcrev]
+        if srcrev is None:
+            # wctx case, used by workingfilectx during mergecopy
+            revs = [p.rev() for p in self._repo[None].parents()]
+            inclusive = True # we skipped the real (revless) source
+        else:
+            revs = [srcrev]
         if memberanc is None:
-            memberanc = iteranc = cl.ancestors(revs, lkr, inclusive=inclusive)
+            memberanc = iteranc = cl.ancestors(revs, lkr,
+                                               inclusive=inclusive)
         # check if this linkrev is an ancestor of srcrev
         if lkr not in memberanc:
             if iteranc is None: