diff -r 3664537386ab -r 80c86b9bb40b mercurial/revset.py --- a/mercurial/revset.py Wed Sep 14 11:39:47 2016 -0500 +++ b/mercurial/revset.py Wed Jun 01 20:54:04 2016 +0900 @@ -2473,7 +2473,13 @@ elif op == 'keyvalue': return (op, x[1], _analyze(x[2], order)) elif op == 'func': - return (op, x[1], _analyze(x[2], defineorder), order) + f = getsymbol(x[1]) + d = defineorder + if f == 'present': + # 'present(set)' is known to return the argument set with no + # modification, so forward the current order to its argument + d = order + return (op, x[1], _analyze(x[2], d), order) raise ValueError('invalid operator %r' % op) def analyze(x, order=defineorder):