[PATCH 4 of 8] dagop: yield intro filectx by filectxancestors()

Yuya Nishihara yuya at tcha.org
Wed Dec 6 10:05:48 EST 2017


# HG changeset patch
# User Yuya Nishihara <yuya at tcha.org>
# Date 1474534126 -32400
#      Thu Sep 22 17:48:46 2016 +0900
# Node ID 383d767942609ea0c7fe1a12abbdf0063d8f7f80
# Parent  79e2137e034bcd8d9707c2e09780f7d1901e4bf0
dagop: yield intro filectx by filectxancestors()

This is the convention of dagop.*ancestors() functions.

diff --git a/mercurial/dagop.py b/mercurial/dagop.py
--- a/mercurial/dagop.py
+++ b/mercurial/dagop.py
@@ -76,7 +76,7 @@ def _walkrevtree(pfunc, revs, startdepth
                     heapq.heappush(pendingheap, (heapsign * prev, pdepth))
 
 def filectxancestors(fctx, followfirst=False):
-    """Like filectx.ancestors()"""
+    """Like filectx.ancestors(), but includes the given fctx itself"""
     visit = {}
     c = fctx
     if followfirst:
@@ -84,6 +84,7 @@ def filectxancestors(fctx, followfirst=F
     else:
         cut = None
 
+    yield c
     while True:
         for parent in c.parents()[:cut]:
             visit[(parent.linkrev(), parent.filenode())] = parent
diff --git a/mercurial/revset.py b/mercurial/revset.py
--- a/mercurial/revset.py
+++ b/mercurial/revset.py
@@ -929,11 +929,9 @@ def _follow(repo, subset, x, name, follo
 
         s = set()
         for fname in files:
-            fctx = c[fname]
+            fctx = c[fname].introfilectx()
             a = dagop.filectxancestors(fctx, followfirst)
             s = s.union(set(c.rev() for c in a))
-            # include the revision responsible for the most recent version
-            s.add(fctx.introrev())
     else:
         s = dagop.revancestors(repo, baseset([c.rev()]), followfirst)
 


More information about the Mercurial-devel mailing list