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.
--- 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]):
--- a/tests/test-revlog-ancestry.py.out Fri Jun 01 12:45:16 2012 -0700
+++ b/tests/test-revlog-ancestry.py.out Fri Jun 01 15:44:13 2012 -0700
@@ -4,6 +4,8 @@
3 4 2 1 0
Ancestors of 5 and 4
4 2 0
+Ancestors of 7, stop at 6
+6
Descendants of 5
7 8