diff mercurial/dagop.py @ 33075:d83b189aef83

dagop: change revdescendants() to include all root revisions Prepares for adding depth support. I want to process depth=0 in revdescendants() to make things simpler. only() also calls dagop.revdescendants(), but it filters out root revisions explicitly. So this should cause no problem. # descendants(0) using hg repo 0) 0.052380 1) 0.051226 # only(tip) using hg repo 0) 0.001433 1) 0.001425
author Yuya Nishihara <yuya@tcha.org>
date Tue, 20 Jun 2017 22:26:52 +0900
parents b04cf7a6e0f3
children a76a64c78807
line wrap: on
line diff
--- a/mercurial/dagop.py	Tue Jun 20 22:11:23 2017 +0900
+++ b/mercurial/dagop.py	Tue Jun 20 22:26:52 2017 +0900
@@ -98,11 +98,15 @@
     if first == nullrev:
         # Are there nodes with a null first parent and a non-null
         # second one? Maybe. Do we care? Probably not.
+        yield first
         for i in cl:
             yield i
     else:
         seen = set(revs)
-        for i in cl.revs(first + 1):
+        for i in cl.revs(first):
+            if i in seen:
+                yield i
+                continue
             for x in cl.parentrevs(i)[:cut]:
                 if x != nullrev and x in seen:
                     seen.add(i)
@@ -110,7 +114,8 @@
                     break
 
 def revdescendants(repo, revs, followfirst):
-    """Like revlog.descendants() but supports followfirst."""
+    """Like revlog.descendants() but supports additional options, includes
+    the given revs themselves, and returns a smartset"""
     gen = _genrevdescendants(repo, revs, followfirst)
     return generatorset(gen, iterasc=True)