sapling/tests/test-revset.t
Brodie Rao 2104af5ee2 revset: support raw string literals
This adds support for r'...' and r"..." as string literals. Strings
with the "r" prefix will not have their escape characters interpreted.

This is especially useful for grep(), where, with regular string
literals, \number is interpreted as an octal escape code, and \b is
interpreted as the backspace character (\x08).
2010-09-24 15:36:53 -05:00

330 lines
5.6 KiB
Perl

$ HGENCODING=utf-8
$ export HGENCODING
$ try() {
> hg debugrevspec --debug $@
> }
$ log() {
> hg log --template '{rev}\n' -r "$1"
> }
$ hg init repo
$ cd repo
$ echo a > a
$ hg branch a
marked working directory as branch a
$ hg ci -Aqm0
$ echo b > b
$ hg branch b
marked working directory as branch b
$ hg ci -Aqm1
$ rm a
$ hg branch a-b-c-
marked working directory as branch a-b-c-
$ hg ci -Aqm2 -u Bob
$ hg co 1
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg branch +a+b+c+
marked working directory as branch +a+b+c+
$ hg ci -Aqm3
$ hg co 2 # interleave
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ echo bb > b
$ hg branch -- -a-b-c-
marked working directory as branch -a-b-c-
$ hg ci -Aqm4 -d "May 12 2005"
$ hg co 3
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg branch /a/b/c/
marked working directory as branch /a/b/c/
$ hg ci -Aqm"5 bug"
$ hg merge 4
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg branch _a_b_c_
marked working directory as branch _a_b_c_
$ hg ci -Aqm"6 issue619"
$ hg branch .a.b.c.
marked working directory as branch .a.b.c.
$ hg ci -Aqm7
$ hg branch all
marked working directory as branch all
$ hg ci --close-branch -Aqm8
abort: can only close branch heads
[255]
$ hg co 4
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg branch é
marked working directory as branch é
$ hg ci -Aqm9
$ hg tag -r6 1.0
$ hg clone --quiet -U -r 7 . ../remote1
$ hg clone --quiet -U -r 8 . ../remote2
$ echo "[paths]" >> .hg/hgrc
$ echo "default = ../remote1" >> .hg/hgrc
names that should work without quoting
$ try a
('symbol', 'a')
0
$ try b-a
('minus', ('symbol', 'b'), ('symbol', 'a'))
1
$ try _a_b_c_
('symbol', '_a_b_c_')
6
$ try _a_b_c_-a
('minus', ('symbol', '_a_b_c_'), ('symbol', 'a'))
6
$ try .a.b.c.
('symbol', '.a.b.c.')
7
$ try .a.b.c.-a
('minus', ('symbol', '.a.b.c.'), ('symbol', 'a'))
7
$ try -- '-a-b-c-' # complains
hg: parse error at 7: not a prefix: end
[255]
$ log -a-b-c- # succeeds with fallback
4
$ try -- -a-b-c--a # complains
('minus', ('minus', ('minus', ('negate', ('symbol', 'a')), ('symbol', 'b')), ('symbol', 'c')), ('negate', ('symbol', 'a')))
abort: unknown revision '-a'!
[255]
$ try é
('symbol', '\xc3\xa9')
9
quoting needed
$ try '"-a-b-c-"-a'
('minus', ('string', '-a-b-c-'), ('symbol', 'a'))
4
$ log '1 or 2'
1
2
$ log '1|2'
1
2
$ log '1 and 2'
$ log '1&2'
$ try '1&2|3' # precedence - and is higher
('or', ('and', ('symbol', '1'), ('symbol', '2')), ('symbol', '3'))
3
$ try '1|2&3'
('or', ('symbol', '1'), ('and', ('symbol', '2'), ('symbol', '3')))
1
$ try '1&2&3' # associativity
('and', ('and', ('symbol', '1'), ('symbol', '2')), ('symbol', '3'))
$ try '1|(2|3)'
('or', ('symbol', '1'), ('group', ('or', ('symbol', '2'), ('symbol', '3'))))
1
2
3
$ log '1.0' # tag
6
$ log 'a' # branch
0
$ log '2785f51ee'
0
$ log 'date(2005)'
4
$ log 'date(this is a test)'
hg: parse error at 10: unexpected token: symbol
[255]
$ log 'date()'
hg: parse error: date wants a string
[255]
$ log 'date'
hg: parse error: can't use date here
[255]
$ log 'date('
hg: parse error at 5: not a prefix: end
[255]
$ log 'date(tip)'
abort: invalid date: 'tip'
[255]
$ log '"date"'
abort: unknown revision 'date'!
[255]
$ log 'date(2005) and 1::'
4
$ log 'ancestor(1)'
hg: parse error: ancestor wants two arguments
[255]
$ log 'ancestor(4,5)'
1
$ log 'ancestor(4,5) and 4'
$ log 'ancestors(5)'
0
1
3
5
$ log 'author(bob)'
2
$ log 'branch(é)'
8
9
$ log 'children(ancestor(4,5))'
2
3
$ log 'closed()'
$ log 'contains(a)'
0
1
3
5
$ log 'descendants(2 or 3)'
2
3
4
5
6
7
8
9
$ log 'file(b)'
1
4
$ log 'follow()'
0
1
2
4
8
9
$ log 'grep("issue\d+")'
6
$ try 'grep("(")' # invalid regular expression
('func', ('symbol', 'grep'), ('string', '('))
hg: parse error: invalid match pattern: unbalanced parenthesis
[255]
$ try 'grep("\bissue\d+")'
('func', ('symbol', 'grep'), ('string', '\x08issue\\d+'))
$ try 'grep(r"\bissue\d+")'
('func', ('symbol', 'grep'), ('string', '\\bissue\\d+'))
6
$ try 'grep(r"\")'
hg: parse error at 7: unterminated string
[255]
$ log 'head()'
0
1
2
3
4
5
6
7
9
$ log 'heads(6::)'
7
$ log 'keyword(issue)'
6
$ log 'limit(head(), 1)'
0
$ log 'max(contains(a))'
5
$ log 'min(contains(a))'
0
$ log 'merge()'
6
$ log 'modifies(b)'
4
$ log 'outgoing()'
8
9
$ log 'outgoing("../remote1")'
8
9
$ log 'outgoing("../remote2")'
3
5
6
7
9
$ log 'p1(merge())'
5
$ log 'p2(merge())'
4
$ log 'parents(merge())'
4
5
$ log 'removes(a)'
2
6
$ log 'roots(all())'
0
$ log 'reverse(2 or 3 or 4 or 5)'
5
4
3
2
$ log 'sort(limit(reverse(all()), 3))'
7
8
9
$ log 'sort(2 or 3 or 4 or 5, date)'
2
3
5
4
$ log 'tagged()'
6
$ log 'user(bob)'
2
$ log '4::8'
4
8
$ log '4:8'
4
5
6
7
8
$ log 'sort(!merge() & (modifies(b) | user(bob) | keyword(bug) | keyword(issue) & 1::9), "-date")'
4
2
5
$ log 'not 0 and 0:2'
1
2
$ log 'not 1 and 0:2'
0
2
$ log 'not 2 and 0:2'
0
1
$ log '(1 and 2)::'
$ log '(1 and 2):'
$ log '(1 and 2):3'
$ log 'sort(head(), -rev)'
9
7
6
5
4
3
2
1
0