##// END OF EJS Templates
tests: remove bundle2 activation from test-largefiles.t...
tests: remove bundle2 activation from test-largefiles.t This is an old config that predate bundle2 on by default. This should have been remove after Mercurail 3.6 got released.

File last commit:

r29441:9e8d2587 default
r29671:ce47a9dc default
Show More
test-revset.t
3052 lines | 54.1 KiB | text/troff | Tads3Lexer
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ HGENCODING=utf-8
$ export HGENCODING
Pierre-Yves David
revset: avoid returning duplicates when returning ancestors...
r24940 $ cat > testrevset.py << EOF
> import mercurial.revset
>
> baseset = mercurial.revset.baseset
>
> def r3232(repo, subset, x):
> """"simple revset that return [3,2,3,2]
>
> revisions duplicated on purpose.
> """
> if 3 not in subset:
> if 2 in subset:
> return baseset([2,2])
> return baseset()
> return baseset([3,3,2,2])
>
> mercurial.revset.symbols['r3232'] = r3232
> EOF
$ cat >> $HGRCPATH << EOF
> [extensions]
> testrevset=$TESTTMP/testrevset.py
> EOF
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105
$ 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"
> }
Yuya Nishihara
test-revset: show how inconsistent the ordering of compound expressions is...
r29390 extension to build '_intlist()' and '_hexlist()', which is necessary because
these predicates use '\0' as a separator:
$ cat <<EOF > debugrevlistspec.py
> from __future__ import absolute_import
> from mercurial import (
> cmdutil,
> node as nodemod,
> revset,
> )
> cmdtable = {}
> command = cmdutil.command(cmdtable)
> @command('debugrevlistspec',
> [('', 'optimize', None, 'print parsed tree after optimizing'),
> ('', 'bin', None, 'unhexlify arguments')])
> def debugrevlistspec(ui, repo, fmt, *args, **opts):
> if opts['bin']:
> args = map(nodemod.bin, args)
> expr = revset.formatspec(fmt, list(args))
> if ui.verbose:
> tree = revset.parse(expr, lookup=repo.__contains__)
> ui.note(revset.prettyformat(tree), "\n")
> if opts["optimize"]:
> opttree = revset.optimize(tree)
> ui.note("* optimized:\n", revset.prettyformat(opttree), "\n")
> func = revset.match(ui, expr, repo)
> revs = func(repo)
> if ui.verbose:
> ui.note("* set:\n", revset.prettyformatset(revs), "\n")
> for c in revs:
> ui.write("%s\n" % c)
> EOF
$ cat <<EOF >> $HGRCPATH
> [extensions]
> debugrevlistspec = $TESTTMP/debugrevlistspec.py
> EOF
$ trylist() {
> hg debugrevlistspec --debug "$@"
> }
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ 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
$ hg ci -Aqm1
$ rm a
$ hg branch a-b-c-
marked working directory as branch a-b-c-
$ 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+
$ 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
Adrian Buehlmann
test-revset: enable for Windows...
r16851 $ hg branch !a/b/c/
marked working directory as branch !a/b/c/
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_
$ 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 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)
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ hg ci -Aqm9
$ hg tag -r6 1.0
Alexander Drozdov
revset: id() called with 40-byte strings should give the same results as for short strings...
r24904 $ hg bookmark -r6 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105
$ hg clone --quiet -U -r 7 . ../remote1
$ hg clone --quiet -U -r 8 . ../remote2
$ echo "[paths]" >> .hg/hgrc
$ echo "default = ../remote1" >> .hg/hgrc
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 trivial
$ try 0:1
(range
('symbol', '0')
('symbol', '1'))
* set:
Yuya Nishihara
revset: optimize "x & fullreposet" case...
r24459 <spanset+ 0:1>
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 0
1
Yuya Nishihara
revset: parse nullary ":" operator as "0:tip"...
r25819 $ try --optimize :
(rangeall
None)
* optimized:
(range
('string', '0')
('string', 'tip'))
* set:
<spanset+ 0:9>
0
1
2
3
4
5
6
7
8
9
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 $ try 3::6
(dagrange
('symbol', '3')
('symbol', '6'))
* set:
Pierre-Yves David
reachableroots: use baseset lazy sorting...
r26061 <baseset+ [3, 5, 6]>
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 3
5
6
$ try '0|1|2'
(or
Yuya Nishihara
revset: reduce nesting of chained 'or' operations (issue4624)...
r25309 ('symbol', '0')
('symbol', '1')
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 ('symbol', '2'))
* set:
Yuya Nishihara
revset: optimize 'or' operation of trivial revisions to a list...
r25343 <baseset [0, 1, 2]>
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 0
1
2
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 names that should work without quoting
$ try a
('symbol', 'a')
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<baseset [0]>
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 0
$ try b-a
Patrick Mezard
debugrevspec: pretty print output...
r16218 (minus
('symbol', 'b')
('symbol', 'a'))
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<filteredset
Yuya Nishihara
revset: add extra data to filteredset for better inspection...
r28423 <baseset [1]>,
<not
<baseset [0]>>>
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 1
$ try _a_b_c_
('symbol', '_a_b_c_')
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<baseset [6]>
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 6
$ try _a_b_c_-a
Patrick Mezard
debugrevspec: pretty print output...
r16218 (minus
('symbol', '_a_b_c_')
('symbol', 'a'))
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<filteredset
Yuya Nishihara
revset: add extra data to filteredset for better inspection...
r28423 <baseset [6]>,
<not
<baseset [0]>>>
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 6
$ try .a.b.c.
('symbol', '.a.b.c.')
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<baseset [7]>
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 7
$ try .a.b.c.-a
Patrick Mezard
debugrevspec: pretty print output...
r16218 (minus
('symbol', '.a.b.c.')
('symbol', 'a'))
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<filteredset
Yuya Nishihara
revset: add extra data to filteredset for better inspection...
r28423 <baseset [7]>,
<not
<baseset [0]>>>
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 7
Yuya Nishihara
debugrevspec: pass lookup function to visualize fallback mechanism...
r25901
names that should be caught by fallback mechanism
$ try -- '-a-b-c-'
Yuya Nishihara
revset: port parsing rule of old-style ranges from scmutil.revrange()...
r25902 ('symbol', '-a-b-c-')
Yuya Nishihara
debugrevspec: pass lookup function to visualize fallback mechanism...
r25901 * set:
<baseset [4]>
4
$ log -a-b-c-
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 4
Yuya Nishihara
revset: port parsing rule of old-style ranges from scmutil.revrange()...
r25902 $ try '+a+b+c+'
('symbol', '+a+b+c+')
* set:
<baseset [3]>
3
$ try '+a+b+c+:'
(rangepost
('symbol', '+a+b+c+'))
* set:
<spanset+ 3:9>
3
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 4
Yuya Nishihara
revset: port parsing rule of old-style ranges from scmutil.revrange()...
r25902 5
6
7
8
9
$ try ':+a+b+c+'
(rangepre
('symbol', '+a+b+c+'))
* set:
<spanset+ 0:3>
0
1
2
3
$ try -- '-a-b-c-:+a+b+c+'
(range
('symbol', '-a-b-c-')
('symbol', '+a+b+c+'))
* set:
<spanset- 3:4>
4
3
$ log '-a-b-c-:+a+b+c+'
4
3
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')
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<baseset [9]>
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 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'))
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<filteredset
Yuya Nishihara
revset: add extra data to filteredset for better inspection...
r28423 <baseset [4]>,
<not
<baseset [0]>>>
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'))
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<addset
<baseset []>,
<baseset [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')))
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<addset
<baseset [1]>,
<baseset []>>
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'))
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<baseset []>
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'))))
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<addset
<baseset [1]>,
Yuya Nishihara
revset: optimize 'or' operation of trivial revisions to a list...
r25343 <baseset [2, 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'
Jordi Gutiérrez Hermoso
revset: don't error out if tokens parse as existing symbols...
r24932 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('
hg: parse error at 5: not a prefix: end
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Yuya Nishihara
revset: handle error of string unescaping
r26232 $ log 'date("\xy")'
hg: parse error: invalid \x escape
[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]
Jordi Gutiérrez Hermoso
revset: don't error out if tokens parse as existing symbols...
r24932 $ log '0:date'
abort: unknown revision 'date'!
[255]
$ log '::"date"'
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 abort: unknown revision 'date'!
Matt Mackall
tests: add exit codes to unified tests
r12316 [255]
Jordi Gutiérrez Hermoso
revset: don't error out if tokens parse as existing symbols...
r24932 $ hg book date -r 4
$ log '0:date'
0
1
2
3
4
$ log '::date'
0
1
2
4
$ log '::"date"'
0
1
2
4
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105 $ log 'date(2005) and 1::'
4
Jordi Gutiérrez Hermoso
revset: don't error out if tokens parse as existing symbols...
r24932 $ hg book -d date
Yuya Nishihara
revset: check invalid function syntax "func-name"() explicitly...
r29441 function name should be a symbol
$ log '"date"(2005)'
hg: parse error: not a symbol
[255]
Yuya Nishihara
revset: add parsing rule for key=value pair...
r25704 keyword arguments
Yuya Nishihara
revset: port extra() to support keyword arguments...
r25706 $ log 'extra(branch, value=a)'
0
$ log 'extra(branch, a, b)'
hg: parse error: extra takes at most 2 arguments
[255]
$ log 'extra(a, label=b)'
hg: parse error: extra got multiple values for keyword argument 'label'
[255]
$ log 'extra(label=branch, default)'
hg: parse error: extra got an invalid argument
[255]
$ log 'extra(branch, foo+bar=baz)'
hg: parse error: extra got an invalid argument
[255]
$ log 'extra(unknown=branch)'
hg: parse error: extra got an unexpected keyword argument 'unknown'
[255]
Yuya Nishihara
revset: add parsing rule for key=value pair...
r25704 $ try 'foo=bar|baz'
(keyvalue
('symbol', 'foo')
(or
('symbol', 'bar')
('symbol', 'baz')))
hg: parse error: can't use a key-value pair in this context
[255]
Jordi Gutiérrez Hermoso
revset: don't error out if tokens parse as existing symbols...
r24932 Test that symbols only get parsed as functions if there's an opening
parenthesis.
$ hg book only -r 9
$ log 'only(only)' # Outer "only" is a function, inner "only" is the bookmark
8
9
Nicolas Dumazet
util: get rid of extra trailing whitespace in parsedate abort message
r12105
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
Pierre-Yves David
revset: avoid returning duplicates when returning ancestors...
r24940
test ancestors
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
Pierre-Yves David
revset: avoid returning duplicates when returning ancestors...
r24940 $ log '::r3232()'
0
1
2
3
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+'))
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<filteredset
Yuya Nishihara
revset: add inspection data to all filter() calls...
r28424 <fullreposet+ 0:9>,
<grep '\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+'))
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<filteredset
Yuya Nishihara
revset: add inspection data to all filter() calls...
r28424 <fullreposet+ 0:9>,
<grep '\\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
Yuya Nishihara
revset: add optional offset argument to limit() predicate...
r26638 $ log 'limit(author("re:bob|test"), 3, 5)'
5
6
7
$ log 'limit(author("re:bob|test"), offset=6)'
6
$ log 'limit(author("re:bob|test"), offset=10)'
$ log 'limit(all(), 1, -1)'
hg: parse error: negative offset
[255]
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
Yuya Nishihara
revset: map postfix '%' to only() to optimize operand recursively (issue4670)...
r25094 Test opreand of '%' is optimized recursively (issue4670)
$ try --optimize '8:9-8%'
(onlypost
(minus
(range
('symbol', '8')
('symbol', '9'))
('symbol', '8')))
* optimized:
(func
('symbol', 'only')
Durham Goode
revset: use smartset minus operator...
r28217 (difference
Yuya Nishihara
revset: map postfix '%' to only() to optimize operand recursively (issue4670)...
r25094 (range
('symbol', '8')
('symbol', '9'))
Durham Goode
revset: use smartset minus operator...
r28217 ('symbol', '8')))
Yuya Nishihara
revset: map postfix '%' to only() to optimize operand recursively (issue4670)...
r25094 * set:
<baseset+ [8, 9]>
8
9
Yuya Nishihara
revset: remove unused 'only' from methods table...
r25105 $ try --optimize '(9)%(5)'
(only
(group
('symbol', '9'))
(group
('symbol', '5')))
* optimized:
(func
('symbol', 'only')
(list
('symbol', '9')
('symbol', '5')))
* set:
Pierre-Yves David
revset: stabilize repr of baseset initialized with a set...
r28785 <baseset+ [2, 4, 8, 9]>
Yuya Nishihara
revset: remove unused 'only' from methods table...
r25105 2
4
8
9
Yuya Nishihara
revset: map postfix '%' to only() to optimize operand recursively (issue4670)...
r25094
Sean Farley
revset: use '%' as an operator for 'only'...
r23765 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]
Alexander Drozdov
revset: id() called with 40-byte strings should give the same results as for short strings...
r24904 Test hexadecimal revision
$ log 'id(2)'
abort: 00changelog.i@2: ambiguous identifier!
[255]
$ log 'id(23268)'
4
$ log 'id(2785f51eece)'
0
$ log 'id(d5d0dcbdc4d9ff5dbb2d336f32f0bb561c1a532c)'
8
$ log 'id(d5d0dcbdc4a)'
$ log 'id(d5d0dcbdc4w)'
$ log 'id(d5d0dcbdc4d9ff5dbb2d336f32f0bb561c1a532d)'
$ log 'id(d5d0dcbdc4d9ff5dbb2d336f32f0bb561c1a532q)'
$ log 'id(1.0)'
$ log 'id(xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)'
Yuya Nishihara
revset: fix ancestors(null) to include null revision (issue4512)...
r23956 Test null revision
Yuya Nishihara
revset: extend fullreposet to make "null" revision magically appears in set...
r24204 $ log '(null)'
-1
$ log '(null:0)'
-1
0
$ log '(0:null)'
0
-1
$ log 'null::0'
-1
0
$ log 'null:tip - 0:'
-1
$ log 'null: and null::' | head -1
-1
$ log 'null: or 0:' | head -2
-1
0
Yuya Nishihara
revset: fix ancestors(null) to include null revision (issue4512)...
r23956 $ log 'ancestors(null)'
-1
Yuya Nishihara
revset: extend fullreposet to make "null" revision magically appears in set...
r24204 $ log 'reverse(null:)' | tail -2
0
-1
Yuya Nishihara
revset: drop magic of fullreposet membership test (issue4682)...
r25265 BROKEN: should be '-1'
Yuya Nishihara
revset: extend fullreposet to make "null" revision magically appears in set...
r24204 $ log 'first(null:)'
Yuya Nishihara
revset: drop magic of fullreposet membership test (issue4682)...
r25265 BROKEN: should be '-1'
Yuya Nishihara
revset: extend fullreposet to make "null" revision magically appears in set...
r24204 $ log 'min(null:)'
Yuya Nishihara
revset: have all() filter out null revision...
r24202 $ log 'tip:null and all()' | tail -2
1
0
Yuya Nishihara
revset: fix ancestors(null) to include null revision (issue4512)...
r23956
Yuya Nishihara
revset: add wdir() function to specify workingctx revision by command...
r24419 Test working-directory revision
$ hg debugrevspec 'wdir()'
Yuya Nishihara
revset: use integer representation of wdir() in revset...
r25765 2147483647
Yuya Nishihara
revset: add wdir() function to specify workingctx revision by command...
r24419 $ hg debugrevspec 'tip or wdir()'
9
Yuya Nishihara
revset: use integer representation of wdir() in revset...
r25765 2147483647
Yuya Nishihara
revset: add wdir() function to specify workingctx revision by command...
r24419 $ hg debugrevspec '0:tip and wdir()'
Yuya Nishihara
revset: work around x:y range where x or y is wdir()...
r25766 $ log '0:wdir()' | tail -3
8
9
2147483647
$ log 'wdir():0' | head -3
2147483647
9
8
$ log 'wdir():wdir()'
2147483647
Yuya Nishihara
revset: use integer representation of wdir() in revset...
r25765 $ log '(all() + wdir()) & min(. + wdir())'
9
$ log '(all() + wdir()) & max(. + wdir())'
2147483647
$ log '(all() + wdir()) & first(wdir() + .)'
2147483647
$ log '(all() + wdir()) & last(. + wdir())'
2147483647
Yuya Nishihara
revset: add wdir() function to specify workingctx revision by command...
r24419
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
Yuya Nishihara
revset: make dagrange preserve order of input set...
r29139 Test order of revisions in compound expression
----------------------------------------------
Yuya Nishihara
test-revset: show how inconsistent the ordering of compound expressions is...
r29390 The general rule is that only the outermost (= leftmost) predicate can
enforce its ordering requirement. The other predicates should take the
ordering defined by it.
Yuya Nishihara
revset: make dagrange preserve order of input set...
r29139 'A & B' should follow the order of 'A':
$ log '2:0 & 0::2'
2
1
0
Martin von Zweigbergk
revset: make head() honor order of subset...
r29408 'head()' combines sets in right order:
Yuya Nishihara
test-revset: show how inconsistent the ordering of compound expressions is...
r29390
$ log '2:0 & head()'
Martin von Zweigbergk
revset: make head() honor order of subset...
r29408 2
Yuya Nishihara
test-revset: show how inconsistent the ordering of compound expressions is...
r29390 1
Martin von Zweigbergk
revset: make head() honor order of subset...
r29408 0
Yuya Nishihara
test-revset: show how inconsistent the ordering of compound expressions is...
r29390
'a + b', which is optimized to '_list(a b)', should take the ordering of
the left expression:
$ try --optimize '2:0 & (0 + 1 + 2)'
(and
(range
('symbol', '2')
('symbol', '0'))
(group
(or
('symbol', '0')
('symbol', '1')
('symbol', '2'))))
* optimized:
(and
(range
('symbol', '2')
('symbol', '0'))
(func
('symbol', '_list')
('string', '0\x001\x002')))
* set:
<baseset [0, 1, 2]>
0
1
2
BROKEN: should be '2 1 0'
'A + B' should take the ordering of the left expression:
$ try --optimize '2:0 & (0:1 + 2)'
(and
(range
('symbol', '2')
('symbol', '0'))
(group
(or
(range
('symbol', '0')
('symbol', '1'))
('symbol', '2'))))
* optimized:
(and
(range
('symbol', '2')
('symbol', '0'))
(or
(range
('symbol', '0')
('symbol', '1'))
('symbol', '2')))
* set:
<addset
<filteredset
<spanset+ 0:1>,
<spanset- 0:2>>,
<baseset [2]>>
0
1
2
BROKEN: should be '2 1 0'
'_intlist(a b)' should behave like 'a + b':
$ trylist --optimize '2:0 & %ld' 0 1 2
(and
(range
('symbol', '2')
('symbol', '0'))
(func
('symbol', '_intlist')
('string', '0\x001\x002')))
* optimized:
(and
(func
('symbol', '_intlist')
('string', '0\x001\x002'))
(range
('symbol', '2')
('symbol', '0')))
* set:
<filteredset
<spanset- 0:2>,
<baseset [0, 1, 2]>>
2
1
0
$ trylist --optimize '%ld & 2:0' 0 2 1
(and
(func
('symbol', '_intlist')
('string', '0\x002\x001'))
(range
('symbol', '2')
('symbol', '0')))
* optimized:
(and
(func
('symbol', '_intlist')
('string', '0\x002\x001'))
(range
('symbol', '2')
('symbol', '0')))
* set:
<filteredset
<spanset- 0:2>,
<baseset [0, 2, 1]>>
2
1
0
BROKEN: should be '0 2 1'
'_hexlist(a b)' should behave like 'a + b':
$ trylist --optimize --bin '2:0 & %ln' `hg log -T '{node} ' -r0:2`
(and
(range
('symbol', '2')
('symbol', '0'))
(func
('symbol', '_hexlist')
('string', '*'))) (glob)
* optimized:
(and
(range
('symbol', '2')
('symbol', '0'))
(func
('symbol', '_hexlist')
('string', '*'))) (glob)
* set:
<baseset [0, 1, 2]>
0
1
2
BROKEN: should be '2 1 0'
$ trylist --optimize --bin '%ln & 2:0' `hg log -T '{node} ' -r0+2+1`
(and
(func
('symbol', '_hexlist')
('string', '*')) (glob)
(range
('symbol', '2')
('symbol', '0')))
* optimized:
(and
(range
('symbol', '2')
('symbol', '0'))
(func
('symbol', '_hexlist')
('string', '*'))) (glob)
* set:
<baseset [0, 2, 1]>
0
2
1
'present()' should do nothing other than suppressing an error:
$ try --optimize '2:0 & present(0 + 1 + 2)'
(and
(range
('symbol', '2')
('symbol', '0'))
(func
('symbol', 'present')
(or
('symbol', '0')
('symbol', '1')
('symbol', '2'))))
* optimized:
(and
(range
('symbol', '2')
('symbol', '0'))
(func
('symbol', 'present')
(func
('symbol', '_list')
('string', '0\x001\x002'))))
* set:
<baseset [0, 1, 2]>
0
1
2
BROKEN: should be '2 1 0'
'reverse()' should take effect only if it is the outermost expression:
$ try --optimize '0:2 & reverse(all())'
(and
(range
('symbol', '0')
('symbol', '2'))
(func
('symbol', 'reverse')
(func
('symbol', 'all')
None)))
* optimized:
(and
(range
('symbol', '0')
('symbol', '2'))
(func
('symbol', 'reverse')
(func
('symbol', 'all')
None)))
* set:
<filteredset
<spanset- 0:2>,
<spanset+ 0:9>>
2
1
0
BROKEN: should be '0 1 2'
'sort()' should take effect only if it is the outermost expression:
$ try --optimize '0:2 & sort(all(), -rev)'
(and
(range
('symbol', '0')
('symbol', '2'))
(func
('symbol', 'sort')
(list
(func
('symbol', 'all')
None)
(negate
('symbol', 'rev')))))
* optimized:
(and
(range
('symbol', '0')
('symbol', '2'))
(func
('symbol', 'sort')
(list
(func
('symbol', 'all')
None)
('string', '-rev'))))
* set:
<filteredset
<spanset- 0:2>,
<spanset+ 0:9>>
2
1
0
BROKEN: should be '0 1 2'
for 'A & f(B)', 'B' should not be affected by the order of 'A':
$ try --optimize '2:0 & first(1 + 0 + 2)'
(and
(range
('symbol', '2')
('symbol', '0'))
(func
('symbol', 'first')
(or
('symbol', '1')
('symbol', '0')
('symbol', '2'))))
* optimized:
(and
(range
('symbol', '2')
('symbol', '0'))
(func
('symbol', 'first')
(func
('symbol', '_list')
('string', '1\x000\x002'))))
* set:
<baseset
<limit n=1, offset=0,
<spanset- 0:2>,
<baseset [1, 0, 2]>>>
1
$ try --optimize '2:0 & not last(0 + 2 + 1)'
(and
(range
('symbol', '2')
('symbol', '0'))
(not
(func
('symbol', 'last')
(or
('symbol', '0')
('symbol', '2')
('symbol', '1')))))
* optimized:
(difference
(range
('symbol', '2')
('symbol', '0'))
(func
('symbol', 'last')
(func
('symbol', '_list')
('string', '0\x002\x001'))))
* set:
<filteredset
<spanset- 0:2>,
<not
<baseset
<last n=1,
<fullreposet+ 0:9>,
<baseset [1, 2, 0]>>>>>
2
0
for 'A & (op)(B)', 'B' should not be affected by the order of 'A':
$ try --optimize '2:0 & (1 + 0 + 2):(0 + 2 + 1)'
(and
(range
('symbol', '2')
('symbol', '0'))
(range
(group
(or
('symbol', '1')
('symbol', '0')
('symbol', '2')))
(group
(or
('symbol', '0')
('symbol', '2')
('symbol', '1')))))
* optimized:
(and
(range
('symbol', '2')
('symbol', '0'))
(range
(func
('symbol', '_list')
('string', '1\x000\x002'))
(func
('symbol', '_list')
('string', '0\x002\x001'))))
* set:
<filteredset
<baseset [1]>,
<spanset- 0:2>>
1
'A & B' can be rewritten as 'B & A' by weight, but the ordering rule should
be determined before the optimization (i.e. 'B' should take the ordering of
'A'):
$ try --optimize 'contains("glob:*") & (2 + 0 + 1)'
(and
(func
('symbol', 'contains')
('string', 'glob:*'))
(group
(or
('symbol', '2')
('symbol', '0')
('symbol', '1'))))
* optimized:
(and
(func
('symbol', '_list')
('string', '2\x000\x001'))
(func
('symbol', 'contains')
('string', 'glob:*')))
* set:
<filteredset
<baseset [2, 0, 1]>,
<contains 'glob:*'>>
2
0
1
BROKEN: should be '0 1 2'
$ try --optimize 'reverse(contains("glob:*")) & (0 + 2 + 1)'
(and
(func
('symbol', 'reverse')
(func
('symbol', 'contains')
('string', 'glob:*')))
(group
(or
('symbol', '0')
('symbol', '2')
('symbol', '1'))))
* optimized:
(and
(func
('symbol', '_list')
('string', '0\x002\x001'))
(func
('symbol', 'reverse')
(func
('symbol', 'contains')
('string', 'glob:*'))))
* set:
<filteredset
<baseset [1, 2, 0]>,
<contains 'glob:*'>>
1
2
0
BROKEN: should be '2 1 0'
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
Yuya Nishihara
revset: fix crash on empty sort key...
r29362 test empty sort key which is noop
$ log 'sort(0 + 2 + 1, "")'
0
2
1
Yuya Nishihara
revset: factor out reverse flag of sort() key...
r29264 test invalid sort keys
$ log 'sort(all(), -invalid)'
hg: parse error: unknown sort key '-invalid'
[255]
Yuya Nishihara
revset: make sort() do dumb multi-pass sorting for multiple keys (issue5218)...
r29001 $ cd ..
test sorting by multiple keys including variable-length strings
$ hg init sorting
$ cd sorting
$ cat <<EOF >> .hg/hgrc
> [ui]
> logtemplate = '{rev} {branch|p5}{desc|p5}{author|p5}{date|hgdate}\n'
> [templatealias]
> p5(s) = pad(s, 5)
> EOF
$ hg branch -qf b12
$ hg ci -m m111 -u u112 -d '111 10800'
$ hg branch -qf b11
$ hg ci -m m12 -u u111 -d '112 7200'
$ hg branch -qf b111
$ hg ci -m m11 -u u12 -d '111 3600'
$ hg branch -qf b112
$ hg ci -m m111 -u u11 -d '120 0'
$ hg branch -qf b111
$ hg ci -m m112 -u u111 -d '110 14400'
created new head
compare revisions (has fast path):
$ hg log -r 'sort(all(), rev)'
0 b12 m111 u112 111 10800
1 b11 m12 u111 112 7200
2 b111 m11 u12 111 3600
3 b112 m111 u11 120 0
4 b111 m112 u111 110 14400
$ hg log -r 'sort(all(), -rev)'
4 b111 m112 u111 110 14400
3 b112 m111 u11 120 0
2 b111 m11 u12 111 3600
1 b11 m12 u111 112 7200
0 b12 m111 u112 111 10800
compare variable-length strings (issue5218):
$ hg log -r 'sort(all(), branch)'
1 b11 m12 u111 112 7200
2 b111 m11 u12 111 3600
4 b111 m112 u111 110 14400
3 b112 m111 u11 120 0
0 b12 m111 u112 111 10800
$ hg log -r 'sort(all(), -branch)'
0 b12 m111 u112 111 10800
3 b112 m111 u11 120 0
2 b111 m11 u12 111 3600
4 b111 m112 u111 110 14400
1 b11 m12 u111 112 7200
$ hg log -r 'sort(all(), desc)'
2 b111 m11 u12 111 3600
0 b12 m111 u112 111 10800
3 b112 m111 u11 120 0
4 b111 m112 u111 110 14400
1 b11 m12 u111 112 7200
$ hg log -r 'sort(all(), -desc)'
1 b11 m12 u111 112 7200
4 b111 m112 u111 110 14400
0 b12 m111 u112 111 10800
3 b112 m111 u11 120 0
2 b111 m11 u12 111 3600
$ hg log -r 'sort(all(), user)'
3 b112 m111 u11 120 0
1 b11 m12 u111 112 7200
4 b111 m112 u111 110 14400
0 b12 m111 u112 111 10800
2 b111 m11 u12 111 3600
$ hg log -r 'sort(all(), -user)'
2 b111 m11 u12 111 3600
0 b12 m111 u112 111 10800
1 b11 m12 u111 112 7200
4 b111 m112 u111 110 14400
3 b112 m111 u11 120 0
compare dates (tz offset should have no effect):
$ hg log -r 'sort(all(), date)'
4 b111 m112 u111 110 14400
0 b12 m111 u112 111 10800
2 b111 m11 u12 111 3600
1 b11 m12 u111 112 7200
3 b112 m111 u11 120 0
$ hg log -r 'sort(all(), -date)'
3 b112 m111 u11 120 0
1 b11 m12 u111 112 7200
0 b12 m111 u112 111 10800
2 b111 m11 u12 111 3600
4 b111 m112 u111 110 14400
be aware that 'sort(x, -k)' is not exactly the same as 'reverse(sort(x, k))'
because '-k' reverses the comparison, not the list itself:
$ hg log -r 'sort(0 + 2, date)'
0 b12 m111 u112 111 10800
2 b111 m11 u12 111 3600
$ hg log -r 'sort(0 + 2, -date)'
0 b12 m111 u112 111 10800
2 b111 m11 u12 111 3600
$ hg log -r 'reverse(sort(0 + 2, date))'
2 b111 m11 u12 111 3600
0 b12 m111 u112 111 10800
sort by multiple keys:
$ hg log -r 'sort(all(), "branch -rev")'
1 b11 m12 u111 112 7200
4 b111 m112 u111 110 14400
2 b111 m11 u12 111 3600
3 b112 m111 u11 120 0
0 b12 m111 u112 111 10800
$ hg log -r 'sort(all(), "-desc -date")'
1 b11 m12 u111 112 7200
4 b111 m112 u111 110 14400
3 b112 m111 u11 120 0
0 b12 m111 u112 111 10800
2 b111 m11 u12 111 3600
$ hg log -r 'sort(all(), "user -branch date rev")'
3 b112 m111 u11 120 0
4 b111 m112 u111 110 14400
1 b11 m12 u111 112 7200
0 b12 m111 u112 111 10800
2 b111 m11 u12 111 3600
Martijn Pieters
revset: add new topographical sort...
r29348 toposort prioritises graph branches
$ hg up 2
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ touch a
$ hg addremove
adding a
$ hg ci -m 't1' -u 'tu' -d '130 0'
created new head
$ echo 'a' >> a
$ hg ci -m 't2' -u 'tu' -d '130 0'
$ hg book book1
$ hg up 4
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
(leaving bookmark book1)
$ touch a
$ hg addremove
adding a
$ hg ci -m 't3' -u 'tu' -d '130 0'
$ hg log -r 'sort(all(), topo)'
7 b111 t3 tu 130 0
4 b111 m112 u111 110 14400
3 b112 m111 u11 120 0
6 b111 t2 tu 130 0
5 b111 t1 tu 130 0
2 b111 m11 u12 111 3600
1 b11 m12 u111 112 7200
0 b12 m111 u112 111 10800
$ hg log -r 'sort(all(), -topo)'
0 b12 m111 u112 111 10800
1 b11 m12 u111 112 7200
2 b111 m11 u12 111 3600
5 b111 t1 tu 130 0
6 b111 t2 tu 130 0
3 b112 m111 u11 120 0
4 b111 m112 u111 110 14400
7 b111 t3 tu 130 0
$ hg log -r 'sort(all(), topo, topo.firstbranch=book1)'
6 b111 t2 tu 130 0
5 b111 t1 tu 130 0
7 b111 t3 tu 130 0
4 b111 m112 u111 110 14400
3 b112 m111 u11 120 0
2 b111 m11 u12 111 3600
1 b11 m12 u111 112 7200
0 b12 m111 u112 111 10800
topographical sorting can't be combined with other sort keys, and you can't
use the topo.firstbranch option when topo sort is not active:
$ hg log -r 'sort(all(), "topo user")'
hg: parse error: topo sort order cannot be combined with other sort keys
[255]
$ hg log -r 'sort(all(), user, topo.firstbranch=book1)'
hg: parse error: topo.firstbranch can only be used when using the topo sort key
[255]
Yuya Nishihara
revset: make sort() do dumb multi-pass sorting for multiple keys (issue5218)...
r29001 $ cd ..
$ cd repo
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
Yuya Nishihara
revrange: drop unnecessary deduplication of revisions...
r25383 test that more than one `-r`s are combined in the right order and deduplicated:
$ hg log -T '{rev}\n' -r 3 -r 3 -r 4 -r 5:2 -r 'ancestors(4)'
3
4
5
2
0
1
Yuya Nishihara
revset: test current behavior of addset class...
r25024 test that `or` operation skips duplicated revisions from right-hand side
$ try 'reverse(1::5) or ancestors(4)'
(or
(func
('symbol', 'reverse')
(dagrange
('symbol', '1')
('symbol', '5')))
(func
('symbol', 'ancestors')
('symbol', '4')))
* set:
<addset
Pierre-Yves David
reachableroots: use baseset lazy sorting...
r26061 <baseset- [1, 3, 5]>,
Yuya Nishihara
revset: drop redundant filteredset from right-hand side set of "or" operation...
r25129 <generatorset+>>
Yuya Nishihara
revset: test current behavior of addset class...
r25024 5
3
1
0
2
4
$ try 'sort(ancestors(4) or reverse(1::5))'
(func
('symbol', 'sort')
(or
(func
('symbol', 'ancestors')
('symbol', '4'))
(func
('symbol', 'reverse')
(dagrange
('symbol', '1')
('symbol', '5')))))
* set:
<addset+
<generatorset+>,
Pierre-Yves David
reachableroots: use baseset lazy sorting...
r26061 <baseset- [1, 3, 5]>>
Yuya Nishihara
revset: test current behavior of addset class...
r25024 0
1
2
3
4
5
Yuya Nishihara
revset: optimize 'or' operation of trivial revisions to a list...
r25343 test optimization of trivial `or` operation
$ try --optimize '0|(1)|"2"|-2|tip|null'
(or
('symbol', '0')
(group
('symbol', '1'))
('string', '2')
(negate
('symbol', '2'))
('symbol', 'tip')
('symbol', 'null'))
* optimized:
(func
('symbol', '_list')
('string', '0\x001\x002\x00-2\x00tip\x00null'))
* set:
<baseset [0, 1, 2, 8, 9, -1]>
0
1
2
8
9
-1
$ try --optimize '0|1|2:3'
(or
('symbol', '0')
('symbol', '1')
(range
('symbol', '2')
('symbol', '3')))
* optimized:
(or
(func
('symbol', '_list')
('string', '0\x001'))
(range
('symbol', '2')
('symbol', '3')))
* set:
<addset
<baseset [0, 1]>,
<spanset+ 2:3>>
0
1
2
3
$ try --optimize '0:1|2|3:4|5|6'
(or
(range
('symbol', '0')
('symbol', '1'))
('symbol', '2')
(range
('symbol', '3')
('symbol', '4'))
('symbol', '5')
('symbol', '6'))
* optimized:
(or
(range
('symbol', '0')
('symbol', '1'))
('symbol', '2')
(range
('symbol', '3')
('symbol', '4'))
(func
('symbol', '_list')
('string', '5\x006')))
* set:
<addset
<addset
<spanset+ 0:1>,
<baseset [2]>>,
<addset
<spanset+ 3:4>,
<baseset [5, 6]>>>
0
1
2
3
4
5
6
test that `_list` should be narrowed by provided `subset`
$ log '0:2 and (null|1|2|3)'
1
2
test that `_list` should remove duplicates
$ log '0|1|2|1|2|-1|tip'
0
1
2
9
test unknown revision in `_list`
$ log '0|unknown'
abort: unknown revision 'unknown'!
[255]
Yuya Nishihara
revset: add fast path for _list() of integer revisions...
r25344 test integer range in `_list`
$ log '-1|-10'
9
0
$ log '-10|-11'
abort: unknown revision '-11'!
[255]
$ log '9|10'
abort: unknown revision '10'!
[255]
test '0000' != '0' in `_list`
$ log '0|0000'
0
-1
timeless
revset: add hint for list error to use or
r27517 test ',' in `_list`
$ log '0,1'
hg: parse error: can't use a list in this context
(see hg help "revsets.x or y")
[255]
Yuya Nishihara
revset: flatten chained 'list' operations (aka function args) (issue5072)...
r27987 $ try '0,1,2'
(list
('symbol', '0')
('symbol', '1')
('symbol', '2'))
hg: parse error: can't use a list in this context
(see hg help "revsets.x or y")
[255]
timeless
revset: add hint for list error to use or
r27517
Yuya Nishihara
revset: reduce nesting of chained 'or' operations (issue4624)...
r25309 test that chained `or` operations make balanced addsets
$ try '0:1|1:2|2:3|3:4|4:5'
(or
(range
('symbol', '0')
('symbol', '1'))
(range
('symbol', '1')
('symbol', '2'))
(range
('symbol', '2')
('symbol', '3'))
(range
('symbol', '3')
('symbol', '4'))
(range
('symbol', '4')
('symbol', '5')))
* set:
<addset
<addset
<spanset+ 0:1>,
<spanset+ 1:2>>,
<addset
<spanset+ 2:3>,
<addset
<spanset+ 3:4>,
<spanset+ 4:5>>>>
0
1
2
3
4
5
Yuya Nishihara
revset: prevent crash caused by empty group expression while optimizing "or"...
r25996 no crash by empty group "()" while optimizing `or` operations
$ try --optimize '0|()'
(or
('symbol', '0')
(group
None))
* optimized:
(or
('symbol', '0')
None)
hg: parse error: missing argument
[255]
Yuya Nishihara
revset: reduce nesting of chained 'or' operations (issue4624)...
r25309 test that chained `or` operations never eat up stack (issue4624)
(uses `0:1` instead of `0` to avoid future optimization of trivial revisions)
FUJIWARA Katsunori
tests: avoid nested quoting on command line for portability...
r27991 $ hg log -T '{rev}\n' -r `python -c "print '+'.join(['0:1'] * 500)"`
Yuya Nishihara
revset: reduce nesting of chained 'or' operations (issue4624)...
r25309 0
1
Yuya Nishihara
revrange: build balanced tree of addsets from revisions (issue4565)...
r25385 test that repeated `-r` options never eat up stack (issue4565)
(uses `-r 0::1` to avoid possible optimization at old-style parser)
$ hg log -T '{rev}\n' `python -c "for i in xrange(500): print '-r 0::1 ',"`
0
1
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')))
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<baseset+ [3]>
Siddharth Agarwal
revset: optimize missing ancestor expressions...
r20499 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')))
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<baseset+ []>
Siddharth Agarwal
revset: optimize missing ancestor expressions...
r20499 $ 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')))
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<baseset+ [3, 4, 5, 6]>
Siddharth Agarwal
revset: optimize missing ancestor expressions...
r20499 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')))
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<baseset+ [3, 5, 6]>
Siddharth Agarwal
revset: optimize missing ancestor expressions...
r20499 3
5
6
Yuya Nishihara
revset: prevent crash caused by empty group expression while optimizing "and"...
r25995 no crash by empty group "()" while optimizing to "only()"
$ try --optimize '::1 and ()'
(and
(dagrangepre
('symbol', '1'))
(group
None))
* optimized:
(and
None
(func
('symbol', 'ancestors')
('symbol', '1')))
hg: parse error: missing argument
[255]
Yuya Nishihara
revset: check invalid function syntax "func-name"() explicitly...
r29441 invalid function call should not be optimized to only()
$ log '"ancestors"(6) and not ancestors(4)'
hg: parse error: not a symbol
[255]
$ log 'ancestors(6) and not "ancestors"(4)'
hg: parse error: not a symbol
[255]
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]
Yuya Nishihara
revset: do not fall through to revspec for literal: branch (issue4838)...
r26537 $ log 'branch("literal:unknown")'
abort: branch 'unknown' does not exist!
[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
Yuya Nishihara
test-revset: fix test vector for ordering issue of matching()...
r29321
matching() should preserve the order of the input set:
$ log '(2 or 3 or 1) and matching(1 or 2 or 3)'
Patrick Mezard
revset: make matching() preserve input revision order
r16640 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
Augie Fackler
test-revset: add tests for missing function output...
r24220 Bogus function gets suggestions
$ log 'add()'
Augie Fackler
dispatch: offer suggestions of similar-named commands...
r24222 hg: parse error: unknown identifier: add
Bryan O'Sullivan
dispatch: report similar names consistently
r27623 (did you mean adds?)
Augie Fackler
test-revset: add tests for missing function output...
r24220 [255]
$ log 'added()'
Augie Fackler
dispatch: offer suggestions of similar-named commands...
r24222 hg: parse error: unknown identifier: added
Bryan O'Sullivan
dispatch: report similar names consistently
r27623 (did you mean adds?)
Augie Fackler
test-revset: add tests for missing function output...
r24220 [255]
$ log 'remo()'
Augie Fackler
dispatch: offer suggestions of similar-named commands...
r24222 hg: parse error: unknown identifier: remo
Augie Fackler
dispatch: offer near-edit-distance suggestions for {file,rev}set functions...
r24221 (did you mean one of remote, removes?)
Augie Fackler
test-revset: add tests for missing function output...
r24220 [255]
$ log 'babar()'
Augie Fackler
dispatch: offer suggestions of similar-named commands...
r24222 hg: parse error: unknown identifier: babar
Augie Fackler
test-revset: add tests for missing function output...
r24220 [255]
Matt Harbison
revset: don't suggest private or undocumented queries...
r25632 Bogus function with a similar internal name doesn't suggest the internal name
$ log 'matches()'
hg: parse error: unknown identifier: matches
Bryan O'Sullivan
dispatch: report similar names consistently
r27623 (did you mean matching?)
Matt Harbison
revset: don't suggest private or undocumented queries...
r25632 [255]
Undocumented functions aren't suggested as similar either
$ log 'wdir2()'
hg: parse error: unknown identifier: wdir2
[255]
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^'
Yuya Nishihara
revpair: restrict odd-range handling to top-level x:y expression (issue4774)...
r26020 $ hg diff -r 'tip^:tip^'
Pierre-Yves David
revpair: smartset compatibility...
r20862
(single rev that does not looks like a range)
Yuya Nishihara
revpair: restrict odd-range handling to top-level x:y expression (issue4774)...
r26020 $ hg diff -r 'tip^::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
Pierre-Yves David
revpair: smartset compatibility...
r20862 $ 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
Siddharth Agarwal
ui: disable revsetaliases in plain mode (BC)...
r24883 (revset aliases can override builtin revsets)
$ echo 'p2($1) = p1($1)' >> .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')
Yuya Nishihara
debugrevspec: show expanded/concatenated states before printing trees...
r28629 * expanded:
Patrick Mezard
debugrevspec: pretty print output...
r16218 (func
('symbol', 'merge')
None)
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<filteredset
Yuya Nishihara
revset: add inspection data to all filter() calls...
r28424 <fullreposet+ 0:9>,
<merge>>
Alexander Solovyov
revset aliases
r14098 6
Patrick Mezard
revset: fix alias substitution recursion (issue3240)...
r16096
FUJIWARA Katsunori
tests: make tests with temporary environment setting portable...
r24892 $ HGPLAIN=1
$ export HGPLAIN
$ try m
Siddharth Agarwal
ui: disable revsetaliases in plain mode (BC)...
r24883 ('symbol', 'm')
abort: unknown revision 'm'!
[255]
FUJIWARA Katsunori
tests: make tests with temporary environment setting portable...
r24892 $ HGPLAINEXCEPT=revsetalias
$ export HGPLAINEXCEPT
$ try m
Siddharth Agarwal
ui: disable revsetaliases in plain mode (BC)...
r24883 ('symbol', 'm')
Yuya Nishihara
debugrevspec: show expanded/concatenated states before printing trees...
r28629 * expanded:
Siddharth Agarwal
ui: disable revsetaliases in plain mode (BC)...
r24883 (func
('symbol', 'merge')
None)
* set:
<filteredset
Yuya Nishihara
revset: add inspection data to all filter() calls...
r28424 <fullreposet+ 0:9>,
<merge>>
Siddharth Agarwal
ui: disable revsetaliases in plain mode (BC)...
r24883 6
$ unset HGPLAIN
$ unset HGPLAINEXCEPT
$ try 'p2(.)'
(func
('symbol', 'p2')
('symbol', '.'))
Yuya Nishihara
debugrevspec: show expanded/concatenated states before printing trees...
r28629 * expanded:
Siddharth Agarwal
ui: disable revsetaliases in plain mode (BC)...
r24883 (func
('symbol', 'p1')
('symbol', '.'))
* set:
<baseset+ [8]>
8
FUJIWARA Katsunori
tests: make tests with temporary environment setting portable...
r24892 $ HGPLAIN=1
$ export HGPLAIN
$ try 'p2(.)'
Siddharth Agarwal
ui: disable revsetaliases in plain mode (BC)...
r24883 (func
('symbol', 'p2')
('symbol', '.'))
* set:
<baseset+ []>
FUJIWARA Katsunori
tests: make tests with temporary environment setting portable...
r24892 $ HGPLAINEXCEPT=revsetalias
$ export HGPLAINEXCEPT
$ try 'p2(.)'
Siddharth Agarwal
ui: disable revsetaliases in plain mode (BC)...
r24883 (func
('symbol', 'p2')
('symbol', '.'))
Yuya Nishihara
debugrevspec: show expanded/concatenated states before printing trees...
r28629 * expanded:
Siddharth Agarwal
ui: disable revsetaliases in plain mode (BC)...
r24883 (func
('symbol', 'p1')
('symbol', '.'))
* set:
<baseset+ [8]>
8
$ unset HGPLAIN
$ unset HGPLAINEXCEPT
Patrick Mezard
revset: fix alias substitution recursion (issue3240)...
r16096 test alias recursion
$ try sincem
('symbol', 'sincem')
Yuya Nishihara
debugrevspec: show expanded/concatenated states before printing trees...
r28629 * expanded:
Patrick Mezard
debugrevspec: pretty print output...
r16218 (func
('symbol', 'descendants')
(func
('symbol', 'merge')
None))
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<addset+
<filteredset
Yuya Nishihara
revset: add inspection data to all filter() calls...
r28424 <fullreposet+ 0:9>,
<merge>>,
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 <generatorset+>>
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')))
Yuya Nishihara
debugrevspec: show expanded/concatenated states before printing trees...
r28629 * expanded:
Patrick Mezard
revset: fix infinite alias expansion detection...
r16772 (or
('symbol', '3')
(or
('symbol', '1')
('symbol', '2')))
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<addset
<baseset [3]>,
Yuya Nishihara
revset: optimize 'or' operation of trivial revisions to a list...
r25343 <baseset [1, 2]>>
Patrick Mezard
revset: fix infinite alias expansion detection...
r16772 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')))
Yuya Nishihara
debugrevspec: show expanded/concatenated states before printing trees...
r28629 * expanded:
Patrick Mezard
debugrevspec: pretty print output...
r16218 (func
('symbol', 'max')
(range
('symbol', '2')
('symbol', '5')))
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
Yuya Nishihara
revset: add inspection data to max() and min() functions...
r28427 <baseset
<max
<fullreposet+ 0:9>,
<spanset+ 2:5>>>
Patrick Mezard
revset: fix alias substitution recursion (issue3240)...
r16096 5
Yuya Nishihara
revset: reduce nesting of chained 'or' operations (issue4624)...
r25309 test chained `or` operations are flattened at parsing phase
$ echo 'chainedorops($1, $2, $3) = $1|$2|$3' >> .hg/hgrc
$ try 'chainedorops(0:1, 1:2, 2:3)'
(func
('symbol', 'chainedorops')
(list
Yuya Nishihara
revset: flatten chained 'list' operations (aka function args) (issue5072)...
r27987 (range
('symbol', '0')
('symbol', '1'))
(range
('symbol', '1')
('symbol', '2'))
Yuya Nishihara
revset: reduce nesting of chained 'or' operations (issue4624)...
r25309 (range
('symbol', '2')
('symbol', '3'))))
Yuya Nishihara
debugrevspec: show expanded/concatenated states before printing trees...
r28629 * expanded:
Yuya Nishihara
revset: reduce nesting of chained 'or' operations (issue4624)...
r25309 (or
(range
('symbol', '0')
('symbol', '1'))
(range
('symbol', '1')
('symbol', '2'))
(range
('symbol', '2')
('symbol', '3')))
* set:
<addset
<spanset+ 0:1>,
<addset
<spanset+ 1:2>,
<spanset+ 2:3>>>
0
1
2
3
Patrick Mezard
revset: fix alias substitution recursion (issue3240)...
r16096 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')))
Yuya Nishihara
debugrevspec: show expanded/concatenated states before printing trees...
r28629 * expanded:
Patrick Mezard
debugrevspec: pretty print output...
r16218 (func
('symbol', 'descendants')
(func
('symbol', 'max')
('string', '$1')))
Patrick Mezard
revset: fix alias substitution recursion (issue3240)...
r16096 abort: unknown revision '$1'!
[255]
Yuya Nishihara
revset: add test that should fail if '_aliasarg' tag is removed...
r28688 test scope of alias expansion: 'universe' is expanded prior to 'shadowall(0)',
but 'all()' should never be substituded to '0()'.
$ echo 'universe = all()' >> .hg/hgrc
$ echo 'shadowall(all) = all and universe' >> .hg/hgrc
$ try 'shadowall(0)'
(func
('symbol', 'shadowall')
('symbol', '0'))
* expanded:
(and
('symbol', '0')
(func
('symbol', 'all')
None))
* set:
<filteredset
<baseset [0]>,
<spanset+ 0:9>>
0
Yuya Nishihara
revset: drop redundant check for unknown alias arguments...
r28690 test unknown reference:
$ try "unknownref(0)" --config 'revsetalias.unknownref($1)=$1:$2'
(func
('symbol', 'unknownref')
('symbol', '0'))
Yuya Nishihara
parser: shorten prefix of alias parsing errors...
r29059 abort: bad definition of revset alias "unknownref": invalid symbol '$2'
Yuya Nishihara
revset: drop redundant check for unknown alias arguments...
r28690 [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')
Yuya Nishihara
parser: shorten prefix of alias parsing errors...
r29059 warning: bad definition of revset alias "anotherbadone": at 7: not a prefix: end
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<baseset [9]>
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
FUJIWARA Katsunori
revset: delay showing parse error for the revset alias until it is referred...
r23725 $ try 'tip'
('symbol', 'tip')
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<baseset [9]>
FUJIWARA Katsunori
revset: delay showing parse error for the revset alias until it is referred...
r23725 9
FUJIWARA Katsunori
revset: parse alias declaration strictly by _parsealiasdecl...
r23846
$ hg debugrevspec --debug --config revsetalias.'bad name'='tip' "tip"
('symbol', 'tip')
Yuya Nishihara
parser: shorten prefix of alias parsing errors...
r29059 warning: bad declaration of revset alias "bad name": at 4: invalid token
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<baseset [9]>
FUJIWARA Katsunori
revset: parse alias declaration strictly by _parsealiasdecl...
r23846 9
FUJIWARA Katsunori
revset: replace parsing alias definition by _parsealiasdefn to parse strictly...
r23994 $ echo 'strictreplacing($1, $10) = $10 or desc("$1")' >> .hg/hgrc
$ try 'strictreplacing("foo", tip)'
(func
('symbol', 'strictreplacing')
(list
('string', 'foo')
('symbol', 'tip')))
Yuya Nishihara
debugrevspec: show expanded/concatenated states before printing trees...
r28629 * expanded:
FUJIWARA Katsunori
revset: replace parsing alias definition by _parsealiasdefn to parse strictly...
r23994 (or
('symbol', 'tip')
(func
('symbol', 'desc')
('string', '$1')))
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<addset
<baseset [9]>,
<filteredset
Yuya Nishihara
revset: add inspection data to all filter() calls...
r28424 <fullreposet+ 0:9>,
<desc '$1'>>>
FUJIWARA Katsunori
revset: replace parsing alias definition by _parsealiasdefn to parse strictly...
r23994 9
FUJIWARA Katsunori
revset: parse alias declaration strictly by _parsealiasdecl...
r23846
Alexander Solovyov
revset aliases
r14098 $ try 'd(2:5)'
Patrick Mezard
debugrevspec: pretty print output...
r16218 (func
('symbol', 'd')
(range
('symbol', '2')
('symbol', '5')))
Yuya Nishihara
debugrevspec: show expanded/concatenated states before printing trees...
r28629 * expanded:
Patrick Mezard
debugrevspec: pretty print output...
r16218 (func
('symbol', 'reverse')
(func
('symbol', 'sort')
(list
(range
('symbol', '2')
('symbol', '5'))
('symbol', 'date'))))
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<baseset [4, 5, 3, 2]>
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')))
Yuya Nishihara
debugrevspec: show expanded/concatenated states before printing trees...
r28629 * expanded:
Patrick Mezard
debugrevspec: pretty print output...
r16218 (func
('symbol', 'reverse')
(func
('symbol', 'sort')
(list
(or
('symbol', '2')
('symbol', '3'))
('symbol', 'date'))))
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<baseset [3, 2]>
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
Yuya Nishihara
revset: flatten chained 'list' operations (aka function args) (issue5072)...
r27987 ('symbol', '2')
('symbol', 'data')
Patrick Mezard
debugrevspec: pretty print output...
r16218 ('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
Yuya Nishihara
revset: flatten chained 'list' operations (aka function args) (issue5072)...
r27987 (or
('symbol', '2')
('symbol', '3'))
('symbol', 'x')
('symbol', 'x')
Patrick Mezard
debugrevspec: pretty print output...
r16218 ('symbol', 'date')))
Yuya Nishihara
debugrevspec: show expanded/concatenated states before printing trees...
r28629 * expanded:
Patrick Mezard
debugrevspec: pretty print output...
r16218 (func
('symbol', 'reverse')
(func
('symbol', 'sort')
(list
(or
('symbol', '2')
('symbol', '3'))
('symbol', 'date'))))
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<baseset [3, 2]>
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
Jordi Gutiérrez Hermoso
revrange: don't parse revset aliases as hash prefixes (issue4553)...
r24175 issue4553: check that revset aliases override existing hash prefix
$ hg log -qr e
6:e0cc66ef77e8
$ hg log -qr e --config revsetalias.e="all()"
0:2785f51eece5
1:d75937da8da0
2:5ed5505e9f1c
3:8528aa5637f2
4:2326846efdab
5:904fa392b941
6:e0cc66ef77e8
7:013af1973af4
8:d5d0dcbdc4d9
9:24286f4ae135
$ hg log -qr e: --config revsetalias.e="0"
0:2785f51eece5
1:d75937da8da0
2:5ed5505e9f1c
3:8528aa5637f2
4:2326846efdab
5:904fa392b941
6:e0cc66ef77e8
7:013af1973af4
8:d5d0dcbdc4d9
9:24286f4ae135
$ hg log -qr :e --config revsetalias.e="9"
0:2785f51eece5
1:d75937da8da0
2:5ed5505e9f1c
3:8528aa5637f2
4:2326846efdab
5:904fa392b941
6:e0cc66ef77e8
7:013af1973af4
8:d5d0dcbdc4d9
9:24286f4ae135
$ hg log -qr e:
6:e0cc66ef77e8
7:013af1973af4
8:d5d0dcbdc4d9
9:24286f4ae135
$ hg log -qr :e
0:2785f51eece5
1:d75937da8da0
2:5ed5505e9f1c
3:8528aa5637f2
4:2326846efdab
5:904fa392b941
6:e0cc66ef77e8
Mads Kiilerich
revset: avoid over-aggresive optimizations of non-filtering functions (issue2549)...
r14153 issue2549 - correct optimizations
Yuya Nishihara
revset: add inspection data to limit() and last() functions...
r28426 $ try 'limit(1 or 2 or 3, 2) and not 2'
(and
(func
('symbol', 'limit')
(list
(or
('symbol', '1')
('symbol', '2')
('symbol', '3'))
('symbol', '2')))
(not
('symbol', '2')))
* set:
<filteredset
<baseset
<limit n=2, offset=0,
<fullreposet+ 0:9>,
<baseset [1, 2, 3]>>>,
<not
<baseset [2]>>>
Mads Kiilerich
revset: avoid over-aggresive optimizations of non-filtering functions (issue2549)...
r14153 1
Yuya Nishihara
revset: add inspection data to max() and min() functions...
r28427 $ try 'max(1 or 2) and not 2'
(and
(func
('symbol', 'max')
(or
('symbol', '1')
('symbol', '2')))
(not
('symbol', '2')))
* set:
<filteredset
<baseset
<max
<fullreposet+ 0:9>,
<baseset [1, 2]>>>,
<not
<baseset [2]>>>
$ try 'min(1 or 2) and not 1'
(and
(func
('symbol', 'min')
(or
('symbol', '1')
('symbol', '2')))
(not
('symbol', '1')))
* set:
<filteredset
<baseset
<min
<fullreposet+ 0:9>,
<baseset [1, 2]>>>,
<not
<baseset [1]>>>
Yuya Nishihara
revset: add inspection data to limit() and last() functions...
r28426 $ try 'last(1 or 2, 1) and not 2'
(and
(func
('symbol', 'last')
(list
(or
('symbol', '1')
('symbol', '2'))
('symbol', '1')))
(not
('symbol', '2')))
* set:
<filteredset
<baseset
<last n=1,
<fullreposet+ 0:9>,
<baseset [2, 1]>>>,
<not
<baseset [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'))
Yuya Nishihara
debugrevspec: show expanded/concatenated states before printing trees...
r28629 * concatenated:
FUJIWARA Katsunori
revset: introduce new operator "##" to concatenate strings/symbols at runtime...
r23742 ('string', '2785f51eece5')
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<baseset [0]>
FUJIWARA Katsunori
revset: introduce new operator "##" to concatenate strings/symbols at runtime...
r23742 0
$ echo 'cat4($1, $2, $3, $4) = $1 ## $2 ## $3 ## $4' >> .hg/hgrc
$ try "cat4(278, '5f5', 1ee, 'ce5')"
(func
('symbol', 'cat4')
(list
Yuya Nishihara
revset: flatten chained 'list' operations (aka function args) (issue5072)...
r27987 ('symbol', '278')
('string', '5f5')
('symbol', '1ee')
FUJIWARA Katsunori
revset: introduce new operator "##" to concatenate strings/symbols at runtime...
r23742 ('string', 'ce5')))
Yuya Nishihara
debugrevspec: show expanded/concatenated states before printing trees...
r28629 * expanded:
FUJIWARA Katsunori
revset: introduce new operator "##" to concatenate strings/symbols at runtime...
r23742 (_concat
(_concat
(_concat
('symbol', '278')
('string', '5f5'))
('symbol', '1ee'))
('string', 'ce5'))
Yuya Nishihara
debugrevspec: show expanded/concatenated states before printing trees...
r28629 * concatenated:
FUJIWARA Katsunori
revset: introduce new operator "##" to concatenate strings/symbols at runtime...
r23742 ('string', '2785f51eece5')
Yuya Nishihara
debugrevspec: show nesting structure of smartsets if verbose...
r24458 * set:
<baseset [0]>
FUJIWARA Katsunori
revset: introduce new operator "##" to concatenate strings/symbols at runtime...
r23742 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 ..
Yuya Nishihara
revset: drop magic of fullreposet membership test (issue4682)...
r25265 prepare repository that has "default" branches of multiple roots
$ hg init namedbranch
$ cd namedbranch
$ echo default0 >> a
$ hg ci -Aqm0
$ echo default1 >> a
$ hg ci -m1
$ hg branch -q stable
$ echo stable2 >> a
$ hg ci -m2
$ echo stable3 >> a
$ hg ci -m3
$ hg update -q null
$ echo default4 >> a
$ hg ci -Aqm4
$ echo default5 >> a
$ hg ci -m5
Yuya Nishihara
revbranchcache: return uncached branchinfo for nullrev (issue4683)...
r25266 "null" revision belongs to "default" branch (issue4683)
$ log 'branch(null)'
0
1
4
5
Yuya Nishihara
revset: drop magic of fullreposet membership test (issue4682)...
r25265 "null" revision belongs to "default" branch, but it shouldn't appear in set
unless explicitly specified (issue4682)
$ log 'children(branch(default))'
1
2
5
$ cd ..
FUJIWARA Katsunori
i18n: use "encoding.lower()" to normalize specified string for revset...
r15726 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
Ryan McElroy
revsets: show current revset abort behavior
r24707 test error message of bad revset
$ hg log -r 'foo\\'
Ryan McElroy
revsets: more informative syntax error message...
r24708 hg: parse error at 3: syntax error in revset 'foo\\'
Ryan McElroy
revsets: show current revset abort behavior
r24707 [255]
FUJIWARA Katsunori
i18n: use "encoding.lower()" to normalize specified string for revset...
r15726 $ cd ..
FUJIWARA Katsunori
revset: use delayregistrar to register predicate in extension easily...
r27586
FUJIWARA Katsunori
revset: replace extpredicate by revsetpredicate of registrar...
r28394 Test that revset predicate of extension isn't loaded at failure of
loading it
FUJIWARA Katsunori
revset: use delayregistrar to register predicate in extension easily...
r27586
$ cd repo
$ cat <<EOF > $TESTTMP/custompredicate.py
FUJIWARA Katsunori
revset: replace extpredicate by revsetpredicate of registrar...
r28394 > from mercurial import error, registrar, revset
FUJIWARA Katsunori
revset: use delayregistrar to register predicate in extension easily...
r27586 >
FUJIWARA Katsunori
revset: replace extpredicate by revsetpredicate of registrar...
r28394 > revsetpredicate = registrar.revsetpredicate()
FUJIWARA Katsunori
revset: use delayregistrar to register predicate in extension easily...
r27586 >
> @revsetpredicate('custom1()')
> def custom1(repo, subset, x):
> return revset.baseset([1])
>
FUJIWARA Katsunori
revset: replace extpredicate by revsetpredicate of registrar...
r28394 > raise error.Abort('intentional failure of loading extension')
FUJIWARA Katsunori
revset: use delayregistrar to register predicate in extension easily...
r27586 > EOF
$ cat <<EOF > .hg/hgrc
> [extensions]
> custompredicate = $TESTTMP/custompredicate.py
> EOF
$ hg debugrevspec "custom1()"
FUJIWARA Katsunori
revset: replace extpredicate by revsetpredicate of registrar...
r28394 *** failed to import extension custompredicate from $TESTTMP/custompredicate.py: intentional failure of loading extension
FUJIWARA Katsunori
revset: use delayregistrar to register predicate in extension easily...
r27586 hg: parse error: unknown identifier: custom1
[255]
$ cd ..