mercurial/repoview.py
changeset 18273 a2d54f68e13c
parent 18272 95ef7a87c053
child 18274 254b708fd37d
--- a/mercurial/repoview.py	Fri Jan 04 05:44:01 2013 +0100
+++ b/mercurial/repoview.py	Fri Jan 04 20:19:05 2013 +0100
@@ -38,8 +38,17 @@
     Secret and hidden changeset should not pretend to be here."""
     assert not repo.changelog.filteredrevs
     # fast path in simple case to avoid impact of non optimised code
-    if phases.hassecret(repo) or repo.obsstore:
-        return frozenset(repo.revs('hidden() + secret()'))
+    hiddens = filteredrevs(repo, 'hidden')
+    if phases.hassecret(repo):
+        cl = repo.changelog
+        secret = phases.secret
+        getphase = repo._phasecache.phase
+        first = min(cl.rev(n) for n in repo._phasecache.phaseroots[secret])
+        revs = cl.revs(start=first)
+        secrets = set(r for r in revs if getphase(repo, r) >= secret)
+        return frozenset(hiddens | secrets)
+    else:
+        return hiddens
     return frozenset()
 
 def computemutable(repo):