Mercurial > public > mercurial-scm > hg
diff mercurial/revlog.py @ 6872:c7cc40fd74f6
Add ancestors and descendants to revlog
This patch adds two methods to revlog:
- ancestors: given a list of revisions returns their ancestors
- descendants: given a list of revisions return their descendants
author | Stefano Tortarolo <stefano.tortarolo@gmail.com> |
---|---|
date | Sat, 19 Jul 2008 18:19:50 +0200 |
parents | fb42030d79d6 |
children | 22cb82433842 |
line wrap: on
line diff
--- a/mercurial/revlog.py Sat Aug 09 02:10:22 2008 +0200 +++ b/mercurial/revlog.py Sat Jul 19 18:19:50 2008 +0200 @@ -596,6 +596,27 @@ visit.append(p) return reachable + def ancestors(self, *revs): + 'Generate the ancestors of revs using a breadth-first visit' + visit = list(revs) + seen = util.set([nullrev]) + while visit: + for parent in self.parentrevs(visit.pop(0)): + if parent not in seen: + visit.append(parent) + seen.add(parent) + yield parent + + def descendants(self, *revs): + 'Generate the descendants of revs in topological order' + seen = util.set(revs) + for i in xrange(min(revs) + 1, len(self)): + for x in self.parentrevs(i): + if x != nullrev and x in seen: + seen.add(i) + yield i + break + def nodesbetween(self, roots=None, heads=None): """Return a tuple containing three elements. Elements 1 and 2 contain a final list bases and heads after all the unreachable ones have been