Mercurial > hg
changeset 16868:eb88ed4269c5
revlog: add optional stoprev arg to revlog.ancestors()
This will be used as a step in removing reachable() in a future diff.
Doing it now because bryano is in the process of rewriting ancestors in
C. This depends on bryano's patch to replace *revs with revs in the
declaration of revlog.ancestors.
author | Joshua Redstone <joshua.redstone@fb.com> |
---|---|
date | Fri, 01 Jun 2012 15:44:13 -0700 |
parents | 1093ad1e8903 |
children | 54b03085065f |
files | mercurial/revlog.py tests/test-revlog-ancestry.py tests/test-revlog-ancestry.py.out |
diffstat | 3 files changed, 10 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/revlog.py Fri Jun 01 12:45:16 2012 -0700 +++ b/mercurial/revlog.py Fri Jun 01 15:44:13 2012 -0700 @@ -381,8 +381,9 @@ visit.append(p) return reachable - def ancestors(self, revs): + def ancestors(self, revs, stoprev=0): """Generate the ancestors of 'revs' in reverse topological order. + Does not generate revs lower than stoprev. Yield a sequence of revision numbers starting with the parents of each revision in revs, i.e., each revision is *not* considered @@ -393,6 +394,8 @@ seen = set([nullrev]) while visit: for parent in self.parentrevs(visit.popleft()): + if parent < stoprev: + continue if parent not in seen: visit.append(parent) seen.add(parent)
--- a/tests/test-revlog-ancestry.py Fri Jun 01 12:45:16 2012 -0700 +++ b/tests/test-revlog-ancestry.py Fri Jun 01 15:44:13 2012 -0700 @@ -58,6 +58,10 @@ for r in repo.changelog.ancestors([5, 4]): print r, + print '\nAncestors of 7, stop at 6' + for r in repo.changelog.ancestors([7], 6): + print r, + # Descendants print '\n\nDescendants of 5' for r in repo.changelog.descendants([5]):