Mercurial > hg
changeset 31018:cb5888c00410
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.
author | Jun Wu <quark@fb.com> |
---|---|
date | Sat, 18 Feb 2017 00:55:20 -0800 |
parents | 17b5cda5a84a |
children | 74f77f1c2215 |
files | mercurial/obsolete.py |
diffstat | 1 files changed, 1 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- 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)