[patch 08/10] Add revlog.reachable to find a graph of ancestors for a given rev

Chris Mason mason at suse.com
Tue Aug 9 12:43:01 CDT 2005


# HG changeset patch
# User mason at suse.com

Add revlog.reachable to find a graph of ancestors for a given rev

Index: mine/mercurial/revlog.py
===================================================================
--- mine.orig/mercurial/revlog.py
+++ mine/mercurial/revlog.py
@@ -176,6 +176,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 = []

--


More information about the Mercurial mailing list