revset: also parse x^: as (x^):
Given x^:y is (x^):y, this seems sensible.
--- a/mercurial/revset.py Sat Aug 06 20:21:00 2016 +0900
+++ b/mercurial/revset.py Sat Aug 06 20:37:48 2016 +0900
@@ -2323,11 +2323,14 @@
op = x[0]
if op == 'parent':
# x^:y means (x^) : y, not x ^ (:y)
+ # x^: means (x^) :, not x ^ (:)
post = ('parentpost', x[1])
if x[2][0] == 'dagrangepre':
return _fixops(('dagrange', post, x[2][1]))
elif x[2][0] == 'rangepre':
return _fixops(('range', post, x[2][1]))
+ elif x[2][0] == 'rangeall':
+ return _fixops(('rangepost', post))
return (op,) + tuple(_fixops(y) for y in x[1:])
--- a/tests/test-revset.t Sat Aug 06 20:21:00 2016 +0900
+++ b/tests/test-revset.t Sat Aug 06 20:37:48 2016 +0900
@@ -504,6 +504,15 @@
1
2
+ $ try '9^:'
+ (rangepost
+ (parentpost
+ ('symbol', '9')))
+ * set:
+ <spanset+ 8:9>
+ 8
+ 9
+
x^:y should be resolved before omitting group operators
$ try '1^(:2)'
@@ -560,6 +569,22 @@
1
2
+ $ try '(9^:)^:'
+ (rangepost
+ (parentpost
+ (group
+ (rangepost
+ (parentpost
+ ('symbol', '9'))))))
+ * set:
+ <spanset+ 4:9>
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+
x^ in alias should also be resolved
$ try 'A' --config 'revsetalias.A=1^:2'