sapling/tests/test-revset.t

466 lines
8.5 KiB
Perl
Raw Normal View History

2010-08-30 08:23:32 +04:00
$ HGENCODING=utf-8
$ export HGENCODING
$ try() {
2011-04-30 20:30:14 +04:00
> hg debugrevspec --debug "$@"
2010-08-30 08:23:32 +04:00
> }
$ 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
2010-09-17 02:51:32 +04:00
[255]
2010-08-30 08:23:32 +04:00
$ hg co 4
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg branch é
marked working directory as branch \xc3\xa9 (esc)
2010-08-30 08:23:32 +04:00
$ 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
2010-09-17 02:51:32 +04:00
[255]
2010-08-30 08:23:32 +04:00
$ 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'!
2010-09-17 02:51:32 +04:00
[255]
2010-08-30 08:23:32 +04:00
$ 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
2010-09-17 02:51:32 +04:00
[255]
2010-08-30 08:23:32 +04:00
$ log 'date()'
hg: parse error: date requires a string
2010-09-17 02:51:32 +04:00
[255]
2010-08-30 08:23:32 +04:00
$ log 'date'
hg: parse error: can't use date here
2010-09-17 02:51:32 +04:00
[255]
2010-08-30 08:23:32 +04:00
$ log 'date('
hg: parse error at 5: not a prefix: end
2010-09-17 02:51:32 +04:00
[255]
2010-08-30 08:23:32 +04:00
$ log 'date(tip)'
abort: invalid date: 'tip'
2010-09-17 02:51:32 +04:00
[255]
2010-08-30 08:23:32 +04:00
$ log '"date"'
abort: unknown revision 'date'!
2010-09-17 02:51:32 +04:00
[255]
2010-08-30 08:23:32 +04:00
$ log 'date(2005) and 1::'
4
$ log 'ancestor(1)'
hg: parse error: ancestor requires two arguments
2010-09-17 02:51:32 +04:00
[255]
2010-08-30 08:23:32 +04:00
$ 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 'desc(B)'
5
2010-08-30 08:23:32 +04:00
$ 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
2010-09-20 17:42:58 +04:00
$ 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]
2010-08-30 08:23:32 +04:00
$ 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 'id(5)'
2
2010-08-30 08:23:32 +04:00
$ 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 'rev(5)'
5
2010-08-30 08:23:32 +04:00
$ 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 'tag()'
6
$ log 'tag(1.0)'
6
$ log 'tag(tip)'
9
$ log 'tag(unknown)'
abort: tag 'unknown' does not exist
[255]
$ log 'branch(unknown)'
abort: unknown revision 'unknown'!
[255]
2010-08-30 08:23:32 +04:00
$ 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
$ log '4::8 - 8'
4
issue2437
$ log '3 and p1(5)'
3
$ log '4 and p2(6)'
4
$ log '1 and parents(:2)'
1
$ log '2 and children(1:)'
2
$ log 'roots(all()) or roots(all())'
0
$ log 'heads(branch(é)) or heads(branch(é))'
9
$ log 'ancestors(8) and (heads(branch("-a-b-c-")) or heads(branch(é)))'
4
issue2654: report a parse error if the revset was not completely parsed
$ log '1 OR 2'
hg: parse error at 2: invalid token
[255]
or operator should preserve ordering:
$ log 'reverse(2::4) or tip'
4
2
9
parentrevspec
$ log 'merge()^0'
6
$ log 'merge()^'
5
$ log 'merge()^1'
5
$ log 'merge()^2'
4
$ log 'merge()^^'
3
$ log 'merge()^1^'
3
$ log 'merge()^^^'
1
$ log 'merge()~0'
6
$ log 'merge()~1'
5
$ log 'merge()~2'
3
$ log 'merge()~2^1'
1
$ log 'merge()~3'
1
$ log '(-3:tip)^'
4
6
8
$ log 'tip^foo'
hg: parse error: ^ expects a number 0, 1, or 2
[255]
2011-04-30 20:30:14 +04:00
aliases:
$ echo '[revsetalias]' >> .hg/hgrc
$ echo 'm = merge()' >> .hg/hgrc
$ echo 'd($1) = reverse(sort($1, date))' >> .hg/hgrc
$ echo 'rs(ARG1, ARG2) = reverse(sort(ARG1, ARG2))' >> .hg/hgrc
$ echo 'rs4(ARG1, ARGA, ARGB, ARG2) = reverse(sort(ARG1, ARG2))' >> .hg/hgrc
2011-04-30 20:30:14 +04:00
$ try m
('symbol', 'm')
('func', ('symbol', 'merge'), None)
6
$ try 'd(2:5)'
('func', ('symbol', 'd'), ('range', ('symbol', '2'), ('symbol', '5')))
('func', ('symbol', 'reverse'), ('func', ('symbol', 'sort'), ('list', ('range', ('symbol', '2'), ('symbol', '5')), ('symbol', 'date'))))
4
5
3
2
$ try 'rs(2 or 3, date)'
('func', ('symbol', 'rs'), ('list', ('or', ('symbol', '2'), ('symbol', '3')), ('symbol', 'date')))
('func', ('symbol', 'reverse'), ('func', ('symbol', 'sort'), ('list', ('or', ('symbol', '2'), ('symbol', '3')), ('symbol', 'date'))))
3
2
$ try 'rs()'
('func', ('symbol', 'rs'), None)
hg: parse error: invalid number of arguments: 0
[255]
$ try 'rs(2)'
('func', ('symbol', 'rs'), ('symbol', '2'))
hg: parse error: invalid number of arguments: 1
[255]
$ try 'rs(2, data, 7)'
('func', ('symbol', 'rs'), ('list', ('list', ('symbol', '2'), ('symbol', 'data')), ('symbol', '7')))
hg: parse error: invalid number of arguments: 3
[255]
$ try 'rs4(2 or 3, x, x, date)'
('func', ('symbol', 'rs4'), ('list', ('list', ('list', ('or', ('symbol', '2'), ('symbol', '3')), ('symbol', 'x')), ('symbol', 'x')), ('symbol', 'date')))
('func', ('symbol', 'reverse'), ('func', ('symbol', 'sort'), ('list', ('or', ('symbol', '2'), ('symbol', '3')), ('symbol', 'date'))))
3
2
issue2549 - correct optimizations
$ log 'limit(1 or 2 or 3, 2) and not 2'
1
$ log 'max(1 or 2) and not 2'
$ log 'min(1 or 2) and not 1'
$ log 'last(1 or 2, 1) and not 2'