Mercurial > public > mercurial-scm > hg-stable
diff mercurial/revset.py @ 35339:0c1aff6d73a7
revset: use phasecache.getrevset to calculate public()
Other revsets like secret(), draft(), _nonpublic() are using
phasescache.getrevset already. The latter is more efficient after D1606.
So let's migrate the public() revset function too.
Tested using:
$ hg debugshell --hidden --cwd hg-committed`
In [1]: %timeit len(repo.revs('public()'))
* Before D1606: 10 loops, best of 3: 22.5 ms per loop
* Before this change, after D1606: 10 loops, best of 3: 28.6 ms per loop
* After this change: 10 loops, best of 3: 20.2 ms per loop
Therefore `public()` revset becomes even slightly faster after the data
structure change by D1606. A similar performance win could also be observed
on a large repo.
A side effect is `phasecache.getrevset` needs to take a `subset` parameter.
That was added with a default value so it won't cause BC issues.
Differential Revision: https://phab.mercurial-scm.org/D1620
author | Jun Wu <quark@fb.com> |
---|---|
date | Fri, 08 Dec 2017 14:20:34 -0800 |
parents | d67bcfc0041f |
children | 6eee2bcc57c4 |
line wrap: on
line diff
--- a/mercurial/revset.py Fri Dec 08 16:14:19 2017 -0500 +++ b/mercurial/revset.py Fri Dec 08 14:20:34 2017 -0800 @@ -1504,8 +1504,7 @@ def _phase(repo, subset, *targets): """helper to select all rev in <targets> phases""" - s = repo._phasecache.getrevset(repo, targets) - return subset & s + return repo._phasecache.getrevset(repo, targets, subset) @predicate('draft()', safe=True) def draft(repo, subset, x): @@ -1612,11 +1611,7 @@ """Changeset in public phase.""" # i18n: "public" is a keyword getargs(x, 0, 0, _("public takes no arguments")) - phase = repo._phasecache.phase - target = phases.public - condition = lambda r: phase(repo, r) == target - return subset.filter(condition, condrepr=('<phase %r>', target), - cache=False) + return _phase(repo, subset, phases.public) @predicate('remote([id [,path]])', safe=False) def remote(repo, subset, x):