Mercurial > public > mercurial-scm > hg-stable
diff mercurial/dagop.py @ 33087: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)