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.
This commit is contained in:
Jun Wu 2017-02-18 00:55:20 -08:00
parent bc5a0cb908
commit 4a76b6f405

View File

@ -1120,7 +1120,7 @@ def _computeobsoleteset(repo):
"""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)