Mercurial > public > mercurial-scm > hg
diff mercurial/filesetlang.py @ 38831:b975c5801487
fileset: reorder 'and' expression to evaluate basic patterns first
Timing of a crafted example (when disk cache is warm):
$ hg files set:'binary() and path:contrib'
(orig) time: real 0.140 secs (user 0.120+0.000 sys 0.020+0.000)
(new) time: real 0.040 secs (user 0.030+0.000 sys 0.010+0.000)
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sat, 21 Jul 2018 16:41:45 +0900 |
parents | 7e7e2b2ff284 |
children | ca4de8ba5b5f |
line wrap: on
line diff
--- 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)