phases: add a function to compute visible heads
authorPierre-Yves David <pierre-yves.david@logilab.fr>
Mon, 19 Dec 2011 11:37:44 +0100
changeset 15697 21eb048edc19
parent 15696 0cb45fef99ba
child 15700 1facaad963a8
child 15714 9c4adcb785ee
phases: add a function to compute visible heads This function will be used to hide secret changeset.
mercurial/phases.py
--- a/mercurial/phases.py	Sun Dec 18 23:16:46 2011 +0100
+++ b/mercurial/phases.py	Mon Dec 19 11:37:44 2011 +0100
@@ -236,6 +236,21 @@
     finally:
         lock.release()
 
+def visibleheads(repo):
+    """return the set of visible head of this repo"""
+    # XXX we want a cache on this
+    sroots = repo._phaseroots[2]
+    if sroots:
+        # XXX very slow revset. storing heads or secret "boundary" would help.
+        revset = repo.set('heads(not (%ln::))', sroots)
+
+        vheads = [ctx.node() for ctx in revset]
+        if not vheads:
+            vheads.append(nullid)
+    else:
+        vheads = repo.heads()
+    return vheads
+
 def analyzeremotephases(repo, subset, roots):
     """Compute phases heads and root in a subset of node from root dict