mercurial/phases.py
branchstable
changeset 16535 39d1f83eb05d
parent 16293 bc1d949261c4
child 16588 72319bfd7966
--- a/mercurial/phases.py	Fri Apr 27 13:18:09 2012 -0500
+++ b/mercurial/phases.py	Tue Apr 24 16:32:44 2012 +0200
@@ -263,6 +263,28 @@
         vheads = repo.heads()
     return vheads
 
+def visiblebranchmap(repo):
+    """return a branchmap for the visible set"""
+    # XXX Recomputing this data on the fly is very slow.  We should build a
+    # XXX cached version while computin the standard branchmap version.
+    sroots = repo._phaseroots[secret]
+    if sroots:
+        vbranchmap = {}
+        for branch, nodes in  repo.branchmap().iteritems():
+            # search for secret heads.
+            for n in nodes:
+                if repo[n].phase() >= secret:
+                    nodes = None
+                    break
+            # if secreat heads where found we must compute them again
+            if nodes is None:
+                s = repo.set('heads(branch(%s) - secret())', branch)
+                nodes = [c.node() for c in s]
+            vbranchmap[branch] = nodes
+    else:
+        vbranchmap = repo.branchmap()
+    return vbranchmap
+
 def analyzeremotephases(repo, subset, roots):
     """Compute phases heads and root in a subset of node from root dict