diff -r bfd5def3fe02 -r b975c5801487 mercurial/filesetlang.py --- a/mercurial/filesetlang.py Sun Jul 22 11:47:29 2018 +0900 +++ b/mercurial/filesetlang.py Sat Jul 21 16:41:45 2018 +0900 @@ -184,7 +184,14 @@ if op == 'not': w, t = _optimize(x[1]) return w, (op, t) - if op in {'and', 'minus'}: + if op == 'and': + wa, ta = _optimize(x[1]) + wb, tb = _optimize(x[2]) + if wa <= wb: + return wa, (op, ta, tb) + else: + return wb, (op, tb, ta) + if op == 'minus': wa, ta = _optimize(x[1]) wb, tb = _optimize(x[2]) return max(wa, wb), (op, ta, tb)