changeset 17827:612db9d7e76a

obsolete: have `allsuccessors` takes a list of nodes Additional logic, used to detect mutable history troubles, will need to quickly compute successors of a whole set of changeset.
author Pierre-Yves David <pierre-yves.david@logilab.fr>
date Tue, 16 Oct 2012 15:49:58 +0200
parents 46e1a4e24225
children 9495be4126ef
files mercurial/bookmarks.py mercurial/discovery.py mercurial/obsolete.py
diffstat 3 files changed, 7 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/bookmarks.py	Fri Oct 19 00:30:11 2012 +0200
+++ b/mercurial/bookmarks.py	Tue Oct 16 15:49:58 2012 +0200
@@ -267,7 +267,7 @@
                 if c.phase() > phases.public:
                     # obsolescence marker does not apply to public changeset
                     succs.update(obsolete.allsuccessors(repo.obsstore,
-                                                        c.node()))
+                                                        [c.node()]))
             validdests = set(repo.set('%ln::', succs))
         validdests.remove(old)
         return new in validdests
--- a/mercurial/discovery.py	Fri Oct 19 00:30:11 2012 +0200
+++ b/mercurial/discovery.py	Tue Oct 16 15:49:58 2012 +0200
@@ -298,7 +298,7 @@
                 if nh in repo and repo[nh].phase() <= phases.public:
                     newhs.add(nh)
                 else:
-                    for suc in obsolete.allsuccessors(repo.obsstore, nh):
+                    for suc in obsolete.allsuccessors(repo.obsstore, [nh]):
                         if suc != nh and suc in allfuturecommon:
                             discardedheads.add(nh)
                             break
--- a/mercurial/obsolete.py	Fri Oct 19 00:30:11 2012 +0200
+++ b/mercurial/obsolete.py	Tue Oct 16 15:49:58 2012 +0200
@@ -351,11 +351,13 @@
     for data in ctx._repo.obsstore.successors.get(ctx.node(), ()):
         yield marker(ctx._repo, data)
 
-def allsuccessors(obsstore, node):
-    """Yield every successor of <node>
+def allsuccessors(obsstore, nodes):
+    """Yield node for every successor of <nodes>.
+
+    Some successors may be unknown locally.
 
     This is a linear yield unsuited to detecting split changesets."""
-    remaining = set([node])
+    remaining = set(nodes)
     seen = set(remaining)
     while remaining:
         current = remaining.pop()