changeset 17009:0c18aed2fcca

revlog: remove reachable and switch call sites to ancestors This change does a trivial conversion of callsites to ancestors. Followon diffs will switch the callsites over to revs.
author Joshua Redstone <joshua.redstone@fb.com>
date Fri, 08 Jun 2012 08:39:44 -0700
parents 553e8f5aba7a
children a6c64211acdb
files hgext/transplant.py mercurial/discovery.py mercurial/localrepo.py mercurial/revlog.py
diffstat 4 files changed, 16 insertions(+), 29 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/transplant.py	Fri Jun 08 07:59:37 2012 -0700
+++ b/hgext/transplant.py	Fri Jun 08 08:39:44 2012 -0700
@@ -91,14 +91,22 @@
         '''returns True if a node is already an ancestor of parent
         or has already been transplanted'''
         if hasnode(repo, node):
-            if node in repo.changelog.reachable(parent, stop=node):
+            reachablerevs = repo.changelog.incancestors(
+                [repo.changelog.rev(parent)],
+                stoprev=repo.changelog.rev(node))
+            reachable = (repo.changelog.node(rev) for rev in reachablerevs)
+            if node in reachable:
                 return True
         for t in self.transplants.get(node):
             # it might have been stripped
             if not hasnode(repo, t.lnode):
                 self.transplants.remove(t)
                 return False
-            if t.lnode in repo.changelog.reachable(parent, stop=t.lnode):
+            reachablerevs = repo.changelog.incancestors(
+                [repo.changelog.rev(parent)],
+                stoprev=repo.changelog.rev(t.lnode))
+            reachable = (repo.changelog.node(rev) for rev in reachablerevs)
+            if t.lnode in reachable:
                 return True
         return False
 
--- a/mercurial/discovery.py	Fri Jun 08 07:59:37 2012 -0700
+++ b/mercurial/discovery.py	Fri Jun 08 08:39:44 2012 -0700
@@ -214,8 +214,8 @@
                 if latest not in newheads:
                     continue
                 minhrev = min(cl.rev(h) for h in newheads)
-                reachable = cl.reachable(latest, cl.node(minhrev))
-                reachable.remove(latest)
+                reachable = [cl.node(rev) for rev in
+                             cl.ancestors([cl.rev(latest)], minhrev)]
                 newheads.difference_update(reachable)
         branches = set([None])
         newmap = {None: newheads}
--- a/mercurial/localrepo.py	Fri Jun 08 07:59:37 2012 -0700
+++ b/mercurial/localrepo.py	Fri Jun 08 08:39:44 2012 -0700
@@ -590,8 +590,10 @@
                 if latest not in bheads:
                     continue
                 minbhnode = self[bheads[0]].node()
-                reachable = self.changelog.reachable(latest, minbhnode)
-                reachable.remove(latest)
+                cl = self.changelog
+                ancestors = cl.ancestors([cl.rev(latest)],
+                                          cl.rev(minbhnode))
+                reachable = [cl.node(rev) for rev in ancestors]
                 if reachable:
                     bheads = [b for b in bheads if b not in reachable]
             partial[branch] = bheads
--- a/mercurial/revlog.py	Fri Jun 08 07:59:37 2012 -0700
+++ b/mercurial/revlog.py	Fri Jun 08 08:39:44 2012 -0700
@@ -361,29 +361,6 @@
         return len(t)
     size = rawsize
 
-    def reachable(self, node, stop=None):
-        """return the set of all nodes ancestral to a given node, including
-         the node itself, stopping when stop is matched"""
-        reachable = set((node,))
-        visit = util.deque([node])
-        if stop:
-            stopn = self.rev(stop)
-        else:
-            stopn = 0
-        while visit:
-            n = visit.popleft()
-            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.add(p)
-                    visit.append(p)
-        return reachable
-
     def ancestors(self, revs, stoprev=0):
         """Generate the ancestors of 'revs' in reverse topological order.
         Does not generate revs lower than stoprev.