diff -r 5409f7ec7850 -r 4c6fdc7e2e7d mercurial/revset.py --- a/mercurial/revset.py Sun Jan 13 22:24:11 2019 +0100 +++ b/mercurial/revset.py Mon Jan 14 16:53:55 2019 +0100 @@ -1168,9 +1168,18 @@ # argument set should never define order if order == defineorder: order = followorder - s = getset(repo, subset, x, order=order) - ps = parents(repo, subset, x) - return s - ps + inputset = getset(repo, fullreposet(repo), x, order=order) + ps = set() + cl = repo.changelog + up = ps.update + parentrevs = cl.parentrevs + for r in inputset: + try: + up(parentrevs(r)) + except error.WdirUnsupported: + up(p.rev() for p in repo[r].parents()) + ps.discard(node.nullrev) + return subset & (inputset - ps) @predicate('hidden()', safe=True) def hidden(repo, subset, x):