--- 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):