diff -r 169d66db5920 -r 0c1aff6d73a7 mercurial/revset.py --- 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 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=('', target), - cache=False) + return _phase(repo, subset, phases.public) @predicate('remote([id [,path]])', safe=False) def remote(repo, subset, x):