##// END OF EJS Templates
templatekw: inline showlist() into showbookmarks()...
templatekw: inline showlist() into showbookmarks() showlist() is the helper to build _hybrid object from a trivial list. It can't be applied if each value has more than one items, 'bookmark' and 'current' in this case. This change is necessary to fix random failure of "{join(bookmarks, sep)}".

File last commit:

r24151:38824c53 stable
r24156:75a2df2b stable
Show More
test-revset.t
1291 lines | 22.1 KiB | text/troff | Tads3Lexer
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ HGENCODING=utf-8
$ export HGENCODING
$ try() {
Alexander Solovyov
revset aliases
r14098 > hg debugrevspec --debug "$@"
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 > }
$ 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
Matt Mackall
branch: warn on branching
r15615 (branches are permanent and global, did you want a bookmark?)
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ hg ci -Aqm0
$ echo b > b
$ hg branch b
marked working directory as branch b
Matt Mackall
branch: warn on branching
r15615 (branches are permanent and global, did you want a bookmark?)
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ hg ci -Aqm1
$ rm a
$ hg branch a-b-c-
marked working directory as branch a-b-c-
Matt Mackall
branch: warn on branching
r15615 (branches are permanent and global, did you want a bookmark?)
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ hg ci -Aqm2 -u Bob
Henrik Stuart
revset: add function for matching extra data (issue2767)
r16661 $ hg log -r "extra('branch', 'a-b-c-')" --template '{rev}\n'
2
$ hg log -r "extra('branch')" --template '{rev}\n'
0
1
2
Simon King
revset: add pattern matching to 'extra' revset expression
r16824 $ hg log -r "extra('branch', 're:a')" --template '{rev} {branch}\n'
0 a
2 a-b-c-
Henrik Stuart
revset: add function for matching extra data (issue2767)
r16661
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ 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+
Matt Mackall
branch: warn on branching
r15615 (branches are permanent and global, did you want a bookmark?)
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ 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-
Matt Mackall
branch: warn on branching
r15615 (branches are permanent and global, did you want a bookmark?)
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ hg ci -Aqm4 -d "May 12 2005"
$ hg co 3
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
Adrian Buehlmann
test-revset: enable for Windows...
r16851 $ hg branch !a/b/c/
marked working directory as branch !a/b/c/
Matt Mackall
branch: warn on branching
r15615 (branches are permanent and global, did you want a bookmark?)
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ 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_
Matt Mackall
branch: warn on branching
r15615 (branches are permanent and global, did you want a bookmark?)
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ hg ci -Aqm"6 issue619"
$ hg branch .a.b.c.
marked working directory as branch .a.b.c.
Matt Mackall
branch: warn on branching
r15615 (branches are permanent and global, did you want a bookmark?)
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ hg ci -Aqm7
$ hg branch all
marked working directory as branch all
Matt Mackall
branch: warn on branching
r15615 (branches are permanent and global, did you want a bookmark?)
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105
$ hg co 4
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg branch é
Mads Kiilerich
tests: use (esc) for all non-ASCII test output
r12942 marked working directory as branch \xc3\xa9 (esc)
Matt Mackall
branch: warn on branching
r15615 (branches are permanent and global, did you want a bookmark?)
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ 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
Patrick Mezard
debugrevspec: pretty print output...
r16218 (minus
('symbol', 'b')
('symbol', 'a'))
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 1
$ try _a_b_c_
('symbol', '_a_b_c_')
6
$ try _a_b_c_-a
Patrick Mezard
debugrevspec: pretty print output...
r16218 (minus
('symbol', '_a_b_c_')
('symbol', 'a'))
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 6
$ try .a.b.c.
('symbol', '.a.b.c.')
7
$ try .a.b.c.-a
Patrick Mezard
debugrevspec: pretty print output...
r16218 (minus
('symbol', '.a.b.c.')
('symbol', 'a'))
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 7
$ try -- '-a-b-c-' # complains
hg: parse error at 7: not a prefix: end
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ log -a-b-c- # succeeds with fallback
4
Matt Mackall
revrange: pass repo to revset parser...
r20781
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ try -- -a-b-c--a # complains
Patrick Mezard
debugrevspec: pretty print output...
r16218 (minus
(minus
(minus
(negate
('symbol', 'a'))
('symbol', 'b'))
('symbol', 'c'))
(negate
('symbol', 'a')))
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 abort: unknown revision '-a'!
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ try é
('symbol', '\xc3\xa9')
9
Matt Mackall
revrange: pass repo to revset parser...
r20781 no quoting needed
$ log ::a-b-c-
0
1
2
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 quoting needed
$ try '"-a-b-c-"-a'
Patrick Mezard
debugrevspec: pretty print output...
r16218 (minus
('string', '-a-b-c-')
('symbol', 'a'))
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 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
Patrick Mezard
debugrevspec: pretty print output...
r16218 (or
(and
('symbol', '1')
('symbol', '2'))
('symbol', '3'))
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 3
$ try '1|2&3'
Patrick Mezard
debugrevspec: pretty print output...
r16218 (or
('symbol', '1')
(and
('symbol', '2')
('symbol', '3')))
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 1
$ try '1&2&3' # associativity
Patrick Mezard
debugrevspec: pretty print output...
r16218 (and
(and
('symbol', '1')
('symbol', '2'))
('symbol', '3'))
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ try '1|(2|3)'
Patrick Mezard
debugrevspec: pretty print output...
r16218 (or
('symbol', '1')
(group
(or
('symbol', '2')
('symbol', '3'))))
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 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
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ log 'date()'
Benoit Boissinot
revset: use 'requires' instead of 'wants' in error message
r12736 hg: parse error: date requires a string
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ log 'date'
hg: parse error: can't use date here
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ log 'date('
hg: parse error at 5: not a prefix: end
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ log 'date(tip)'
abort: invalid date: 'tip'
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ log '"date"'
abort: unknown revision 'date'!
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ log 'date(2005) and 1::'
4
Paul Cavallaro
revset: change ancestor to accept 0 or more arguments (issue3750)...
r18536 ancestor can accept 0 or more arguments
$ log 'ancestor()'
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ log 'ancestor(1)'
Paul Cavallaro
revset: change ancestor to accept 0 or more arguments (issue3750)...
r18536 1
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ log 'ancestor(4,5)'
1
$ log 'ancestor(4,5) and 4'
Paul Cavallaro
revset: change ancestor to accept 0 or more arguments (issue3750)...
r18536 $ log 'ancestor(0,0,1,3)'
0
$ log 'ancestor(3,1,5,3,5,1)'
1
$ log 'ancestor(0,1,3,5)'
0
$ log 'ancestor(1,2,3,4,5)'
1
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ log 'ancestors(5)'
0
1
3
5
Paul Cavallaro
revset: change ancestor to accept 0 or more arguments (issue3750)...
r18536 $ log 'ancestor(ancestors(5))'
0
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ log 'author(bob)'
2
Simon King
revset: add pattern matching to the 'user' revset expression
r16823 $ log 'author("re:bob|test")'
0
1
2
3
4
5
6
7
8
9
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ log 'branch(é)'
8
9
Simon King
revset: add pattern matching to 'branch' revset expression
r16821 $ log 'branch(a)'
0
$ hg log -r 'branch("re:a")' --template '{rev} {branch}\n'
0 a
2 a-b-c-
3 +a+b+c+
4 -a-b-c-
Adrian Buehlmann
test-revset: enable for Windows...
r16851 5 !a/b/c/
Simon King
revset: add pattern matching to 'branch' revset expression
r16821 6 _a_b_c_
7 .a.b.c.
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ log 'children(ancestor(4,5))'
2
3
$ log 'closed()'
$ log 'contains(a)'
0
1
3
5
FUJIWARA Katsunori
revset: make default kind of pattern for "contains()" rooted at cwd...
r20286 $ log 'contains("../repo/a")'
0
1
3
5
Thomas Arendsen Hein
revset: add desc(string) to search in commit messages...
r14650 $ log 'desc(B)'
5
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ log 'descendants(2 or 3)'
2
3
4
5
6
7
8
9
Patrick Mezard
graphlog: correctly handle calls in subdirectories
r16411 $ log 'file("b*")'
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 1
4
FUJIWARA Katsunori
revset: use "canonpath()" for "filelog()" pattern without explicit kind...
r20288 $ log 'filelog("b")'
1
4
$ log 'filelog("../repo/b")'
1
4
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ log 'follow()'
0
1
2
4
8
9
$ log 'grep("issue\d+")'
6
Martin Geisler
merge with stable
r12321 $ try 'grep("(")' # invalid regular expression
Patrick Mezard
debugrevspec: pretty print output...
r16218 (func
('symbol', 'grep')
('string', '('))
Martin Geisler
merge with stable
r12321 hg: parse error: invalid match pattern: unbalanced parenthesis
[255]
Brodie Rao
revset: support raw string literals...
r12408 $ try 'grep("\bissue\d+")'
Patrick Mezard
debugrevspec: pretty print output...
r16218 (func
('symbol', 'grep')
('string', '\x08issue\\d+'))
Brodie Rao
revset: support raw string literals...
r12408 $ try 'grep(r"\bissue\d+")'
Patrick Mezard
debugrevspec: pretty print output...
r16218 (func
('symbol', 'grep')
('string', '\\bissue\\d+'))
Brodie Rao
revset: support raw string literals...
r12408 6
$ try 'grep(r"\")'
hg: parse error at 7: unterminated string
[255]
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ log 'head()'
0
1
2
3
4
5
6
7
9
$ log 'heads(6::)'
7
$ log 'keyword(issue)'
6
Alexander Plavin
revset: fix wrong keyword() behaviour for strings with spaces...
r19706 $ log 'keyword("test a")'
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ log 'limit(head(), 1)'
0
Angel Ezquerra
tests: add tests for matching keyword...
r16447 $ log 'matching(6)'
6
$ log 'matching(6:7, "phase parents user date branch summary files description substate")'
6
7
Pierre-Yves David
revset: raise ValueError when calling min or max on empty smartset...
r20863
Testing min and max
max: simple
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ log 'max(contains(a))'
5
Pierre-Yves David
revset: raise ValueError when calling min or max on empty smartset...
r20863
max: simple on unordered set)
$ log 'max((4+0+2+5+7) and contains(a))'
5
max: no result
$ log 'max(contains(stringthatdoesnotappearanywhere))'
max: no result on unordered set
$ log 'max((4+0+2+5+7) and contains(stringthatdoesnotappearanywhere))'
min: simple
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ log 'min(contains(a))'
0
Pierre-Yves David
revset: raise ValueError when calling min or max on empty smartset...
r20863
min: simple on unordered set
$ log 'min((4+0+2+5+7) and contains(a))'
0
min: empty
$ log 'min(contains(stringthatdoesnotappearanywhere))'
min: empty on unordered set
$ log 'min((4+0+2+5+7) and contains(stringthatdoesnotappearanywhere))'
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ log 'merge()'
6
Ivan Andrus
revsets: add branchpoint() function...
r17753 $ log 'branchpoint()'
1
4
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ log 'modifies(b)'
4
Patrick Mezard
revset: fix adds/modifies/removes and patterns (issue3403)...
r16521 $ log 'modifies("path:b")'
4
$ log 'modifies("*")'
4
6
$ log 'modifies("set:modified()")'
4
Augie Fackler
revset: add id() and rev() to allow explicitly referring to changes by hash or rev
r12716 $ log 'id(5)'
2
Durham Goode
revset: add 'only' revset...
r20613 $ log 'only(9)'
8
9
$ log 'only(8)'
8
$ log 'only(9, 5)'
2
4
8
9
$ log 'only(7 + 9, 5 + 2)'
4
6
7
8
9
Matt Harbison
revset: avoid a ValueError when 'only()' is given an empty set...
r21925
Test empty set input
$ log 'only(p2())'
$ log 'only(p1(), p2())'
0
1
2
4
8
9
Yuya Nishihara
revset: have rev() drop out-of-range or filtered rev explicitly (issue4396)...
r23062
Sean Farley
revset: use '%' as an operator for 'only'...
r23765 Test '%' operator
$ log '9%'
8
9
$ log '9%5'
2
4
8
9
$ log '(7 + 9)%(5 + 2)'
4
6
7
8
9
Test the order of operations
$ log '7 + 9%5 + 2'
7
2
4
8
9
Yuya Nishihara
revset: have rev() drop out-of-range or filtered rev explicitly (issue4396)...
r23062 Test explicit numeric revision
Yuya Nishihara
revset: allow rev(-1) to indicate null revision (BC)...
r23954 $ log 'rev(-2)'
Yuya Nishihara
revset: have rev() drop out-of-range or filtered rev explicitly (issue4396)...
r23062 $ log 'rev(-1)'
Yuya Nishihara
revset: allow rev(-1) to indicate null revision (BC)...
r23954 -1
Yuya Nishihara
revset: have rev() drop out-of-range or filtered rev explicitly (issue4396)...
r23062 $ log 'rev(0)'
0
$ log 'rev(9)'
9
$ log 'rev(10)'
$ log 'rev(tip)'
hg: parse error: rev expects a number
[255]
Yuya Nishihara
revset: fix ancestors(null) to include null revision (issue4512)...
r23956 Test null revision
$ log 'ancestors(null)'
-1
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ 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
Ivan Andrus
revsets: add branchpoint() function...
r17753 $ log 'p1(branchpoint())'
0
2
$ log 'p2(branchpoint())'
$ log 'parents(branchpoint())'
0
2
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ log 'removes(a)'
2
6
$ log 'roots(all())'
0
$ log 'reverse(2 or 3 or 4 or 5)'
5
4
3
2
Bryan O'Sullivan
revset: ensure we are reversing a list (issue3530)
r17100 $ log 'reverse(all())'
9
8
7
6
5
4
3
2
1
0
Yuya Nishihara
revset: fix spanset.isascending() to honor sort() or reverse() request...
r23826 $ log 'reverse(all()) & filelog(b)'
4
1
Augie Fackler
revset: add id() and rev() to allow explicitly referring to changes by hash or rev
r12716 $ log 'rev(5)'
5
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ 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
Augie Fackler
revset: rename tagged() to tag() and allow it to take an optional tag name
r12715 $ log 'tag()'
6
$ log 'tag(1.0)'
6
$ log 'tag(tip)'
9
Simon King
revset: add pattern matching to 'tag' revset expression...
r16820
Lucas Moscovicz
tests: added tests to test sort revset...
r20717 test sort revset
--------------------------------------------
test when adding two unordered revsets
$ log 'sort(keyword(issue) or modifies(b))'
4
6
test when sorting a reversed collection in the same way it is
$ log 'sort(reverse(all()), -rev)'
9
8
7
6
5
4
3
2
1
0
test when sorting a reversed collection
$ log 'sort(reverse(all()), rev)'
0
1
2
3
4
5
6
7
8
9
test sorting two sorted collections in different orders
$ log 'sort(outgoing() or reverse(removes(a)), rev)'
2
6
8
9
test sorting two sorted collections in different orders backwards
$ log 'sort(outgoing() or reverse(removes(a)), -rev)'
9
8
6
2
Mads Kiilerich
spelling: fixes from spell checker
r21024 test subtracting something from an addset
Lucas Moscovicz
revset: extend sorting tests
r20736
$ log '(outgoing() or removes(a)) - removes(a)'
8
9
test intersecting something with an addset
$ log 'parents(outgoing() or removes(a))'
1
4
5
Pierre-Yves David
revert: bring back usage of `subset & ps` in `parents`...
r22712 8
Lucas Moscovicz
revset: extend sorting tests
r20736
Pierre-Yves David
revset: restore order of `or` operation as in Mercurial 2.9...
r22861 test that `or` operation combines elements in the right order:
$ log '3:4 or 2:5'
3
4
2
5
$ log '3:4 or 5:2'
3
4
5
2
$ log 'sort(3:4 or 2:5)'
2
3
4
5
$ log 'sort(3:4 or 5:2)'
2
3
4
5
Siddharth Agarwal
revset: replace _missingancestors optimization with only revset...
r21893 check that conversion to only works
Siddharth Agarwal
revset: optimize missing ancestor expressions...
r20499 $ try --optimize '::3 - ::1'
(minus
(dagrangepre
('symbol', '3'))
(dagrangepre
('symbol', '1')))
* optimized:
(func
Siddharth Agarwal
revset: replace _missingancestors optimization with only revset...
r21893 ('symbol', 'only')
Siddharth Agarwal
revset: optimize missing ancestor expressions...
r20499 (list
('symbol', '3')
('symbol', '1')))
3
$ try --optimize 'ancestors(1) - ancestors(3)'
(minus
(func
('symbol', 'ancestors')
('symbol', '1'))
(func
('symbol', 'ancestors')
('symbol', '3')))
* optimized:
(func
Siddharth Agarwal
revset: replace _missingancestors optimization with only revset...
r21893 ('symbol', 'only')
Siddharth Agarwal
revset: optimize missing ancestor expressions...
r20499 (list
('symbol', '1')
('symbol', '3')))
$ try --optimize 'not ::2 and ::6'
(and
(not
(dagrangepre
('symbol', '2')))
(dagrangepre
('symbol', '6')))
* optimized:
(func
Siddharth Agarwal
revset: replace _missingancestors optimization with only revset...
r21893 ('symbol', 'only')
Siddharth Agarwal
revset: optimize missing ancestor expressions...
r20499 (list
('symbol', '6')
('symbol', '2')))
3
4
5
6
$ try --optimize 'ancestors(6) and not ancestors(4)'
(and
(func
('symbol', 'ancestors')
('symbol', '6'))
(not
(func
('symbol', 'ancestors')
('symbol', '4'))))
* optimized:
(func
Siddharth Agarwal
revset: replace _missingancestors optimization with only revset...
r21893 ('symbol', 'only')
Siddharth Agarwal
revset: optimize missing ancestor expressions...
r20499 (list
('symbol', '6')
('symbol', '4')))
3
5
6
Simon King
revset: add pattern matching to 'tag' revset expression...
r16820 we can use patterns when searching for tags
$ log 'tag("1..*")'
FUJIWARA Katsunori
revset: raise RepoLookupError to make present() predicate continue the query...
r23978 abort: tag '1..*' does not exist!
Simon King
revset: add pattern matching to 'tag' revset expression...
r16820 [255]
$ log 'tag("re:1..*")'
6
$ log 'tag("re:[0-9].[0-9]")'
6
$ log 'tag("literal:1.0")'
6
$ log 'tag("re:0..*")'
Idan Kamara
tests: add tests for non-existant branch/tag/bookmark
r13925 $ log 'tag(unknown)'
FUJIWARA Katsunori
revset: raise RepoLookupError to make present() predicate continue the query...
r23978 abort: tag 'unknown' does not exist!
Idan Kamara
tests: add tests for non-existant branch/tag/bookmark
r13925 [255]
FUJIWARA Katsunori
revset: raise RepoLookupError to make present() predicate continue the query...
r23978 $ log 'tag("re:unknown")'
$ log 'present(tag("unknown"))'
$ log 'present(tag("re:unknown"))'
Idan Kamara
tests: add tests for non-existant branch/tag/bookmark
r13925 $ log 'branch(unknown)'
abort: unknown revision 'unknown'!
[255]
FUJIWARA Katsunori
revset: raise RepoLookupError to make present() predicate continue the query...
r23978 $ log 'branch("re:unknown")'
$ log 'present(branch("unknown"))'
$ log 'present(branch("re:unknown"))'
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ 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
Matt Mackall
revset: lower precedence of minus infix (issue2361)
r12616 $ log '4::8 - 8'
4
Patrick Mezard
revset: make matching() preserve input revision order
r16640 $ log 'matching(1 or 2 or 3) and (2 or 3 or 1)'
2
3
1
Wagner Bruna
revset: disable subset optimization for parents() and children() (issue2437)...
r12786
FUJIWARA Katsunori
revset: raise RepoLookupError to make present() predicate continue the query...
r23978 $ log 'named("unknown")'
abort: namespace 'unknown' does not exist!
[255]
$ log 'named("re:unknown")'
abort: no namespace exists that match 'unknown'!
[255]
$ log 'present(named("unknown"))'
$ log 'present(named("re:unknown"))'
FUJIWARA Katsunori
revset: get revision number of each node from target namespaces...
r24008 $ log 'tag()'
6
$ log 'named("tags")'
6
Wagner Bruna
revset: disable subset optimization for parents() and children() (issue2437)...
r12786 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
Patrick Mezard
revset: do not ignore input revisions in roots()...
r16394 $ hg debugrevspec 'roots(all()) or roots(all())'
0
Wagner Bruna
revset: disable subset optimization for parents() and children() (issue2437)...
r12786 $ log 'heads(branch(é)) or heads(branch(é))'
9
$ log 'ancestors(8) and (heads(branch("-a-b-c-")) or heads(branch(é)))'
4
Bernhard Leiner
revset: report a parse error if a revset is not parsed completely (issue2654)
r13665
issue2654: report a parse error if the revset was not completely parsed
$ log '1 OR 2'
hg: parse error at 2: invalid token
[255]
Augie Fackler
revsets: preserve ordering with the or operator...
r13932 or operator should preserve ordering:
$ log 'reverse(2::4) or tip'
4
2
9
Kevin Gessner
revset: add ^ and ~ operators from parentrevspec extension...
r14070
parentrevspec
$ log 'merge()^0'
6
$ log 'merge()^'
5
$ log 'merge()^1'
5
$ log 'merge()^2'
4
Kevin Gessner
revset: add tests for multiple and mixed ^ and ~ operators
r14080 $ log 'merge()^^'
3
$ log 'merge()^1^'
3
$ log 'merge()^^^'
1
Kevin Gessner
revset: add ^ and ~ operators from parentrevspec extension...
r14070
$ log 'merge()~0'
6
$ log 'merge()~1'
5
$ log 'merge()~2'
3
Kevin Gessner
revset: add tests for multiple and mixed ^ and ~ operators
r14080 $ log 'merge()~2^1'
1
Kevin Gessner
revset: add ^ and ~ operators from parentrevspec extension...
r14070 $ log 'merge()~3'
1
$ log '(-3:tip)^'
4
6
8
$ log 'tip^foo'
hg: parse error: ^ expects a number 0, 1, or 2
[255]
Alexander Solovyov
revset aliases
r14098
Durham Goode
scmutil: fix revrange when multiple revs are specified...
r20798 multiple revspecs
$ hg log -r 'tip~1:tip' -r 'tip~2:tip~1' --template '{rev}\n'
8
9
4
5
6
7
Pierre-Yves David
revpair: smartset compatibility...
r20862 test usage in revpair (with "+")
(real pair)
$ hg diff -r 'tip^^' -r 'tip'
diff -r 2326846efdab -r 24286f4ae135 .hgtags
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000
@@ -0,0 +1,1 @@
+e0cc66ef77e8b6f711815af4e001a6594fde3ba5 1.0
$ hg diff -r 'tip^^::tip'
diff -r 2326846efdab -r 24286f4ae135 .hgtags
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000
@@ -0,0 +1,1 @@
+e0cc66ef77e8b6f711815af4e001a6594fde3ba5 1.0
(single rev)
$ hg diff -r 'tip^' -r 'tip^'
$ hg diff -r 'tip^::tip^ or tip^'
(single rev that does not looks like a range)
$ hg diff -r 'tip^ or tip^'
diff -r d5d0dcbdc4d9 .hgtags
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.hgtags * (glob)
@@ -0,0 +1,1 @@
+e0cc66ef77e8b6f711815af4e001a6594fde3ba5 1.0
(no rev)
$ hg diff -r 'author("babar") or author("celeste")'
abort: empty revision range
[255]
Alexander Solovyov
revset aliases
r14098 aliases:
$ echo '[revsetalias]' >> .hg/hgrc
$ echo 'm = merge()' >> .hg/hgrc
Patrick Mezard
revset: fix alias substitution recursion (issue3240)...
r16096 $ echo 'sincem = descendants(m)' >> .hg/hgrc
Alexander Solovyov
revset aliases
r14098 $ echo 'd($1) = reverse(sort($1, date))' >> .hg/hgrc
$ echo 'rs(ARG1, ARG2) = reverse(sort(ARG1, ARG2))' >> .hg/hgrc
Mads Kiilerich
revset: fix aliases with 0 or more than 2 parameters...
r14723 $ echo 'rs4(ARG1, ARGA, ARGB, ARG2) = reverse(sort(ARG1, ARG2))' >> .hg/hgrc
Alexander Solovyov
revset aliases
r14098
$ try m
('symbol', 'm')
Patrick Mezard
debugrevspec: pretty print output...
r16218 (func
('symbol', 'merge')
None)
Alexander Solovyov
revset aliases
r14098 6
Patrick Mezard
revset: fix alias substitution recursion (issue3240)...
r16096
test alias recursion
$ try sincem
('symbol', 'sincem')
Patrick Mezard
debugrevspec: pretty print output...
r16218 (func
('symbol', 'descendants')
(func
('symbol', 'merge')
None))
Alexander Solovyov
revset aliases
r14098 6
Patrick Mezard
revset: fix alias substitution recursion (issue3240)...
r16096 7
test infinite recursion
$ echo 'recurse1 = recurse2' >> .hg/hgrc
$ echo 'recurse2 = recurse1' >> .hg/hgrc
$ try recurse1
('symbol', 'recurse1')
hg: parse error: infinite expansion of revset alias "recurse1" detected
[255]
Patrick Mezard
revset: fix infinite alias expansion detection...
r16772 $ echo 'level1($1, $2) = $1 or $2' >> .hg/hgrc
$ echo 'level2($1, $2) = level1($2, $1)' >> .hg/hgrc
$ try "level2(level1(1, 2), 3)"
(func
('symbol', 'level2')
(list
(func
('symbol', 'level1')
(list
('symbol', '1')
('symbol', '2')))
('symbol', '3')))
(or
('symbol', '3')
(or
('symbol', '1')
('symbol', '2')))
3
1
2
Patrick Mezard
revset: fix alias substitution recursion (issue3240)...
r16096 test nesting and variable passing
$ echo 'nested($1) = nested2($1)' >> .hg/hgrc
$ echo 'nested2($1) = nested3($1)' >> .hg/hgrc
$ echo 'nested3($1) = max($1)' >> .hg/hgrc
$ try 'nested(2:5)'
Patrick Mezard
debugrevspec: pretty print output...
r16218 (func
('symbol', 'nested')
(range
('symbol', '2')
('symbol', '5')))
(func
('symbol', 'max')
(range
('symbol', '2')
('symbol', '5')))
Patrick Mezard
revset: fix alias substitution recursion (issue3240)...
r16096 5
test variable isolation, variable placeholders are rewritten as string
then parsed and matched again as string. Check they do not leak too
far away.
$ echo 'injectparamasstring = max("$1")' >> .hg/hgrc
$ echo 'callinjection($1) = descendants(injectparamasstring)' >> .hg/hgrc
$ try 'callinjection(2:5)'
Patrick Mezard
debugrevspec: pretty print output...
r16218 (func
('symbol', 'callinjection')
(range
('symbol', '2')
('symbol', '5')))
(func
('symbol', 'descendants')
(func
('symbol', 'max')
('string', '$1')))
Patrick Mezard
revset: fix alias substitution recursion (issue3240)...
r16096 abort: unknown revision '$1'!
[255]
Patrick Mezard
revset: explicitely tag alias arguments for expansion...
r16771 $ echo 'injectparamasstring2 = max(_aliasarg("$1"))' >> .hg/hgrc
$ echo 'callinjection2($1) = descendants(injectparamasstring2)' >> .hg/hgrc
$ try 'callinjection2(2:5)'
(func
('symbol', 'callinjection2')
(range
('symbol', '2')
('symbol', '5')))
FUJIWARA Katsunori
revset: store full detail into revsetalias.error for error source distinction...
r23844 abort: failed to parse the definition of revset alias "injectparamasstring2": not a function: _aliasarg
Patrick Mezard
revset: explicitely tag alias arguments for expansion...
r16771 [255]
FUJIWARA Katsunori
revset: delay showing parse error for the revset alias until it is referred...
r23725 $ hg debugrevspec --debug --config revsetalias.anotherbadone='branch(' "tip"
('symbol', 'tip')
FUJIWARA Katsunori
revset: store full detail into revsetalias.error for error source distinction...
r23844 warning: failed to parse the definition of revset alias "anotherbadone": at 7: not a prefix: end
warning: failed to parse the definition of revset alias "injectparamasstring2": not a function: _aliasarg
FUJIWARA Katsunori
revset: delay showing parse error for the revset alias until it is referred...
r23725 9
Patrick Mezard
revset: explicitely tag alias arguments for expansion...
r16771 >>> data = file('.hg/hgrc', 'rb').read()
>>> file('.hg/hgrc', 'wb').write(data.replace('_aliasarg', ''))
FUJIWARA Katsunori
revset: delay showing parse error for the revset alias until it is referred...
r23725 $ try 'tip'
('symbol', 'tip')
9
FUJIWARA Katsunori
revset: parse alias declaration strictly by _parsealiasdecl...
r23846
$ hg debugrevspec --debug --config revsetalias.'bad name'='tip' "tip"
('symbol', 'tip')
warning: failed to parse the declaration of revset alias "bad name": at 4: invalid token
9
Alexander Solovyov
revset aliases
r14098 $ try 'd(2:5)'
Patrick Mezard
debugrevspec: pretty print output...
r16218 (func
('symbol', 'd')
(range
('symbol', '2')
('symbol', '5')))
(func
('symbol', 'reverse')
(func
('symbol', 'sort')
(list
(range
('symbol', '2')
('symbol', '5'))
('symbol', 'date'))))
Alexander Solovyov
revset aliases
r14098 4
5
3
2
$ try 'rs(2 or 3, date)'
Patrick Mezard
debugrevspec: pretty print output...
r16218 (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'))))
Alexander Solovyov
revset aliases
r14098 3
2
Mads Kiilerich
revset: fix aliases with 0 or more than 2 parameters...
r14723 $ try 'rs()'
Patrick Mezard
debugrevspec: pretty print output...
r16218 (func
('symbol', 'rs')
None)
Mads Kiilerich
revset: fix aliases with 0 or more than 2 parameters...
r14723 hg: parse error: invalid number of arguments: 0
[255]
$ try 'rs(2)'
Patrick Mezard
debugrevspec: pretty print output...
r16218 (func
('symbol', 'rs')
('symbol', '2'))
Mads Kiilerich
revset: fix aliases with 0 or more than 2 parameters...
r14723 hg: parse error: invalid number of arguments: 1
[255]
$ try 'rs(2, data, 7)'
Patrick Mezard
debugrevspec: pretty print output...
r16218 (func
('symbol', 'rs')
(list
(list
('symbol', '2')
('symbol', 'data'))
('symbol', '7')))
Mads Kiilerich
revset: fix aliases with 0 or more than 2 parameters...
r14723 hg: parse error: invalid number of arguments: 3
[255]
$ try 'rs4(2 or 3, x, x, date)'
Patrick Mezard
debugrevspec: pretty print output...
r16218 (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'))))
Mads Kiilerich
revset: fix aliases with 0 or more than 2 parameters...
r14723 3
2
Mads Kiilerich
revset: avoid over-aggresive optimizations of non-filtering functions (issue2549)...
r14153
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'
FUJIWARA Katsunori
i18n: use "encoding.lower()" to normalize specified string for revset...
r15726
Matt Mackall
revset: maintain ordering when subtracting from a baseset (issue4289)
r21870 issue4289 - ordering of built-ins
$ hg log -M -q -r 3:2
3:8528aa5637f2
2:5ed5505e9f1c
FUJIWARA Katsunori
test: add test for the issue introduced by e410be860393 (issue3669)...
r17858 test revsets started with 40-chars hash (issue3669)
$ ISSUE3669_TIP=`hg tip --template '{node}'`
$ hg log -r "${ISSUE3669_TIP}" --template '{rev}\n'
9
$ hg log -r "${ISSUE3669_TIP}^" --template '{rev}\n'
8
FUJIWARA Katsunori
revset: evaluate sub expressions correctly (issue3775)...
r18473 test or-ed indirect predicates (issue3775)
$ log '6 or 6^1' | sort
5
6
$ log '6^1 or 6' | sort
5
6
$ log '4 or 4~1' | sort
2
4
$ log '4~1 or 4' | sort
2
4
$ log '(0 or 2):(4 or 6) or 0 or 6' | sort
0
1
2
3
4
5
6
$ log '0 or 6 or (0 or 2):(4 or 6)' | sort
0
1
2
3
4
5
6
FUJIWARA Katsunori
revset: add tests for 'remote()' predicate
r16008 tests for 'remote()' predicate:
#. (csets in remote) (id) (remote)
1. less than local current branch "default"
2. same with local specified "default"
3. more than local specified specified
$ hg clone --quiet -U . ../remote3
$ cd ../remote3
$ hg update -q 7
$ echo r > r
$ hg ci -Aqm 10
$ log 'remote()'
7
$ log 'remote("a-b-c-")'
2
$ cd ../repo
$ log 'remote(".a.b.c.", "../remote3")'
FUJIWARA Katsunori
revset: introduce new operator "##" to concatenate strings/symbols at runtime...
r23742 tests for concatenation of strings/symbols by "##"
$ try "278 ## '5f5' ## 1ee ## 'ce5'"
(_concat
(_concat
(_concat
('symbol', '278')
('string', '5f5'))
('symbol', '1ee'))
('string', 'ce5'))
('string', '2785f51eece5')
0
$ echo 'cat4($1, $2, $3, $4) = $1 ## $2 ## $3 ## $4' >> .hg/hgrc
$ try "cat4(278, '5f5', 1ee, 'ce5')"
(func
('symbol', 'cat4')
(list
(list
(list
('symbol', '278')
('string', '5f5'))
('symbol', '1ee'))
('string', 'ce5')))
(_concat
(_concat
(_concat
('symbol', '278')
('string', '5f5'))
('symbol', '1ee'))
('string', 'ce5'))
('string', '2785f51eece5')
0
(check concatenation in alias nesting)
$ echo 'cat2($1, $2) = $1 ## $2' >> .hg/hgrc
$ echo 'cat2x2($1, $2, $3, $4) = cat2($1 ## $2, $3 ## $4)' >> .hg/hgrc
$ log "cat2x2(278, '5f5', 1ee, 'ce5')"
0
(check operator priority)
$ echo 'cat2n2($1, $2, $3, $4) = $1 ## $2 or $3 ## $4~2' >> .hg/hgrc
$ log "cat2n2(2785f5, 1eece5, 24286f, 4ae135)"
0
4
FUJIWARA Katsunori
i18n: use "encoding.lower()" to normalize specified string for revset...
r15726 $ cd ..
test author/desc/keyword in problematic encoding
# unicode: cp932:
# u30A2 0x83 0x41(= 'A')
# u30C2 0x83 0x61(= 'a')
$ hg init problematicencoding
$ cd problematicencoding
$ python > setup.sh <<EOF
> print u'''
> echo a > text
> hg add text
> hg --encoding utf-8 commit -u '\u30A2' -m none
> echo b > text
> hg --encoding utf-8 commit -u '\u30C2' -m none
> echo c > text
> hg --encoding utf-8 commit -u none -m '\u30A2'
> echo d > text
> hg --encoding utf-8 commit -u none -m '\u30C2'
> '''.encode('utf-8')
> EOF
$ sh < setup.sh
test in problematic encoding
$ python > test.sh <<EOF
> print u'''
> hg --encoding cp932 log --template '{rev}\\n' -r 'author(\u30A2)'
> echo ====
> hg --encoding cp932 log --template '{rev}\\n' -r 'author(\u30C2)'
> echo ====
> hg --encoding cp932 log --template '{rev}\\n' -r 'desc(\u30A2)'
> echo ====
> hg --encoding cp932 log --template '{rev}\\n' -r 'desc(\u30C2)'
> echo ====
> hg --encoding cp932 log --template '{rev}\\n' -r 'keyword(\u30A2)'
> echo ====
> hg --encoding cp932 log --template '{rev}\\n' -r 'keyword(\u30C2)'
> '''.encode('cp932')
> EOF
$ sh < test.sh
0
====
1
====
2
====
3
====
0
2
====
1
3
$ cd ..