obsolete: avoid using revset language to compute the obsolete revset
This is part of a refactoring that moves some phase query optimization from
revset.py to phases.py. See previous patches for the motivation.
Now we have APIs in phasecache to get the non-public set efficiently, let's
use it directly instead of going through the "not public()" revset language
in "obsolete()" computation.
This patch was meaured using:
for i in 'public()' 'not public()' 'draft()' 'not draft()'; do
hg perfrevset "$i"; hg perfrevset "$i" --hidden;
done
and no noticeable (> 1%) performance difference was observed.
--- a/mercurial/obsolete.py Sat Feb 18 00:39:31 2017 -0800
+++ b/mercurial/obsolete.py Sat Feb 18 00:55:20 2017 -0800
@@ -1120,7 +1120,7 @@
"""the set of obsolete revisions"""
obs = set()
getnode = repo.changelog.node
- notpublic = repo.revs("not public()")
+ notpublic = repo._phasecache.getrevset(repo, (phases.draft, phases.secret))
for r in notpublic:
if getnode(r) in repo.obsstore.successors:
obs.add(r)