mirror of
https://github.com/facebook/sapling.git
synced 2024-10-08 07:49:11 +03:00
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
This commit is contained in:
parent
42de67c95b
commit
c6472824e6
@ -98,11 +98,15 @@ def _genrevdescendants(repo, revs, followfirst):
|
||||
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 @@ def _genrevdescendants(repo, revs, followfirst):
|
||||
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)
|
||||
|
||||
|
@ -600,19 +600,7 @@ def _descendants(repo, subset, x, followfirst=False):
|
||||
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):
|
||||
|
@ -3530,11 +3530,7 @@ test alias recursion
|
||||
('symbol', 'merge')
|
||||
None))
|
||||
* set:
|
||||
<addset+
|
||||
<filteredset
|
||||
<fullreposet+ 0:10>,
|
||||
<merge>>,
|
||||
<generatorset+>>
|
||||
<generatorset+>
|
||||
6
|
||||
7
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user