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
--- 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)
--- a/mercurial/revset.py Tue Jun 20 22:11:23 2017 +0900
+++ b/mercurial/revset.py Tue Jun 20 22:26:52 2017 +0900
@@ -600,19 +600,7 @@
if not roots:
return baseset()
s = dagop.revdescendants(repo, roots, followfirst)
-
- # Both sets need to be ascending in order to lazily return the union
- # in the correct order.
- base = subset & roots
- desc = subset & s
- result = base + desc
- if subset.isascending():
- result.sort()
- elif subset.isdescending():
- result.sort(reverse=True)
- else:
- result = subset & result
- return result
+ return subset & s
@predicate('descendants(set)', safe=True)
def descendants(repo, subset, x):
--- a/tests/test-revset.t Tue Jun 20 22:11:23 2017 +0900
+++ b/tests/test-revset.t Tue Jun 20 22:26:52 2017 +0900
@@ -3530,11 +3530,7 @@
('symbol', 'merge')
None))
* set:
- <addset+
- <filteredset
- <fullreposet+ 0:10>,
- <merge>>,
- <generatorset+>>
+ <generatorset+>
6
7