# HG changeset patch # User mason@suse.com # Date 2005-08-27 02:19:35 # Node ID 55bf5cfde69e70d8c95dffb1230f1578a077e9b7 # Parent 7b35a980b982da663a7bde296d994cce30e341d3 Add revlog.reachable to find a graph of ancestors for a given rev diff --git a/mercurial/revlog.py b/mercurial/revlog.py --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -170,6 +170,28 @@ class revlog: def end(self, rev): return self.start(rev) + self.length(rev) def base(self, rev): return self.index[rev][2] + def reachable(self, rev, stop=None): + reachable = {} + visit = [rev] + reachable[rev] = 1 + if stop: + stopn = self.rev(stop) + else: + stopn = 0 + while visit: + n = visit.pop(0) + if n == stop: + continue + if n == nullid: + continue + for p in self.parents(n): + if self.rev(p) < stopn: + continue + if p not in reachable: + reachable[p] = 1 + visit.append(p) + return reachable + def heads(self, stop=None): p = {} h = []