Mercurial > hg-stable
changeset 34038:37b82485097f
revset: do not flip "and" arguments when optimizing
Rewrite `flipand(y, x)` to `andsmally(x, y)` so the AST order is unchanged,
which could be more friendly to developers.
Differential Revision: https://phab.mercurial-scm.org/D579
author | Jun Wu <quark@fb.com> |
---|---|
date | Wed, 30 Aug 2017 16:05:12 -0700 |
parents | 205c47e30a93 |
children | 31a2eb0f74e5 |
files | mercurial/revset.py mercurial/revsetlang.py tests/test-revset.t |
diffstat | 3 files changed, 30 insertions(+), 30 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/revset.py Wed Aug 30 22:51:28 2017 +0900 +++ b/mercurial/revset.py Wed Aug 30 16:05:12 2017 -0700 @@ -169,8 +169,8 @@ yorder = followorder return getset(repo, getset(repo, subset, x, order), y, yorder) -def flipandset(repo, subset, y, x, order): - # 'flipand(y, x)' is equivalent to 'and(x, y)', but faster when y is small +def andsmallyset(repo, subset, x, y, order): + # 'andsmally(x, y)' is equivalent to 'and(x, y)', but faster when y is small if order == anyorder: yorder = anyorder else: @@ -2101,7 +2101,7 @@ "string": stringset, "symbol": stringset, "and": andset, - "flipand": flipandset, + "andsmally": andsmallyset, "or": orset, "not": notset, "difference": differenceset,
--- a/mercurial/revsetlang.py Wed Aug 30 22:51:28 2017 +0900 +++ b/mercurial/revsetlang.py Wed Aug 30 16:05:12 2017 -0700 @@ -374,7 +374,7 @@ if tb is not None and tb[0] == 'not': return wa, ('difference', ta, tb[1]) if wa > wb: - return w, ('flipand', tb, ta) + op = 'andsmally' return w, (op, ta, tb) elif op == 'or': # fast path for machine-generated expression, that is likely to have
--- a/tests/test-revset.t Wed Aug 30 22:51:28 2017 +0900 +++ b/tests/test-revset.t Wed Aug 30 16:05:12 2017 -0700 @@ -714,11 +714,11 @@ None) ('symbol', '2')) * optimized: - (flipand - ('symbol', '2') + (andsmally (func ('symbol', 'r3232') - None)) + None) + ('symbol', '2')) * analyzed set: <baseset [2]> * optimized set: @@ -2056,13 +2056,13 @@ ('symbol', '_intlist') ('string', '0\x001\x002'))) * optimized: - (flipand + (andsmally + (range + ('symbol', '2') + ('symbol', '0')) (func ('symbol', '_intlist') - ('string', '0\x001\x002')) - (range - ('symbol', '2') - ('symbol', '0'))) + ('string', '0\x001\x002'))) * set: <filteredset <spanset- 0:3>, @@ -2130,13 +2130,13 @@ ('symbol', '2') ('symbol', '0'))) * optimized: - (flipand + (andsmally + (func + ('symbol', '_hexlist') + ('string', '*')) (glob) (range ('symbol', '2') - ('symbol', '0')) - (func - ('symbol', '_hexlist') - ('string', '*'))) (glob) + ('symbol', '0'))) * set: <baseset [0, 2, 1]> 0 @@ -2415,13 +2415,13 @@ ('symbol', '0') ('symbol', '1'))))) * optimized: - (flipand + (andsmally + (func + ('symbol', 'contains') + ('string', 'glob:*')) (func ('symbol', '_list') - ('string', '2\x000\x001')) - (func - ('symbol', 'contains') - ('string', 'glob:*'))) + ('string', '2\x000\x001'))) * set: <filteredset <baseset+ [0, 1, 2]>, @@ -2447,15 +2447,15 @@ ('symbol', '2') ('symbol', '1'))))) * optimized: - (flipand - (func - ('symbol', '_list') - ('string', '0\x002\x001')) + (andsmally (func ('symbol', 'reverse') (func ('symbol', 'contains') - ('string', 'glob:*')))) + ('string', 'glob:*'))) + (func + ('symbol', '_list') + ('string', '0\x002\x001'))) * set: <filteredset <baseset- [0, 1, 2]>, @@ -3154,11 +3154,11 @@ (group None)) * optimized: - (flipand - None + (andsmally (func ('symbol', 'ancestors') - ('symbol', '1'))) + ('symbol', '1')) + None) hg: parse error: missing argument [255]