##// END OF EJS Templates
test-revset: make it work with chg...
Jun Wu -
r33870:63773d74 default
parent child Browse files
Show More
@@ -1,4513 +1,4516 b''
1 $ HGENCODING=utf-8
1 $ HGENCODING=utf-8
2 $ export HGENCODING
2 $ export HGENCODING
3 $ cat > testrevset.py << EOF
3 $ cat > testrevset.py << EOF
4 > import mercurial.revset
4 > import mercurial.revset
5 >
5 >
6 > baseset = mercurial.revset.baseset
6 > baseset = mercurial.revset.baseset
7 >
7 >
8 > def r3232(repo, subset, x):
8 > def r3232(repo, subset, x):
9 > """"simple revset that return [3,2,3,2]
9 > """"simple revset that return [3,2,3,2]
10 >
10 >
11 > revisions duplicated on purpose.
11 > revisions duplicated on purpose.
12 > """
12 > """
13 > if 3 not in subset:
13 > if 3 not in subset:
14 > if 2 in subset:
14 > if 2 in subset:
15 > return baseset([2,2])
15 > return baseset([2,2])
16 > return baseset()
16 > return baseset()
17 > return baseset([3,3,2,2])
17 > return baseset([3,3,2,2])
18 >
18 >
19 > mercurial.revset.symbols['r3232'] = r3232
19 > mercurial.revset.symbols['r3232'] = r3232
20 > EOF
20 > EOF
21 $ cat >> $HGRCPATH << EOF
21 $ cat >> $HGRCPATH << EOF
22 > [extensions]
22 > [extensions]
23 > drawdag=$TESTDIR/drawdag.py
23 > drawdag=$TESTDIR/drawdag.py
24 > testrevset=$TESTTMP/testrevset.py
24 > testrevset=$TESTTMP/testrevset.py
25 > EOF
25 > EOF
26
26
27 $ try() {
27 $ try() {
28 > hg debugrevspec --debug "$@"
28 > hg debugrevspec --debug "$@"
29 > }
29 > }
30
30
31 $ log() {
31 $ log() {
32 > hg log --template '{rev}\n' -r "$1"
32 > hg log --template '{rev}\n' -r "$1"
33 > }
33 > }
34
34
35 extension to build '_intlist()' and '_hexlist()', which is necessary because
35 extension to build '_intlist()' and '_hexlist()', which is necessary because
36 these predicates use '\0' as a separator:
36 these predicates use '\0' as a separator:
37
37
38 $ cat <<EOF > debugrevlistspec.py
38 $ cat <<EOF > debugrevlistspec.py
39 > from __future__ import absolute_import
39 > from __future__ import absolute_import
40 > from mercurial import (
40 > from mercurial import (
41 > node as nodemod,
41 > node as nodemod,
42 > registrar,
42 > registrar,
43 > revset,
43 > revset,
44 > revsetlang,
44 > revsetlang,
45 > smartset,
45 > smartset,
46 > )
46 > )
47 > cmdtable = {}
47 > cmdtable = {}
48 > command = registrar.command(cmdtable)
48 > command = registrar.command(cmdtable)
49 > @command(b'debugrevlistspec',
49 > @command(b'debugrevlistspec',
50 > [('', 'optimize', None, 'print parsed tree after optimizing'),
50 > [('', 'optimize', None, 'print parsed tree after optimizing'),
51 > ('', 'bin', None, 'unhexlify arguments')])
51 > ('', 'bin', None, 'unhexlify arguments')])
52 > def debugrevlistspec(ui, repo, fmt, *args, **opts):
52 > def debugrevlistspec(ui, repo, fmt, *args, **opts):
53 > if opts['bin']:
53 > if opts['bin']:
54 > args = map(nodemod.bin, args)
54 > args = map(nodemod.bin, args)
55 > expr = revsetlang.formatspec(fmt, list(args))
55 > expr = revsetlang.formatspec(fmt, list(args))
56 > if ui.verbose:
56 > if ui.verbose:
57 > tree = revsetlang.parse(expr, lookup=repo.__contains__)
57 > tree = revsetlang.parse(expr, lookup=repo.__contains__)
58 > ui.note(revsetlang.prettyformat(tree), "\n")
58 > ui.note(revsetlang.prettyformat(tree), "\n")
59 > if opts["optimize"]:
59 > if opts["optimize"]:
60 > opttree = revsetlang.optimize(revsetlang.analyze(tree))
60 > opttree = revsetlang.optimize(revsetlang.analyze(tree))
61 > ui.note("* optimized:\n", revsetlang.prettyformat(opttree),
61 > ui.note("* optimized:\n", revsetlang.prettyformat(opttree),
62 > "\n")
62 > "\n")
63 > func = revset.match(ui, expr, repo)
63 > func = revset.match(ui, expr, repo)
64 > revs = func(repo)
64 > revs = func(repo)
65 > if ui.verbose:
65 > if ui.verbose:
66 > ui.note("* set:\n", smartset.prettyformat(revs), "\n")
66 > ui.note("* set:\n", smartset.prettyformat(revs), "\n")
67 > for c in revs:
67 > for c in revs:
68 > ui.write("%s\n" % c)
68 > ui.write("%s\n" % c)
69 > EOF
69 > EOF
70 $ cat <<EOF >> $HGRCPATH
70 $ cat <<EOF >> $HGRCPATH
71 > [extensions]
71 > [extensions]
72 > debugrevlistspec = $TESTTMP/debugrevlistspec.py
72 > debugrevlistspec = $TESTTMP/debugrevlistspec.py
73 > EOF
73 > EOF
74 $ trylist() {
74 $ trylist() {
75 > hg debugrevlistspec --debug "$@"
75 > hg debugrevlistspec --debug "$@"
76 > }
76 > }
77
77
78 $ hg init repo
78 $ hg init repo
79 $ cd repo
79 $ cd repo
80
80
81 $ echo a > a
81 $ echo a > a
82 $ hg branch a
82 $ hg branch a
83 marked working directory as branch a
83 marked working directory as branch a
84 (branches are permanent and global, did you want a bookmark?)
84 (branches are permanent and global, did you want a bookmark?)
85 $ hg ci -Aqm0
85 $ hg ci -Aqm0
86
86
87 $ echo b > b
87 $ echo b > b
88 $ hg branch b
88 $ hg branch b
89 marked working directory as branch b
89 marked working directory as branch b
90 $ hg ci -Aqm1
90 $ hg ci -Aqm1
91
91
92 $ rm a
92 $ rm a
93 $ hg branch a-b-c-
93 $ hg branch a-b-c-
94 marked working directory as branch a-b-c-
94 marked working directory as branch a-b-c-
95 $ hg ci -Aqm2 -u Bob
95 $ hg ci -Aqm2 -u Bob
96
96
97 $ hg log -r "extra('branch', 'a-b-c-')" --template '{rev}\n'
97 $ hg log -r "extra('branch', 'a-b-c-')" --template '{rev}\n'
98 2
98 2
99 $ hg log -r "extra('branch')" --template '{rev}\n'
99 $ hg log -r "extra('branch')" --template '{rev}\n'
100 0
100 0
101 1
101 1
102 2
102 2
103 $ hg log -r "extra('branch', 're:a')" --template '{rev} {branch}\n'
103 $ hg log -r "extra('branch', 're:a')" --template '{rev} {branch}\n'
104 0 a
104 0 a
105 2 a-b-c-
105 2 a-b-c-
106
106
107 $ hg co 1
107 $ hg co 1
108 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
108 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
109 $ hg branch +a+b+c+
109 $ hg branch +a+b+c+
110 marked working directory as branch +a+b+c+
110 marked working directory as branch +a+b+c+
111 $ hg ci -Aqm3
111 $ hg ci -Aqm3
112
112
113 $ hg co 2 # interleave
113 $ hg co 2 # interleave
114 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
114 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
115 $ echo bb > b
115 $ echo bb > b
116 $ hg branch -- -a-b-c-
116 $ hg branch -- -a-b-c-
117 marked working directory as branch -a-b-c-
117 marked working directory as branch -a-b-c-
118 $ hg ci -Aqm4 -d "May 12 2005"
118 $ hg ci -Aqm4 -d "May 12 2005"
119
119
120 $ hg co 3
120 $ hg co 3
121 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
121 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
122 $ hg branch !a/b/c/
122 $ hg branch !a/b/c/
123 marked working directory as branch !a/b/c/
123 marked working directory as branch !a/b/c/
124 $ hg ci -Aqm"5 bug"
124 $ hg ci -Aqm"5 bug"
125
125
126 $ hg merge 4
126 $ hg merge 4
127 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
127 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
128 (branch merge, don't forget to commit)
128 (branch merge, don't forget to commit)
129 $ hg branch _a_b_c_
129 $ hg branch _a_b_c_
130 marked working directory as branch _a_b_c_
130 marked working directory as branch _a_b_c_
131 $ hg ci -Aqm"6 issue619"
131 $ hg ci -Aqm"6 issue619"
132
132
133 $ hg branch .a.b.c.
133 $ hg branch .a.b.c.
134 marked working directory as branch .a.b.c.
134 marked working directory as branch .a.b.c.
135 $ hg ci -Aqm7
135 $ hg ci -Aqm7
136
136
137 $ hg branch all
137 $ hg branch all
138 marked working directory as branch all
138 marked working directory as branch all
139
139
140 $ hg co 4
140 $ hg co 4
141 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
141 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
142 $ hg branch Γ©
142 $ hg branch Γ©
143 marked working directory as branch \xc3\xa9 (esc)
143 marked working directory as branch \xc3\xa9 (esc)
144 $ hg ci -Aqm9
144 $ hg ci -Aqm9
145
145
146 $ hg tag -r6 1.0
146 $ hg tag -r6 1.0
147 $ hg bookmark -r6 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
147 $ hg bookmark -r6 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
148
148
149 $ hg clone --quiet -U -r 7 . ../remote1
149 $ hg clone --quiet -U -r 7 . ../remote1
150 $ hg clone --quiet -U -r 8 . ../remote2
150 $ hg clone --quiet -U -r 8 . ../remote2
151 $ echo "[paths]" >> .hg/hgrc
151 $ echo "[paths]" >> .hg/hgrc
152 $ echo "default = ../remote1" >> .hg/hgrc
152 $ echo "default = ../remote1" >> .hg/hgrc
153
153
154 trivial
154 trivial
155
155
156 $ try 0:1
156 $ try 0:1
157 (range
157 (range
158 ('symbol', '0')
158 ('symbol', '0')
159 ('symbol', '1'))
159 ('symbol', '1'))
160 * set:
160 * set:
161 <spanset+ 0:2>
161 <spanset+ 0:2>
162 0
162 0
163 1
163 1
164 $ try --optimize :
164 $ try --optimize :
165 (rangeall
165 (rangeall
166 None)
166 None)
167 * optimized:
167 * optimized:
168 (rangeall
168 (rangeall
169 None
169 None
170 define)
170 define)
171 * set:
171 * set:
172 <spanset+ 0:10>
172 <spanset+ 0:10>
173 0
173 0
174 1
174 1
175 2
175 2
176 3
176 3
177 4
177 4
178 5
178 5
179 6
179 6
180 7
180 7
181 8
181 8
182 9
182 9
183 $ try 3::6
183 $ try 3::6
184 (dagrange
184 (dagrange
185 ('symbol', '3')
185 ('symbol', '3')
186 ('symbol', '6'))
186 ('symbol', '6'))
187 * set:
187 * set:
188 <baseset+ [3, 5, 6]>
188 <baseset+ [3, 5, 6]>
189 3
189 3
190 5
190 5
191 6
191 6
192 $ try '0|1|2'
192 $ try '0|1|2'
193 (or
193 (or
194 (list
194 (list
195 ('symbol', '0')
195 ('symbol', '0')
196 ('symbol', '1')
196 ('symbol', '1')
197 ('symbol', '2')))
197 ('symbol', '2')))
198 * set:
198 * set:
199 <baseset [0, 1, 2]>
199 <baseset [0, 1, 2]>
200 0
200 0
201 1
201 1
202 2
202 2
203
203
204 names that should work without quoting
204 names that should work without quoting
205
205
206 $ try a
206 $ try a
207 ('symbol', 'a')
207 ('symbol', 'a')
208 * set:
208 * set:
209 <baseset [0]>
209 <baseset [0]>
210 0
210 0
211 $ try b-a
211 $ try b-a
212 (minus
212 (minus
213 ('symbol', 'b')
213 ('symbol', 'b')
214 ('symbol', 'a'))
214 ('symbol', 'a'))
215 * set:
215 * set:
216 <filteredset
216 <filteredset
217 <baseset [1]>,
217 <baseset [1]>,
218 <not
218 <not
219 <baseset [0]>>>
219 <baseset [0]>>>
220 1
220 1
221 $ try _a_b_c_
221 $ try _a_b_c_
222 ('symbol', '_a_b_c_')
222 ('symbol', '_a_b_c_')
223 * set:
223 * set:
224 <baseset [6]>
224 <baseset [6]>
225 6
225 6
226 $ try _a_b_c_-a
226 $ try _a_b_c_-a
227 (minus
227 (minus
228 ('symbol', '_a_b_c_')
228 ('symbol', '_a_b_c_')
229 ('symbol', 'a'))
229 ('symbol', 'a'))
230 * set:
230 * set:
231 <filteredset
231 <filteredset
232 <baseset [6]>,
232 <baseset [6]>,
233 <not
233 <not
234 <baseset [0]>>>
234 <baseset [0]>>>
235 6
235 6
236 $ try .a.b.c.
236 $ try .a.b.c.
237 ('symbol', '.a.b.c.')
237 ('symbol', '.a.b.c.')
238 * set:
238 * set:
239 <baseset [7]>
239 <baseset [7]>
240 7
240 7
241 $ try .a.b.c.-a
241 $ try .a.b.c.-a
242 (minus
242 (minus
243 ('symbol', '.a.b.c.')
243 ('symbol', '.a.b.c.')
244 ('symbol', 'a'))
244 ('symbol', 'a'))
245 * set:
245 * set:
246 <filteredset
246 <filteredset
247 <baseset [7]>,
247 <baseset [7]>,
248 <not
248 <not
249 <baseset [0]>>>
249 <baseset [0]>>>
250 7
250 7
251
251
252 names that should be caught by fallback mechanism
252 names that should be caught by fallback mechanism
253
253
254 $ try -- '-a-b-c-'
254 $ try -- '-a-b-c-'
255 ('symbol', '-a-b-c-')
255 ('symbol', '-a-b-c-')
256 * set:
256 * set:
257 <baseset [4]>
257 <baseset [4]>
258 4
258 4
259 $ log -a-b-c-
259 $ log -a-b-c-
260 4
260 4
261 $ try '+a+b+c+'
261 $ try '+a+b+c+'
262 ('symbol', '+a+b+c+')
262 ('symbol', '+a+b+c+')
263 * set:
263 * set:
264 <baseset [3]>
264 <baseset [3]>
265 3
265 3
266 $ try '+a+b+c+:'
266 $ try '+a+b+c+:'
267 (rangepost
267 (rangepost
268 ('symbol', '+a+b+c+'))
268 ('symbol', '+a+b+c+'))
269 * set:
269 * set:
270 <spanset+ 3:10>
270 <spanset+ 3:10>
271 3
271 3
272 4
272 4
273 5
273 5
274 6
274 6
275 7
275 7
276 8
276 8
277 9
277 9
278 $ try ':+a+b+c+'
278 $ try ':+a+b+c+'
279 (rangepre
279 (rangepre
280 ('symbol', '+a+b+c+'))
280 ('symbol', '+a+b+c+'))
281 * set:
281 * set:
282 <spanset+ 0:4>
282 <spanset+ 0:4>
283 0
283 0
284 1
284 1
285 2
285 2
286 3
286 3
287 $ try -- '-a-b-c-:+a+b+c+'
287 $ try -- '-a-b-c-:+a+b+c+'
288 (range
288 (range
289 ('symbol', '-a-b-c-')
289 ('symbol', '-a-b-c-')
290 ('symbol', '+a+b+c+'))
290 ('symbol', '+a+b+c+'))
291 * set:
291 * set:
292 <spanset- 3:5>
292 <spanset- 3:5>
293 4
293 4
294 3
294 3
295 $ log '-a-b-c-:+a+b+c+'
295 $ log '-a-b-c-:+a+b+c+'
296 4
296 4
297 3
297 3
298
298
299 $ try -- -a-b-c--a # complains
299 $ try -- -a-b-c--a # complains
300 (minus
300 (minus
301 (minus
301 (minus
302 (minus
302 (minus
303 (negate
303 (negate
304 ('symbol', 'a'))
304 ('symbol', 'a'))
305 ('symbol', 'b'))
305 ('symbol', 'b'))
306 ('symbol', 'c'))
306 ('symbol', 'c'))
307 (negate
307 (negate
308 ('symbol', 'a')))
308 ('symbol', 'a')))
309 abort: unknown revision '-a'!
309 abort: unknown revision '-a'!
310 [255]
310 [255]
311 $ try Γ©
311 $ try Γ©
312 ('symbol', '\xc3\xa9')
312 ('symbol', '\xc3\xa9')
313 * set:
313 * set:
314 <baseset [9]>
314 <baseset [9]>
315 9
315 9
316
316
317 no quoting needed
317 no quoting needed
318
318
319 $ log ::a-b-c-
319 $ log ::a-b-c-
320 0
320 0
321 1
321 1
322 2
322 2
323
323
324 quoting needed
324 quoting needed
325
325
326 $ try '"-a-b-c-"-a'
326 $ try '"-a-b-c-"-a'
327 (minus
327 (minus
328 ('string', '-a-b-c-')
328 ('string', '-a-b-c-')
329 ('symbol', 'a'))
329 ('symbol', 'a'))
330 * set:
330 * set:
331 <filteredset
331 <filteredset
332 <baseset [4]>,
332 <baseset [4]>,
333 <not
333 <not
334 <baseset [0]>>>
334 <baseset [0]>>>
335 4
335 4
336
336
337 $ log '1 or 2'
337 $ log '1 or 2'
338 1
338 1
339 2
339 2
340 $ log '1|2'
340 $ log '1|2'
341 1
341 1
342 2
342 2
343 $ log '1 and 2'
343 $ log '1 and 2'
344 $ log '1&2'
344 $ log '1&2'
345 $ try '1&2|3' # precedence - and is higher
345 $ try '1&2|3' # precedence - and is higher
346 (or
346 (or
347 (list
347 (list
348 (and
348 (and
349 ('symbol', '1')
349 ('symbol', '1')
350 ('symbol', '2'))
350 ('symbol', '2'))
351 ('symbol', '3')))
351 ('symbol', '3')))
352 * set:
352 * set:
353 <addset
353 <addset
354 <baseset []>,
354 <baseset []>,
355 <baseset [3]>>
355 <baseset [3]>>
356 3
356 3
357 $ try '1|2&3'
357 $ try '1|2&3'
358 (or
358 (or
359 (list
359 (list
360 ('symbol', '1')
360 ('symbol', '1')
361 (and
361 (and
362 ('symbol', '2')
362 ('symbol', '2')
363 ('symbol', '3'))))
363 ('symbol', '3'))))
364 * set:
364 * set:
365 <addset
365 <addset
366 <baseset [1]>,
366 <baseset [1]>,
367 <baseset []>>
367 <baseset []>>
368 1
368 1
369 $ try '1&2&3' # associativity
369 $ try '1&2&3' # associativity
370 (and
370 (and
371 (and
371 (and
372 ('symbol', '1')
372 ('symbol', '1')
373 ('symbol', '2'))
373 ('symbol', '2'))
374 ('symbol', '3'))
374 ('symbol', '3'))
375 * set:
375 * set:
376 <baseset []>
376 <baseset []>
377 $ try '1|(2|3)'
377 $ try '1|(2|3)'
378 (or
378 (or
379 (list
379 (list
380 ('symbol', '1')
380 ('symbol', '1')
381 (group
381 (group
382 (or
382 (or
383 (list
383 (list
384 ('symbol', '2')
384 ('symbol', '2')
385 ('symbol', '3'))))))
385 ('symbol', '3'))))))
386 * set:
386 * set:
387 <addset
387 <addset
388 <baseset [1]>,
388 <baseset [1]>,
389 <baseset [2, 3]>>
389 <baseset [2, 3]>>
390 1
390 1
391 2
391 2
392 3
392 3
393 $ log '1.0' # tag
393 $ log '1.0' # tag
394 6
394 6
395 $ log 'a' # branch
395 $ log 'a' # branch
396 0
396 0
397 $ log '2785f51ee'
397 $ log '2785f51ee'
398 0
398 0
399 $ log 'date(2005)'
399 $ log 'date(2005)'
400 4
400 4
401 $ log 'date(this is a test)'
401 $ log 'date(this is a test)'
402 hg: parse error at 10: unexpected token: symbol
402 hg: parse error at 10: unexpected token: symbol
403 [255]
403 [255]
404 $ log 'date()'
404 $ log 'date()'
405 hg: parse error: date requires a string
405 hg: parse error: date requires a string
406 [255]
406 [255]
407 $ log 'date'
407 $ log 'date'
408 abort: unknown revision 'date'!
408 abort: unknown revision 'date'!
409 [255]
409 [255]
410 $ log 'date('
410 $ log 'date('
411 hg: parse error at 5: not a prefix: end
411 hg: parse error at 5: not a prefix: end
412 [255]
412 [255]
413 $ log 'date("\xy")'
413 $ log 'date("\xy")'
414 hg: parse error: invalid \x escape
414 hg: parse error: invalid \x escape
415 [255]
415 [255]
416 $ log 'date(tip)'
416 $ log 'date(tip)'
417 hg: parse error: invalid date: 'tip'
417 hg: parse error: invalid date: 'tip'
418 [255]
418 [255]
419 $ log '0:date'
419 $ log '0:date'
420 abort: unknown revision 'date'!
420 abort: unknown revision 'date'!
421 [255]
421 [255]
422 $ log '::"date"'
422 $ log '::"date"'
423 abort: unknown revision 'date'!
423 abort: unknown revision 'date'!
424 [255]
424 [255]
425 $ hg book date -r 4
425 $ hg book date -r 4
426 $ log '0:date'
426 $ log '0:date'
427 0
427 0
428 1
428 1
429 2
429 2
430 3
430 3
431 4
431 4
432 $ log '::date'
432 $ log '::date'
433 0
433 0
434 1
434 1
435 2
435 2
436 4
436 4
437 $ log '::"date"'
437 $ log '::"date"'
438 0
438 0
439 1
439 1
440 2
440 2
441 4
441 4
442 $ log 'date(2005) and 1::'
442 $ log 'date(2005) and 1::'
443 4
443 4
444 $ hg book -d date
444 $ hg book -d date
445
445
446 function name should be a symbol
446 function name should be a symbol
447
447
448 $ log '"date"(2005)'
448 $ log '"date"(2005)'
449 hg: parse error: not a symbol
449 hg: parse error: not a symbol
450 [255]
450 [255]
451
451
452 keyword arguments
452 keyword arguments
453
453
454 $ log 'extra(branch, value=a)'
454 $ log 'extra(branch, value=a)'
455 0
455 0
456
456
457 $ log 'extra(branch, a, b)'
457 $ log 'extra(branch, a, b)'
458 hg: parse error: extra takes at most 2 positional arguments
458 hg: parse error: extra takes at most 2 positional arguments
459 [255]
459 [255]
460 $ log 'extra(a, label=b)'
460 $ log 'extra(a, label=b)'
461 hg: parse error: extra got multiple values for keyword argument 'label'
461 hg: parse error: extra got multiple values for keyword argument 'label'
462 [255]
462 [255]
463 $ log 'extra(label=branch, default)'
463 $ log 'extra(label=branch, default)'
464 hg: parse error: extra got an invalid argument
464 hg: parse error: extra got an invalid argument
465 [255]
465 [255]
466 $ log 'extra(branch, foo+bar=baz)'
466 $ log 'extra(branch, foo+bar=baz)'
467 hg: parse error: extra got an invalid argument
467 hg: parse error: extra got an invalid argument
468 [255]
468 [255]
469 $ log 'extra(unknown=branch)'
469 $ log 'extra(unknown=branch)'
470 hg: parse error: extra got an unexpected keyword argument 'unknown'
470 hg: parse error: extra got an unexpected keyword argument 'unknown'
471 [255]
471 [255]
472
472
473 $ try 'foo=bar|baz'
473 $ try 'foo=bar|baz'
474 (keyvalue
474 (keyvalue
475 ('symbol', 'foo')
475 ('symbol', 'foo')
476 (or
476 (or
477 (list
477 (list
478 ('symbol', 'bar')
478 ('symbol', 'bar')
479 ('symbol', 'baz'))))
479 ('symbol', 'baz'))))
480 hg: parse error: can't use a key-value pair in this context
480 hg: parse error: can't use a key-value pair in this context
481 [255]
481 [255]
482
482
483 right-hand side should be optimized recursively
483 right-hand side should be optimized recursively
484
484
485 $ try --optimize 'foo=(not public())'
485 $ try --optimize 'foo=(not public())'
486 (keyvalue
486 (keyvalue
487 ('symbol', 'foo')
487 ('symbol', 'foo')
488 (group
488 (group
489 (not
489 (not
490 (func
490 (func
491 ('symbol', 'public')
491 ('symbol', 'public')
492 None))))
492 None))))
493 * optimized:
493 * optimized:
494 (keyvalue
494 (keyvalue
495 ('symbol', 'foo')
495 ('symbol', 'foo')
496 (func
496 (func
497 ('symbol', '_notpublic')
497 ('symbol', '_notpublic')
498 None
498 None
499 any))
499 any))
500 hg: parse error: can't use a key-value pair in this context
500 hg: parse error: can't use a key-value pair in this context
501 [255]
501 [255]
502
502
503 relation-subscript operator has the highest binding strength (as function call):
503 relation-subscript operator has the highest binding strength (as function call):
504
504
505 $ hg debugrevspec -p parsed 'tip:tip^#generations[-1]'
505 $ hg debugrevspec -p parsed 'tip:tip^#generations[-1]'
506 * parsed:
506 * parsed:
507 (range
507 (range
508 ('symbol', 'tip')
508 ('symbol', 'tip')
509 (relsubscript
509 (relsubscript
510 (parentpost
510 (parentpost
511 ('symbol', 'tip'))
511 ('symbol', 'tip'))
512 ('symbol', 'generations')
512 ('symbol', 'generations')
513 (negate
513 (negate
514 ('symbol', '1'))))
514 ('symbol', '1'))))
515 9
515 9
516 8
516 8
517 7
517 7
518 6
518 6
519 5
519 5
520 4
520 4
521
521
522 $ hg debugrevspec -p parsed --no-show-revs 'not public()#generations[0]'
522 $ hg debugrevspec -p parsed --no-show-revs 'not public()#generations[0]'
523 * parsed:
523 * parsed:
524 (not
524 (not
525 (relsubscript
525 (relsubscript
526 (func
526 (func
527 ('symbol', 'public')
527 ('symbol', 'public')
528 None)
528 None)
529 ('symbol', 'generations')
529 ('symbol', 'generations')
530 ('symbol', '0')))
530 ('symbol', '0')))
531
531
532 left-hand side of relation-subscript operator should be optimized recursively:
532 left-hand side of relation-subscript operator should be optimized recursively:
533
533
534 $ hg debugrevspec -p analyzed -p optimized --no-show-revs \
534 $ hg debugrevspec -p analyzed -p optimized --no-show-revs \
535 > '(not public())#generations[0]'
535 > '(not public())#generations[0]'
536 * analyzed:
536 * analyzed:
537 (relsubscript
537 (relsubscript
538 (not
538 (not
539 (func
539 (func
540 ('symbol', 'public')
540 ('symbol', 'public')
541 None
541 None
542 any)
542 any)
543 define)
543 define)
544 ('symbol', 'generations')
544 ('symbol', 'generations')
545 ('symbol', '0')
545 ('symbol', '0')
546 define)
546 define)
547 * optimized:
547 * optimized:
548 (relsubscript
548 (relsubscript
549 (func
549 (func
550 ('symbol', '_notpublic')
550 ('symbol', '_notpublic')
551 None
551 None
552 any)
552 any)
553 ('symbol', 'generations')
553 ('symbol', 'generations')
554 ('symbol', '0')
554 ('symbol', '0')
555 define)
555 define)
556
556
557 resolution of subscript and relation-subscript ternary operators:
557 resolution of subscript and relation-subscript ternary operators:
558
558
559 $ hg debugrevspec -p analyzed 'tip[0]'
559 $ hg debugrevspec -p analyzed 'tip[0]'
560 * analyzed:
560 * analyzed:
561 (subscript
561 (subscript
562 ('symbol', 'tip')
562 ('symbol', 'tip')
563 ('symbol', '0')
563 ('symbol', '0')
564 define)
564 define)
565 hg: parse error: can't use a subscript in this context
565 hg: parse error: can't use a subscript in this context
566 [255]
566 [255]
567
567
568 $ hg debugrevspec -p analyzed 'tip#rel[0]'
568 $ hg debugrevspec -p analyzed 'tip#rel[0]'
569 * analyzed:
569 * analyzed:
570 (relsubscript
570 (relsubscript
571 ('symbol', 'tip')
571 ('symbol', 'tip')
572 ('symbol', 'rel')
572 ('symbol', 'rel')
573 ('symbol', '0')
573 ('symbol', '0')
574 define)
574 define)
575 hg: parse error: unknown identifier: rel
575 hg: parse error: unknown identifier: rel
576 [255]
576 [255]
577
577
578 $ hg debugrevspec -p analyzed '(tip#rel)[0]'
578 $ hg debugrevspec -p analyzed '(tip#rel)[0]'
579 * analyzed:
579 * analyzed:
580 (subscript
580 (subscript
581 (relation
581 (relation
582 ('symbol', 'tip')
582 ('symbol', 'tip')
583 ('symbol', 'rel')
583 ('symbol', 'rel')
584 define)
584 define)
585 ('symbol', '0')
585 ('symbol', '0')
586 define)
586 define)
587 hg: parse error: can't use a subscript in this context
587 hg: parse error: can't use a subscript in this context
588 [255]
588 [255]
589
589
590 $ hg debugrevspec -p analyzed 'tip#rel[0][1]'
590 $ hg debugrevspec -p analyzed 'tip#rel[0][1]'
591 * analyzed:
591 * analyzed:
592 (subscript
592 (subscript
593 (relsubscript
593 (relsubscript
594 ('symbol', 'tip')
594 ('symbol', 'tip')
595 ('symbol', 'rel')
595 ('symbol', 'rel')
596 ('symbol', '0')
596 ('symbol', '0')
597 define)
597 define)
598 ('symbol', '1')
598 ('symbol', '1')
599 define)
599 define)
600 hg: parse error: can't use a subscript in this context
600 hg: parse error: can't use a subscript in this context
601 [255]
601 [255]
602
602
603 $ hg debugrevspec -p analyzed 'tip#rel0#rel1[1]'
603 $ hg debugrevspec -p analyzed 'tip#rel0#rel1[1]'
604 * analyzed:
604 * analyzed:
605 (relsubscript
605 (relsubscript
606 (relation
606 (relation
607 ('symbol', 'tip')
607 ('symbol', 'tip')
608 ('symbol', 'rel0')
608 ('symbol', 'rel0')
609 define)
609 define)
610 ('symbol', 'rel1')
610 ('symbol', 'rel1')
611 ('symbol', '1')
611 ('symbol', '1')
612 define)
612 define)
613 hg: parse error: unknown identifier: rel1
613 hg: parse error: unknown identifier: rel1
614 [255]
614 [255]
615
615
616 $ hg debugrevspec -p analyzed 'tip#rel0[0]#rel1[1]'
616 $ hg debugrevspec -p analyzed 'tip#rel0[0]#rel1[1]'
617 * analyzed:
617 * analyzed:
618 (relsubscript
618 (relsubscript
619 (relsubscript
619 (relsubscript
620 ('symbol', 'tip')
620 ('symbol', 'tip')
621 ('symbol', 'rel0')
621 ('symbol', 'rel0')
622 ('symbol', '0')
622 ('symbol', '0')
623 define)
623 define)
624 ('symbol', 'rel1')
624 ('symbol', 'rel1')
625 ('symbol', '1')
625 ('symbol', '1')
626 define)
626 define)
627 hg: parse error: unknown identifier: rel1
627 hg: parse error: unknown identifier: rel1
628 [255]
628 [255]
629
629
630 parse errors of relation, subscript and relation-subscript operators:
630 parse errors of relation, subscript and relation-subscript operators:
631
631
632 $ hg debugrevspec '[0]'
632 $ hg debugrevspec '[0]'
633 hg: parse error at 0: not a prefix: [
633 hg: parse error at 0: not a prefix: [
634 [255]
634 [255]
635 $ hg debugrevspec '.#'
635 $ hg debugrevspec '.#'
636 hg: parse error at 2: not a prefix: end
636 hg: parse error at 2: not a prefix: end
637 [255]
637 [255]
638 $ hg debugrevspec '#rel'
638 $ hg debugrevspec '#rel'
639 hg: parse error at 0: not a prefix: #
639 hg: parse error at 0: not a prefix: #
640 [255]
640 [255]
641 $ hg debugrevspec '.#rel[0'
641 $ hg debugrevspec '.#rel[0'
642 hg: parse error at 7: unexpected token: end
642 hg: parse error at 7: unexpected token: end
643 [255]
643 [255]
644 $ hg debugrevspec '.]'
644 $ hg debugrevspec '.]'
645 hg: parse error at 1: invalid token
645 hg: parse error at 1: invalid token
646 [255]
646 [255]
647
647
648 $ hg debugrevspec '.#generations[a]'
648 $ hg debugrevspec '.#generations[a]'
649 hg: parse error: relation subscript must be an integer
649 hg: parse error: relation subscript must be an integer
650 [255]
650 [255]
651 $ hg debugrevspec '.#generations[1-2]'
651 $ hg debugrevspec '.#generations[1-2]'
652 hg: parse error: relation subscript must be an integer
652 hg: parse error: relation subscript must be an integer
653 [255]
653 [255]
654
654
655 parsed tree at stages:
655 parsed tree at stages:
656
656
657 $ hg debugrevspec -p all '()'
657 $ hg debugrevspec -p all '()'
658 * parsed:
658 * parsed:
659 (group
659 (group
660 None)
660 None)
661 * expanded:
661 * expanded:
662 (group
662 (group
663 None)
663 None)
664 * concatenated:
664 * concatenated:
665 (group
665 (group
666 None)
666 None)
667 * analyzed:
667 * analyzed:
668 None
668 None
669 * optimized:
669 * optimized:
670 None
670 None
671 hg: parse error: missing argument
671 hg: parse error: missing argument
672 [255]
672 [255]
673
673
674 $ hg debugrevspec --no-optimized -p all '()'
674 $ hg debugrevspec --no-optimized -p all '()'
675 * parsed:
675 * parsed:
676 (group
676 (group
677 None)
677 None)
678 * expanded:
678 * expanded:
679 (group
679 (group
680 None)
680 None)
681 * concatenated:
681 * concatenated:
682 (group
682 (group
683 None)
683 None)
684 * analyzed:
684 * analyzed:
685 None
685 None
686 hg: parse error: missing argument
686 hg: parse error: missing argument
687 [255]
687 [255]
688
688
689 $ hg debugrevspec -p parsed -p analyzed -p optimized '(0|1)-1'
689 $ hg debugrevspec -p parsed -p analyzed -p optimized '(0|1)-1'
690 * parsed:
690 * parsed:
691 (minus
691 (minus
692 (group
692 (group
693 (or
693 (or
694 (list
694 (list
695 ('symbol', '0')
695 ('symbol', '0')
696 ('symbol', '1'))))
696 ('symbol', '1'))))
697 ('symbol', '1'))
697 ('symbol', '1'))
698 * analyzed:
698 * analyzed:
699 (and
699 (and
700 (or
700 (or
701 (list
701 (list
702 ('symbol', '0')
702 ('symbol', '0')
703 ('symbol', '1'))
703 ('symbol', '1'))
704 define)
704 define)
705 (not
705 (not
706 ('symbol', '1')
706 ('symbol', '1')
707 follow)
707 follow)
708 define)
708 define)
709 * optimized:
709 * optimized:
710 (difference
710 (difference
711 (func
711 (func
712 ('symbol', '_list')
712 ('symbol', '_list')
713 ('string', '0\x001')
713 ('string', '0\x001')
714 define)
714 define)
715 ('symbol', '1')
715 ('symbol', '1')
716 define)
716 define)
717 0
717 0
718
718
719 $ hg debugrevspec -p unknown '0'
719 $ hg debugrevspec -p unknown '0'
720 abort: invalid stage name: unknown
720 abort: invalid stage name: unknown
721 [255]
721 [255]
722
722
723 $ hg debugrevspec -p all --optimize '0'
723 $ hg debugrevspec -p all --optimize '0'
724 abort: cannot use --optimize with --show-stage
724 abort: cannot use --optimize with --show-stage
725 [255]
725 [255]
726
726
727 verify optimized tree:
727 verify optimized tree:
728
728
729 $ hg debugrevspec --verify '0|1'
729 $ hg debugrevspec --verify '0|1'
730
730
731 $ hg debugrevspec --verify -v -p analyzed -p optimized 'r3232() & 2'
731 $ hg debugrevspec --verify -v -p analyzed -p optimized 'r3232() & 2'
732 * analyzed:
732 * analyzed:
733 (and
733 (and
734 (func
734 (func
735 ('symbol', 'r3232')
735 ('symbol', 'r3232')
736 None
736 None
737 define)
737 define)
738 ('symbol', '2')
738 ('symbol', '2')
739 define)
739 define)
740 * optimized:
740 * optimized:
741 (and
741 (and
742 ('symbol', '2')
742 ('symbol', '2')
743 (func
743 (func
744 ('symbol', 'r3232')
744 ('symbol', 'r3232')
745 None
745 None
746 define)
746 define)
747 define)
747 define)
748 * analyzed set:
748 * analyzed set:
749 <baseset [2]>
749 <baseset [2]>
750 * optimized set:
750 * optimized set:
751 <baseset [2, 2]>
751 <baseset [2, 2]>
752 --- analyzed
752 --- analyzed
753 +++ optimized
753 +++ optimized
754 2
754 2
755 +2
755 +2
756 [1]
756 [1]
757
757
758 $ hg debugrevspec --no-optimized --verify-optimized '0'
758 $ hg debugrevspec --no-optimized --verify-optimized '0'
759 abort: cannot use --verify-optimized with --no-optimized
759 abort: cannot use --verify-optimized with --no-optimized
760 [255]
760 [255]
761
761
762 Test that symbols only get parsed as functions if there's an opening
762 Test that symbols only get parsed as functions if there's an opening
763 parenthesis.
763 parenthesis.
764
764
765 $ hg book only -r 9
765 $ hg book only -r 9
766 $ log 'only(only)' # Outer "only" is a function, inner "only" is the bookmark
766 $ log 'only(only)' # Outer "only" is a function, inner "only" is the bookmark
767 8
767 8
768 9
768 9
769
769
770 ':y' behaves like '0:y', but can't be rewritten as such since the revision '0'
770 ':y' behaves like '0:y', but can't be rewritten as such since the revision '0'
771 may be hidden (issue5385)
771 may be hidden (issue5385)
772
772
773 $ try -p parsed -p analyzed ':'
773 $ try -p parsed -p analyzed ':'
774 * parsed:
774 * parsed:
775 (rangeall
775 (rangeall
776 None)
776 None)
777 * analyzed:
777 * analyzed:
778 (rangeall
778 (rangeall
779 None
779 None
780 define)
780 define)
781 * set:
781 * set:
782 <spanset+ 0:10>
782 <spanset+ 0:10>
783 0
783 0
784 1
784 1
785 2
785 2
786 3
786 3
787 4
787 4
788 5
788 5
789 6
789 6
790 7
790 7
791 8
791 8
792 9
792 9
793 $ try -p analyzed ':1'
793 $ try -p analyzed ':1'
794 * analyzed:
794 * analyzed:
795 (rangepre
795 (rangepre
796 ('symbol', '1')
796 ('symbol', '1')
797 define)
797 define)
798 * set:
798 * set:
799 <spanset+ 0:2>
799 <spanset+ 0:2>
800 0
800 0
801 1
801 1
802 $ try -p analyzed ':(1|2)'
802 $ try -p analyzed ':(1|2)'
803 * analyzed:
803 * analyzed:
804 (rangepre
804 (rangepre
805 (or
805 (or
806 (list
806 (list
807 ('symbol', '1')
807 ('symbol', '1')
808 ('symbol', '2'))
808 ('symbol', '2'))
809 define)
809 define)
810 define)
810 define)
811 * set:
811 * set:
812 <spanset+ 0:3>
812 <spanset+ 0:3>
813 0
813 0
814 1
814 1
815 2
815 2
816 $ try -p analyzed ':(1&2)'
816 $ try -p analyzed ':(1&2)'
817 * analyzed:
817 * analyzed:
818 (rangepre
818 (rangepre
819 (and
819 (and
820 ('symbol', '1')
820 ('symbol', '1')
821 ('symbol', '2')
821 ('symbol', '2')
822 define)
822 define)
823 define)
823 define)
824 * set:
824 * set:
825 <baseset []>
825 <baseset []>
826
826
827 infix/suffix resolution of ^ operator (issue2884):
827 infix/suffix resolution of ^ operator (issue2884):
828
828
829 x^:y means (x^):y
829 x^:y means (x^):y
830
830
831 $ try '1^:2'
831 $ try '1^:2'
832 (range
832 (range
833 (parentpost
833 (parentpost
834 ('symbol', '1'))
834 ('symbol', '1'))
835 ('symbol', '2'))
835 ('symbol', '2'))
836 * set:
836 * set:
837 <spanset+ 0:3>
837 <spanset+ 0:3>
838 0
838 0
839 1
839 1
840 2
840 2
841
841
842 $ try '1^::2'
842 $ try '1^::2'
843 (dagrange
843 (dagrange
844 (parentpost
844 (parentpost
845 ('symbol', '1'))
845 ('symbol', '1'))
846 ('symbol', '2'))
846 ('symbol', '2'))
847 * set:
847 * set:
848 <baseset+ [0, 1, 2]>
848 <baseset+ [0, 1, 2]>
849 0
849 0
850 1
850 1
851 2
851 2
852
852
853 $ try '9^:'
853 $ try '9^:'
854 (rangepost
854 (rangepost
855 (parentpost
855 (parentpost
856 ('symbol', '9')))
856 ('symbol', '9')))
857 * set:
857 * set:
858 <spanset+ 8:10>
858 <spanset+ 8:10>
859 8
859 8
860 9
860 9
861
861
862 x^:y should be resolved before omitting group operators
862 x^:y should be resolved before omitting group operators
863
863
864 $ try '1^(:2)'
864 $ try '1^(:2)'
865 (parent
865 (parent
866 ('symbol', '1')
866 ('symbol', '1')
867 (group
867 (group
868 (rangepre
868 (rangepre
869 ('symbol', '2'))))
869 ('symbol', '2'))))
870 hg: parse error: ^ expects a number 0, 1, or 2
870 hg: parse error: ^ expects a number 0, 1, or 2
871 [255]
871 [255]
872
872
873 x^:y should be resolved recursively
873 x^:y should be resolved recursively
874
874
875 $ try 'sort(1^:2)'
875 $ try 'sort(1^:2)'
876 (func
876 (func
877 ('symbol', 'sort')
877 ('symbol', 'sort')
878 (range
878 (range
879 (parentpost
879 (parentpost
880 ('symbol', '1'))
880 ('symbol', '1'))
881 ('symbol', '2')))
881 ('symbol', '2')))
882 * set:
882 * set:
883 <spanset+ 0:3>
883 <spanset+ 0:3>
884 0
884 0
885 1
885 1
886 2
886 2
887
887
888 $ try '(3^:4)^:2'
888 $ try '(3^:4)^:2'
889 (range
889 (range
890 (parentpost
890 (parentpost
891 (group
891 (group
892 (range
892 (range
893 (parentpost
893 (parentpost
894 ('symbol', '3'))
894 ('symbol', '3'))
895 ('symbol', '4'))))
895 ('symbol', '4'))))
896 ('symbol', '2'))
896 ('symbol', '2'))
897 * set:
897 * set:
898 <spanset+ 0:3>
898 <spanset+ 0:3>
899 0
899 0
900 1
900 1
901 2
901 2
902
902
903 $ try '(3^::4)^::2'
903 $ try '(3^::4)^::2'
904 (dagrange
904 (dagrange
905 (parentpost
905 (parentpost
906 (group
906 (group
907 (dagrange
907 (dagrange
908 (parentpost
908 (parentpost
909 ('symbol', '3'))
909 ('symbol', '3'))
910 ('symbol', '4'))))
910 ('symbol', '4'))))
911 ('symbol', '2'))
911 ('symbol', '2'))
912 * set:
912 * set:
913 <baseset+ [0, 1, 2]>
913 <baseset+ [0, 1, 2]>
914 0
914 0
915 1
915 1
916 2
916 2
917
917
918 $ try '(9^:)^:'
918 $ try '(9^:)^:'
919 (rangepost
919 (rangepost
920 (parentpost
920 (parentpost
921 (group
921 (group
922 (rangepost
922 (rangepost
923 (parentpost
923 (parentpost
924 ('symbol', '9'))))))
924 ('symbol', '9'))))))
925 * set:
925 * set:
926 <spanset+ 4:10>
926 <spanset+ 4:10>
927 4
927 4
928 5
928 5
929 6
929 6
930 7
930 7
931 8
931 8
932 9
932 9
933
933
934 x^ in alias should also be resolved
934 x^ in alias should also be resolved
935
935
936 $ try 'A' --config 'revsetalias.A=1^:2'
936 $ try 'A' --config 'revsetalias.A=1^:2'
937 ('symbol', 'A')
937 ('symbol', 'A')
938 * expanded:
938 * expanded:
939 (range
939 (range
940 (parentpost
940 (parentpost
941 ('symbol', '1'))
941 ('symbol', '1'))
942 ('symbol', '2'))
942 ('symbol', '2'))
943 * set:
943 * set:
944 <spanset+ 0:3>
944 <spanset+ 0:3>
945 0
945 0
946 1
946 1
947 2
947 2
948
948
949 $ try 'A:2' --config 'revsetalias.A=1^'
949 $ try 'A:2' --config 'revsetalias.A=1^'
950 (range
950 (range
951 ('symbol', 'A')
951 ('symbol', 'A')
952 ('symbol', '2'))
952 ('symbol', '2'))
953 * expanded:
953 * expanded:
954 (range
954 (range
955 (parentpost
955 (parentpost
956 ('symbol', '1'))
956 ('symbol', '1'))
957 ('symbol', '2'))
957 ('symbol', '2'))
958 * set:
958 * set:
959 <spanset+ 0:3>
959 <spanset+ 0:3>
960 0
960 0
961 1
961 1
962 2
962 2
963
963
964 but not beyond the boundary of alias expansion, because the resolution should
964 but not beyond the boundary of alias expansion, because the resolution should
965 be made at the parsing stage
965 be made at the parsing stage
966
966
967 $ try '1^A' --config 'revsetalias.A=:2'
967 $ try '1^A' --config 'revsetalias.A=:2'
968 (parent
968 (parent
969 ('symbol', '1')
969 ('symbol', '1')
970 ('symbol', 'A'))
970 ('symbol', 'A'))
971 * expanded:
971 * expanded:
972 (parent
972 (parent
973 ('symbol', '1')
973 ('symbol', '1')
974 (rangepre
974 (rangepre
975 ('symbol', '2')))
975 ('symbol', '2')))
976 hg: parse error: ^ expects a number 0, 1, or 2
976 hg: parse error: ^ expects a number 0, 1, or 2
977 [255]
977 [255]
978
978
979 ancestor can accept 0 or more arguments
979 ancestor can accept 0 or more arguments
980
980
981 $ log 'ancestor()'
981 $ log 'ancestor()'
982 $ log 'ancestor(1)'
982 $ log 'ancestor(1)'
983 1
983 1
984 $ log 'ancestor(4,5)'
984 $ log 'ancestor(4,5)'
985 1
985 1
986 $ log 'ancestor(4,5) and 4'
986 $ log 'ancestor(4,5) and 4'
987 $ log 'ancestor(0,0,1,3)'
987 $ log 'ancestor(0,0,1,3)'
988 0
988 0
989 $ log 'ancestor(3,1,5,3,5,1)'
989 $ log 'ancestor(3,1,5,3,5,1)'
990 1
990 1
991 $ log 'ancestor(0,1,3,5)'
991 $ log 'ancestor(0,1,3,5)'
992 0
992 0
993 $ log 'ancestor(1,2,3,4,5)'
993 $ log 'ancestor(1,2,3,4,5)'
994 1
994 1
995
995
996 test ancestors
996 test ancestors
997
997
998 $ hg log -G -T '{rev}\n' --config experimental.graphshorten=True
998 $ hg log -G -T '{rev}\n' --config experimental.graphshorten=True
999 @ 9
999 @ 9
1000 o 8
1000 o 8
1001 | o 7
1001 | o 7
1002 | o 6
1002 | o 6
1003 |/|
1003 |/|
1004 | o 5
1004 | o 5
1005 o | 4
1005 o | 4
1006 | o 3
1006 | o 3
1007 o | 2
1007 o | 2
1008 |/
1008 |/
1009 o 1
1009 o 1
1010 o 0
1010 o 0
1011
1011
1012 $ log 'ancestors(5)'
1012 $ log 'ancestors(5)'
1013 0
1013 0
1014 1
1014 1
1015 3
1015 3
1016 5
1016 5
1017 $ log 'ancestor(ancestors(5))'
1017 $ log 'ancestor(ancestors(5))'
1018 0
1018 0
1019 $ log '::r3232()'
1019 $ log '::r3232()'
1020 0
1020 0
1021 1
1021 1
1022 2
1022 2
1023 3
1023 3
1024
1024
1025 test ancestors with depth limit
1025 test ancestors with depth limit
1026
1026
1027 (depth=0 selects the node itself)
1027 (depth=0 selects the node itself)
1028
1028
1029 $ log 'reverse(ancestors(9, depth=0))'
1029 $ log 'reverse(ancestors(9, depth=0))'
1030 9
1030 9
1031
1031
1032 (interleaved: '4' would be missing if heap queue were higher depth first)
1032 (interleaved: '4' would be missing if heap queue were higher depth first)
1033
1033
1034 $ log 'reverse(ancestors(8:9, depth=1))'
1034 $ log 'reverse(ancestors(8:9, depth=1))'
1035 9
1035 9
1036 8
1036 8
1037 4
1037 4
1038
1038
1039 (interleaved: '2' would be missing if heap queue were higher depth first)
1039 (interleaved: '2' would be missing if heap queue were higher depth first)
1040
1040
1041 $ log 'reverse(ancestors(7+8, depth=2))'
1041 $ log 'reverse(ancestors(7+8, depth=2))'
1042 8
1042 8
1043 7
1043 7
1044 6
1044 6
1045 5
1045 5
1046 4
1046 4
1047 2
1047 2
1048
1048
1049 (walk example above by separate queries)
1049 (walk example above by separate queries)
1050
1050
1051 $ log 'reverse(ancestors(8, depth=2)) + reverse(ancestors(7, depth=2))'
1051 $ log 'reverse(ancestors(8, depth=2)) + reverse(ancestors(7, depth=2))'
1052 8
1052 8
1053 4
1053 4
1054 2
1054 2
1055 7
1055 7
1056 6
1056 6
1057 5
1057 5
1058
1058
1059 (walk 2nd and 3rd ancestors)
1059 (walk 2nd and 3rd ancestors)
1060
1060
1061 $ log 'reverse(ancestors(7, depth=3, startdepth=2))'
1061 $ log 'reverse(ancestors(7, depth=3, startdepth=2))'
1062 5
1062 5
1063 4
1063 4
1064 3
1064 3
1065 2
1065 2
1066
1066
1067 (interleaved: '4' would be missing if higher-depth ancestors weren't scanned)
1067 (interleaved: '4' would be missing if higher-depth ancestors weren't scanned)
1068
1068
1069 $ log 'reverse(ancestors(7+8, depth=2, startdepth=2))'
1069 $ log 'reverse(ancestors(7+8, depth=2, startdepth=2))'
1070 5
1070 5
1071 4
1071 4
1072 2
1072 2
1073
1073
1074 (note that 'ancestors(x, depth=y, startdepth=z)' does not identical to
1074 (note that 'ancestors(x, depth=y, startdepth=z)' does not identical to
1075 'ancestors(x, depth=y) - ancestors(x, depth=z-1)' because a node may have
1075 'ancestors(x, depth=y) - ancestors(x, depth=z-1)' because a node may have
1076 multiple depths)
1076 multiple depths)
1077
1077
1078 $ log 'reverse(ancestors(7+8, depth=2) - ancestors(7+8, depth=1))'
1078 $ log 'reverse(ancestors(7+8, depth=2) - ancestors(7+8, depth=1))'
1079 5
1079 5
1080 2
1080 2
1081
1081
1082 test bad arguments passed to ancestors()
1082 test bad arguments passed to ancestors()
1083
1083
1084 $ log 'ancestors(., depth=-1)'
1084 $ log 'ancestors(., depth=-1)'
1085 hg: parse error: negative depth
1085 hg: parse error: negative depth
1086 [255]
1086 [255]
1087 $ log 'ancestors(., depth=foo)'
1087 $ log 'ancestors(., depth=foo)'
1088 hg: parse error: ancestors expects an integer depth
1088 hg: parse error: ancestors expects an integer depth
1089 [255]
1089 [255]
1090
1090
1091 test descendants
1091 test descendants
1092
1092
1093 $ hg log -G -T '{rev}\n' --config experimental.graphshorten=True
1093 $ hg log -G -T '{rev}\n' --config experimental.graphshorten=True
1094 @ 9
1094 @ 9
1095 o 8
1095 o 8
1096 | o 7
1096 | o 7
1097 | o 6
1097 | o 6
1098 |/|
1098 |/|
1099 | o 5
1099 | o 5
1100 o | 4
1100 o | 4
1101 | o 3
1101 | o 3
1102 o | 2
1102 o | 2
1103 |/
1103 |/
1104 o 1
1104 o 1
1105 o 0
1105 o 0
1106
1106
1107 (null is ultimate root and has optimized path)
1107 (null is ultimate root and has optimized path)
1108
1108
1109 $ log 'null:4 & descendants(null)'
1109 $ log 'null:4 & descendants(null)'
1110 -1
1110 -1
1111 0
1111 0
1112 1
1112 1
1113 2
1113 2
1114 3
1114 3
1115 4
1115 4
1116
1116
1117 (including merge)
1117 (including merge)
1118
1118
1119 $ log ':8 & descendants(2)'
1119 $ log ':8 & descendants(2)'
1120 2
1120 2
1121 4
1121 4
1122 6
1122 6
1123 7
1123 7
1124 8
1124 8
1125
1125
1126 (multiple roots)
1126 (multiple roots)
1127
1127
1128 $ log ':8 & descendants(2+5)'
1128 $ log ':8 & descendants(2+5)'
1129 2
1129 2
1130 4
1130 4
1131 5
1131 5
1132 6
1132 6
1133 7
1133 7
1134 8
1134 8
1135
1135
1136 test descendants with depth limit
1136 test descendants with depth limit
1137
1137
1138 (depth=0 selects the node itself)
1138 (depth=0 selects the node itself)
1139
1139
1140 $ log 'descendants(0, depth=0)'
1140 $ log 'descendants(0, depth=0)'
1141 0
1141 0
1142 $ log 'null: & descendants(null, depth=0)'
1142 $ log 'null: & descendants(null, depth=0)'
1143 -1
1143 -1
1144
1144
1145 (p2 = null should be ignored)
1145 (p2 = null should be ignored)
1146
1146
1147 $ log 'null: & descendants(null, depth=2)'
1147 $ log 'null: & descendants(null, depth=2)'
1148 -1
1148 -1
1149 0
1149 0
1150 1
1150 1
1151
1151
1152 (multiple paths: depth(6) = (2, 3))
1152 (multiple paths: depth(6) = (2, 3))
1153
1153
1154 $ log 'descendants(1+3, depth=2)'
1154 $ log 'descendants(1+3, depth=2)'
1155 1
1155 1
1156 2
1156 2
1157 3
1157 3
1158 4
1158 4
1159 5
1159 5
1160 6
1160 6
1161
1161
1162 (multiple paths: depth(5) = (1, 2), depth(6) = (2, 3))
1162 (multiple paths: depth(5) = (1, 2), depth(6) = (2, 3))
1163
1163
1164 $ log 'descendants(3+1, depth=2, startdepth=2)'
1164 $ log 'descendants(3+1, depth=2, startdepth=2)'
1165 4
1165 4
1166 5
1166 5
1167 6
1167 6
1168
1168
1169 (multiple depths: depth(6) = (0, 2, 4), search for depth=2)
1169 (multiple depths: depth(6) = (0, 2, 4), search for depth=2)
1170
1170
1171 $ log 'descendants(0+3+6, depth=3, startdepth=1)'
1171 $ log 'descendants(0+3+6, depth=3, startdepth=1)'
1172 1
1172 1
1173 2
1173 2
1174 3
1174 3
1175 4
1175 4
1176 5
1176 5
1177 6
1177 6
1178 7
1178 7
1179
1179
1180 (multiple depths: depth(6) = (0, 4), no match)
1180 (multiple depths: depth(6) = (0, 4), no match)
1181
1181
1182 $ log 'descendants(0+6, depth=3, startdepth=1)'
1182 $ log 'descendants(0+6, depth=3, startdepth=1)'
1183 1
1183 1
1184 2
1184 2
1185 3
1185 3
1186 4
1186 4
1187 5
1187 5
1188 7
1188 7
1189
1189
1190 test ancestors/descendants relation subscript:
1190 test ancestors/descendants relation subscript:
1191
1191
1192 $ log 'tip#generations[0]'
1192 $ log 'tip#generations[0]'
1193 9
1193 9
1194 $ log '.#generations[-1]'
1194 $ log '.#generations[-1]'
1195 8
1195 8
1196 $ log '.#g[(-1)]'
1196 $ log '.#g[(-1)]'
1197 8
1197 8
1198
1198
1199 $ hg debugrevspec -p parsed 'roots(:)#g[2]'
1199 $ hg debugrevspec -p parsed 'roots(:)#g[2]'
1200 * parsed:
1200 * parsed:
1201 (relsubscript
1201 (relsubscript
1202 (func
1202 (func
1203 ('symbol', 'roots')
1203 ('symbol', 'roots')
1204 (rangeall
1204 (rangeall
1205 None))
1205 None))
1206 ('symbol', 'g')
1206 ('symbol', 'g')
1207 ('symbol', '2'))
1207 ('symbol', '2'))
1208 2
1208 2
1209 3
1209 3
1210
1210
1211 test author
1211 test author
1212
1212
1213 $ log 'author(bob)'
1213 $ log 'author(bob)'
1214 2
1214 2
1215 $ log 'author("re:bob|test")'
1215 $ log 'author("re:bob|test")'
1216 0
1216 0
1217 1
1217 1
1218 2
1218 2
1219 3
1219 3
1220 4
1220 4
1221 5
1221 5
1222 6
1222 6
1223 7
1223 7
1224 8
1224 8
1225 9
1225 9
1226 $ log 'author(r"re:\S")'
1226 $ log 'author(r"re:\S")'
1227 0
1227 0
1228 1
1228 1
1229 2
1229 2
1230 3
1230 3
1231 4
1231 4
1232 5
1232 5
1233 6
1233 6
1234 7
1234 7
1235 8
1235 8
1236 9
1236 9
1237 $ log 'branch(Γ©)'
1237 $ log 'branch(Γ©)'
1238 8
1238 8
1239 9
1239 9
1240 $ log 'branch(a)'
1240 $ log 'branch(a)'
1241 0
1241 0
1242 $ hg log -r 'branch("re:a")' --template '{rev} {branch}\n'
1242 $ hg log -r 'branch("re:a")' --template '{rev} {branch}\n'
1243 0 a
1243 0 a
1244 2 a-b-c-
1244 2 a-b-c-
1245 3 +a+b+c+
1245 3 +a+b+c+
1246 4 -a-b-c-
1246 4 -a-b-c-
1247 5 !a/b/c/
1247 5 !a/b/c/
1248 6 _a_b_c_
1248 6 _a_b_c_
1249 7 .a.b.c.
1249 7 .a.b.c.
1250 $ log 'children(ancestor(4,5))'
1250 $ log 'children(ancestor(4,5))'
1251 2
1251 2
1252 3
1252 3
1253
1253
1254 $ log 'children(4)'
1254 $ log 'children(4)'
1255 6
1255 6
1256 8
1256 8
1257 $ log 'children(null)'
1257 $ log 'children(null)'
1258 0
1258 0
1259
1259
1260 $ log 'closed()'
1260 $ log 'closed()'
1261 $ log 'contains(a)'
1261 $ log 'contains(a)'
1262 0
1262 0
1263 1
1263 1
1264 3
1264 3
1265 5
1265 5
1266 $ log 'contains("../repo/a")'
1266 $ log 'contains("../repo/a")'
1267 0
1267 0
1268 1
1268 1
1269 3
1269 3
1270 5
1270 5
1271 $ log 'desc(B)'
1271 $ log 'desc(B)'
1272 5
1272 5
1273 $ hg log -r 'desc(r"re:S?u")' --template "{rev} {desc|firstline}\n"
1273 $ hg log -r 'desc(r"re:S?u")' --template "{rev} {desc|firstline}\n"
1274 5 5 bug
1274 5 5 bug
1275 6 6 issue619
1275 6 6 issue619
1276 $ log 'descendants(2 or 3)'
1276 $ log 'descendants(2 or 3)'
1277 2
1277 2
1278 3
1278 3
1279 4
1279 4
1280 5
1280 5
1281 6
1281 6
1282 7
1282 7
1283 8
1283 8
1284 9
1284 9
1285 $ log 'file("b*")'
1285 $ log 'file("b*")'
1286 1
1286 1
1287 4
1287 4
1288 $ log 'filelog("b")'
1288 $ log 'filelog("b")'
1289 1
1289 1
1290 4
1290 4
1291 $ log 'filelog("../repo/b")'
1291 $ log 'filelog("../repo/b")'
1292 1
1292 1
1293 4
1293 4
1294 $ log 'follow()'
1294 $ log 'follow()'
1295 0
1295 0
1296 1
1296 1
1297 2
1297 2
1298 4
1298 4
1299 8
1299 8
1300 9
1300 9
1301 $ log 'grep("issue\d+")'
1301 $ log 'grep("issue\d+")'
1302 6
1302 6
1303 $ try 'grep("(")' # invalid regular expression
1303 $ try 'grep("(")' # invalid regular expression
1304 (func
1304 (func
1305 ('symbol', 'grep')
1305 ('symbol', 'grep')
1306 ('string', '('))
1306 ('string', '('))
1307 hg: parse error: invalid match pattern: unbalanced parenthesis
1307 hg: parse error: invalid match pattern: unbalanced parenthesis
1308 [255]
1308 [255]
1309 $ try 'grep("\bissue\d+")'
1309 $ try 'grep("\bissue\d+")'
1310 (func
1310 (func
1311 ('symbol', 'grep')
1311 ('symbol', 'grep')
1312 ('string', '\x08issue\\d+'))
1312 ('string', '\x08issue\\d+'))
1313 * set:
1313 * set:
1314 <filteredset
1314 <filteredset
1315 <fullreposet+ 0:10>,
1315 <fullreposet+ 0:10>,
1316 <grep '\x08issue\\d+'>>
1316 <grep '\x08issue\\d+'>>
1317 $ try 'grep(r"\bissue\d+")'
1317 $ try 'grep(r"\bissue\d+")'
1318 (func
1318 (func
1319 ('symbol', 'grep')
1319 ('symbol', 'grep')
1320 ('string', '\\bissue\\d+'))
1320 ('string', '\\bissue\\d+'))
1321 * set:
1321 * set:
1322 <filteredset
1322 <filteredset
1323 <fullreposet+ 0:10>,
1323 <fullreposet+ 0:10>,
1324 <grep '\\bissue\\d+'>>
1324 <grep '\\bissue\\d+'>>
1325 6
1325 6
1326 $ try 'grep(r"\")'
1326 $ try 'grep(r"\")'
1327 hg: parse error at 7: unterminated string
1327 hg: parse error at 7: unterminated string
1328 [255]
1328 [255]
1329 $ log 'head()'
1329 $ log 'head()'
1330 0
1330 0
1331 1
1331 1
1332 2
1332 2
1333 3
1333 3
1334 4
1334 4
1335 5
1335 5
1336 6
1336 6
1337 7
1337 7
1338 9
1338 9
1339 $ log 'heads(6::)'
1339 $ log 'heads(6::)'
1340 7
1340 7
1341 $ log 'keyword(issue)'
1341 $ log 'keyword(issue)'
1342 6
1342 6
1343 $ log 'keyword("test a")'
1343 $ log 'keyword("test a")'
1344
1344
1345 Test first (=limit) and last
1345 Test first (=limit) and last
1346
1346
1347 $ log 'limit(head(), 1)'
1347 $ log 'limit(head(), 1)'
1348 0
1348 0
1349 $ log 'limit(author("re:bob|test"), 3, 5)'
1349 $ log 'limit(author("re:bob|test"), 3, 5)'
1350 5
1350 5
1351 6
1351 6
1352 7
1352 7
1353 $ log 'limit(author("re:bob|test"), offset=6)'
1353 $ log 'limit(author("re:bob|test"), offset=6)'
1354 6
1354 6
1355 $ log 'limit(author("re:bob|test"), offset=10)'
1355 $ log 'limit(author("re:bob|test"), offset=10)'
1356 $ log 'limit(all(), 1, -1)'
1356 $ log 'limit(all(), 1, -1)'
1357 hg: parse error: negative offset
1357 hg: parse error: negative offset
1358 [255]
1358 [255]
1359 $ log 'limit(all(), -1)'
1359 $ log 'limit(all(), -1)'
1360 hg: parse error: negative number to select
1360 hg: parse error: negative number to select
1361 [255]
1361 [255]
1362 $ log 'limit(all(), 0)'
1362 $ log 'limit(all(), 0)'
1363
1363
1364 $ log 'last(all(), -1)'
1364 $ log 'last(all(), -1)'
1365 hg: parse error: negative number to select
1365 hg: parse error: negative number to select
1366 [255]
1366 [255]
1367 $ log 'last(all(), 0)'
1367 $ log 'last(all(), 0)'
1368 $ log 'last(all(), 1)'
1368 $ log 'last(all(), 1)'
1369 9
1369 9
1370 $ log 'last(all(), 2)'
1370 $ log 'last(all(), 2)'
1371 8
1371 8
1372 9
1372 9
1373
1373
1374 Test smartset.slice() by first/last()
1374 Test smartset.slice() by first/last()
1375
1375
1376 (using unoptimized set, filteredset as example)
1376 (using unoptimized set, filteredset as example)
1377
1377
1378 $ hg debugrevspec --no-show-revs -s '0:7 & branch("re:")'
1378 $ hg debugrevspec --no-show-revs -s '0:7 & branch("re:")'
1379 * set:
1379 * set:
1380 <filteredset
1380 <filteredset
1381 <spanset+ 0:8>,
1381 <spanset+ 0:8>,
1382 <branch 're:'>>
1382 <branch 're:'>>
1383 $ log 'limit(0:7 & branch("re:"), 3, 4)'
1383 $ log 'limit(0:7 & branch("re:"), 3, 4)'
1384 4
1384 4
1385 5
1385 5
1386 6
1386 6
1387 $ log 'limit(7:0 & branch("re:"), 3, 4)'
1387 $ log 'limit(7:0 & branch("re:"), 3, 4)'
1388 3
1388 3
1389 2
1389 2
1390 1
1390 1
1391 $ log 'last(0:7 & branch("re:"), 2)'
1391 $ log 'last(0:7 & branch("re:"), 2)'
1392 6
1392 6
1393 7
1393 7
1394
1394
1395 (using baseset)
1395 (using baseset)
1396
1396
1397 $ hg debugrevspec --no-show-revs -s 0+1+2+3+4+5+6+7
1397 $ hg debugrevspec --no-show-revs -s 0+1+2+3+4+5+6+7
1398 * set:
1398 * set:
1399 <baseset [0, 1, 2, 3, 4, 5, 6, 7]>
1399 <baseset [0, 1, 2, 3, 4, 5, 6, 7]>
1400 $ hg debugrevspec --no-show-revs -s 0::7
1400 $ hg debugrevspec --no-show-revs -s 0::7
1401 * set:
1401 * set:
1402 <baseset+ [0, 1, 2, 3, 4, 5, 6, 7]>
1402 <baseset+ [0, 1, 2, 3, 4, 5, 6, 7]>
1403 $ log 'limit(0+1+2+3+4+5+6+7, 3, 4)'
1403 $ log 'limit(0+1+2+3+4+5+6+7, 3, 4)'
1404 4
1404 4
1405 5
1405 5
1406 6
1406 6
1407 $ log 'limit(sort(0::7, rev), 3, 4)'
1407 $ log 'limit(sort(0::7, rev), 3, 4)'
1408 4
1408 4
1409 5
1409 5
1410 6
1410 6
1411 $ log 'limit(sort(0::7, -rev), 3, 4)'
1411 $ log 'limit(sort(0::7, -rev), 3, 4)'
1412 3
1412 3
1413 2
1413 2
1414 1
1414 1
1415 $ log 'last(sort(0::7, rev), 2)'
1415 $ log 'last(sort(0::7, rev), 2)'
1416 6
1416 6
1417 7
1417 7
1418 $ hg debugrevspec -s 'limit(sort(0::7, rev), 3, 6)'
1418 $ hg debugrevspec -s 'limit(sort(0::7, rev), 3, 6)'
1419 * set:
1419 * set:
1420 <baseset+ [6, 7]>
1420 <baseset+ [6, 7]>
1421 6
1421 6
1422 7
1422 7
1423 $ hg debugrevspec -s 'limit(sort(0::7, rev), 3, 9)'
1423 $ hg debugrevspec -s 'limit(sort(0::7, rev), 3, 9)'
1424 * set:
1424 * set:
1425 <baseset+ []>
1425 <baseset+ []>
1426 $ hg debugrevspec -s 'limit(sort(0::7, -rev), 3, 6)'
1426 $ hg debugrevspec -s 'limit(sort(0::7, -rev), 3, 6)'
1427 * set:
1427 * set:
1428 <baseset- [0, 1]>
1428 <baseset- [0, 1]>
1429 1
1429 1
1430 0
1430 0
1431 $ hg debugrevspec -s 'limit(sort(0::7, -rev), 3, 9)'
1431 $ hg debugrevspec -s 'limit(sort(0::7, -rev), 3, 9)'
1432 * set:
1432 * set:
1433 <baseset- []>
1433 <baseset- []>
1434 $ hg debugrevspec -s 'limit(0::7, 0)'
1434 $ hg debugrevspec -s 'limit(0::7, 0)'
1435 * set:
1435 * set:
1436 <baseset+ []>
1436 <baseset+ []>
1437
1437
1438 (using spanset)
1438 (using spanset)
1439
1439
1440 $ hg debugrevspec --no-show-revs -s 0:7
1440 $ hg debugrevspec --no-show-revs -s 0:7
1441 * set:
1441 * set:
1442 <spanset+ 0:8>
1442 <spanset+ 0:8>
1443 $ log 'limit(0:7, 3, 4)'
1443 $ log 'limit(0:7, 3, 4)'
1444 4
1444 4
1445 5
1445 5
1446 6
1446 6
1447 $ log 'limit(7:0, 3, 4)'
1447 $ log 'limit(7:0, 3, 4)'
1448 3
1448 3
1449 2
1449 2
1450 1
1450 1
1451 $ log 'limit(0:7, 3, 6)'
1451 $ log 'limit(0:7, 3, 6)'
1452 6
1452 6
1453 7
1453 7
1454 $ log 'limit(7:0, 3, 6)'
1454 $ log 'limit(7:0, 3, 6)'
1455 1
1455 1
1456 0
1456 0
1457 $ log 'last(0:7, 2)'
1457 $ log 'last(0:7, 2)'
1458 6
1458 6
1459 7
1459 7
1460 $ hg debugrevspec -s 'limit(0:7, 3, 6)'
1460 $ hg debugrevspec -s 'limit(0:7, 3, 6)'
1461 * set:
1461 * set:
1462 <spanset+ 6:8>
1462 <spanset+ 6:8>
1463 6
1463 6
1464 7
1464 7
1465 $ hg debugrevspec -s 'limit(0:7, 3, 9)'
1465 $ hg debugrevspec -s 'limit(0:7, 3, 9)'
1466 * set:
1466 * set:
1467 <spanset+ 8:8>
1467 <spanset+ 8:8>
1468 $ hg debugrevspec -s 'limit(7:0, 3, 6)'
1468 $ hg debugrevspec -s 'limit(7:0, 3, 6)'
1469 * set:
1469 * set:
1470 <spanset- 0:2>
1470 <spanset- 0:2>
1471 1
1471 1
1472 0
1472 0
1473 $ hg debugrevspec -s 'limit(7:0, 3, 9)'
1473 $ hg debugrevspec -s 'limit(7:0, 3, 9)'
1474 * set:
1474 * set:
1475 <spanset- 0:0>
1475 <spanset- 0:0>
1476 $ hg debugrevspec -s 'limit(0:7, 0)'
1476 $ hg debugrevspec -s 'limit(0:7, 0)'
1477 * set:
1477 * set:
1478 <spanset+ 0:0>
1478 <spanset+ 0:0>
1479
1479
1480 Test order of first/last revisions
1480 Test order of first/last revisions
1481
1481
1482 $ hg debugrevspec -s 'first(4:0, 3) & 3:'
1482 $ hg debugrevspec -s 'first(4:0, 3) & 3:'
1483 * set:
1483 * set:
1484 <filteredset
1484 <filteredset
1485 <spanset- 2:5>,
1485 <spanset- 2:5>,
1486 <spanset+ 3:10>>
1486 <spanset+ 3:10>>
1487 4
1487 4
1488 3
1488 3
1489
1489
1490 $ hg debugrevspec -s '3: & first(4:0, 3)'
1490 $ hg debugrevspec -s '3: & first(4:0, 3)'
1491 * set:
1491 * set:
1492 <filteredset
1492 <filteredset
1493 <spanset+ 3:10>,
1493 <spanset+ 3:10>,
1494 <spanset- 2:5>>
1494 <spanset- 2:5>>
1495 3
1495 3
1496 4
1496 4
1497
1497
1498 $ hg debugrevspec -s 'last(4:0, 3) & :1'
1498 $ hg debugrevspec -s 'last(4:0, 3) & :1'
1499 * set:
1499 * set:
1500 <filteredset
1500 <filteredset
1501 <spanset- 0:3>,
1501 <spanset- 0:3>,
1502 <spanset+ 0:2>>
1502 <spanset+ 0:2>>
1503 1
1503 1
1504 0
1504 0
1505
1505
1506 $ hg debugrevspec -s ':1 & last(4:0, 3)'
1506 $ hg debugrevspec -s ':1 & last(4:0, 3)'
1507 * set:
1507 * set:
1508 <filteredset
1508 <filteredset
1509 <spanset+ 0:2>,
1509 <spanset+ 0:2>,
1510 <spanset+ 0:3>>
1510 <spanset+ 0:3>>
1511 0
1511 0
1512 1
1512 1
1513
1513
1514 Test scmutil.revsingle() should return the last revision
1514 Test scmutil.revsingle() should return the last revision
1515
1515
1516 $ hg debugrevspec -s 'last(0::)'
1516 $ hg debugrevspec -s 'last(0::)'
1517 * set:
1517 * set:
1518 <baseset slice=0:1
1518 <baseset slice=0:1
1519 <generatorset->>
1519 <generatorset->>
1520 9
1520 9
1521 $ hg identify -r '0::' --num
1521 $ hg identify -r '0::' --num
1522 9
1522 9
1523
1523
1524 Test matching
1524 Test matching
1525
1525
1526 $ log 'matching(6)'
1526 $ log 'matching(6)'
1527 6
1527 6
1528 $ log 'matching(6:7, "phase parents user date branch summary files description substate")'
1528 $ log 'matching(6:7, "phase parents user date branch summary files description substate")'
1529 6
1529 6
1530 7
1530 7
1531
1531
1532 Testing min and max
1532 Testing min and max
1533
1533
1534 max: simple
1534 max: simple
1535
1535
1536 $ log 'max(contains(a))'
1536 $ log 'max(contains(a))'
1537 5
1537 5
1538
1538
1539 max: simple on unordered set)
1539 max: simple on unordered set)
1540
1540
1541 $ log 'max((4+0+2+5+7) and contains(a))'
1541 $ log 'max((4+0+2+5+7) and contains(a))'
1542 5
1542 5
1543
1543
1544 max: no result
1544 max: no result
1545
1545
1546 $ log 'max(contains(stringthatdoesnotappearanywhere))'
1546 $ log 'max(contains(stringthatdoesnotappearanywhere))'
1547
1547
1548 max: no result on unordered set
1548 max: no result on unordered set
1549
1549
1550 $ log 'max((4+0+2+5+7) and contains(stringthatdoesnotappearanywhere))'
1550 $ log 'max((4+0+2+5+7) and contains(stringthatdoesnotappearanywhere))'
1551
1551
1552 min: simple
1552 min: simple
1553
1553
1554 $ log 'min(contains(a))'
1554 $ log 'min(contains(a))'
1555 0
1555 0
1556
1556
1557 min: simple on unordered set
1557 min: simple on unordered set
1558
1558
1559 $ log 'min((4+0+2+5+7) and contains(a))'
1559 $ log 'min((4+0+2+5+7) and contains(a))'
1560 0
1560 0
1561
1561
1562 min: empty
1562 min: empty
1563
1563
1564 $ log 'min(contains(stringthatdoesnotappearanywhere))'
1564 $ log 'min(contains(stringthatdoesnotappearanywhere))'
1565
1565
1566 min: empty on unordered set
1566 min: empty on unordered set
1567
1567
1568 $ log 'min((4+0+2+5+7) and contains(stringthatdoesnotappearanywhere))'
1568 $ log 'min((4+0+2+5+7) and contains(stringthatdoesnotappearanywhere))'
1569
1569
1570
1570
1571 $ log 'merge()'
1571 $ log 'merge()'
1572 6
1572 6
1573 $ log 'branchpoint()'
1573 $ log 'branchpoint()'
1574 1
1574 1
1575 4
1575 4
1576 $ log 'modifies(b)'
1576 $ log 'modifies(b)'
1577 4
1577 4
1578 $ log 'modifies("path:b")'
1578 $ log 'modifies("path:b")'
1579 4
1579 4
1580 $ log 'modifies("*")'
1580 $ log 'modifies("*")'
1581 4
1581 4
1582 6
1582 6
1583 $ log 'modifies("set:modified()")'
1583 $ log 'modifies("set:modified()")'
1584 4
1584 4
1585 $ log 'id(5)'
1585 $ log 'id(5)'
1586 2
1586 2
1587 $ log 'only(9)'
1587 $ log 'only(9)'
1588 8
1588 8
1589 9
1589 9
1590 $ log 'only(8)'
1590 $ log 'only(8)'
1591 8
1591 8
1592 $ log 'only(9, 5)'
1592 $ log 'only(9, 5)'
1593 2
1593 2
1594 4
1594 4
1595 8
1595 8
1596 9
1596 9
1597 $ log 'only(7 + 9, 5 + 2)'
1597 $ log 'only(7 + 9, 5 + 2)'
1598 4
1598 4
1599 6
1599 6
1600 7
1600 7
1601 8
1601 8
1602 9
1602 9
1603
1603
1604 Test empty set input
1604 Test empty set input
1605 $ log 'only(p2())'
1605 $ log 'only(p2())'
1606 $ log 'only(p1(), p2())'
1606 $ log 'only(p1(), p2())'
1607 0
1607 0
1608 1
1608 1
1609 2
1609 2
1610 4
1610 4
1611 8
1611 8
1612 9
1612 9
1613
1613
1614 Test '%' operator
1614 Test '%' operator
1615
1615
1616 $ log '9%'
1616 $ log '9%'
1617 8
1617 8
1618 9
1618 9
1619 $ log '9%5'
1619 $ log '9%5'
1620 2
1620 2
1621 4
1621 4
1622 8
1622 8
1623 9
1623 9
1624 $ log '(7 + 9)%(5 + 2)'
1624 $ log '(7 + 9)%(5 + 2)'
1625 4
1625 4
1626 6
1626 6
1627 7
1627 7
1628 8
1628 8
1629 9
1629 9
1630
1630
1631 Test operand of '%' is optimized recursively (issue4670)
1631 Test operand of '%' is optimized recursively (issue4670)
1632
1632
1633 $ try --optimize '8:9-8%'
1633 $ try --optimize '8:9-8%'
1634 (onlypost
1634 (onlypost
1635 (minus
1635 (minus
1636 (range
1636 (range
1637 ('symbol', '8')
1637 ('symbol', '8')
1638 ('symbol', '9'))
1638 ('symbol', '9'))
1639 ('symbol', '8')))
1639 ('symbol', '8')))
1640 * optimized:
1640 * optimized:
1641 (func
1641 (func
1642 ('symbol', 'only')
1642 ('symbol', 'only')
1643 (difference
1643 (difference
1644 (range
1644 (range
1645 ('symbol', '8')
1645 ('symbol', '8')
1646 ('symbol', '9')
1646 ('symbol', '9')
1647 define)
1647 define)
1648 ('symbol', '8')
1648 ('symbol', '8')
1649 define)
1649 define)
1650 define)
1650 define)
1651 * set:
1651 * set:
1652 <baseset+ [8, 9]>
1652 <baseset+ [8, 9]>
1653 8
1653 8
1654 9
1654 9
1655 $ try --optimize '(9)%(5)'
1655 $ try --optimize '(9)%(5)'
1656 (only
1656 (only
1657 (group
1657 (group
1658 ('symbol', '9'))
1658 ('symbol', '9'))
1659 (group
1659 (group
1660 ('symbol', '5')))
1660 ('symbol', '5')))
1661 * optimized:
1661 * optimized:
1662 (func
1662 (func
1663 ('symbol', 'only')
1663 ('symbol', 'only')
1664 (list
1664 (list
1665 ('symbol', '9')
1665 ('symbol', '9')
1666 ('symbol', '5'))
1666 ('symbol', '5'))
1667 define)
1667 define)
1668 * set:
1668 * set:
1669 <baseset+ [2, 4, 8, 9]>
1669 <baseset+ [2, 4, 8, 9]>
1670 2
1670 2
1671 4
1671 4
1672 8
1672 8
1673 9
1673 9
1674
1674
1675 Test the order of operations
1675 Test the order of operations
1676
1676
1677 $ log '7 + 9%5 + 2'
1677 $ log '7 + 9%5 + 2'
1678 7
1678 7
1679 2
1679 2
1680 4
1680 4
1681 8
1681 8
1682 9
1682 9
1683
1683
1684 Test explicit numeric revision
1684 Test explicit numeric revision
1685 $ log 'rev(-2)'
1685 $ log 'rev(-2)'
1686 $ log 'rev(-1)'
1686 $ log 'rev(-1)'
1687 -1
1687 -1
1688 $ log 'rev(0)'
1688 $ log 'rev(0)'
1689 0
1689 0
1690 $ log 'rev(9)'
1690 $ log 'rev(9)'
1691 9
1691 9
1692 $ log 'rev(10)'
1692 $ log 'rev(10)'
1693 $ log 'rev(tip)'
1693 $ log 'rev(tip)'
1694 hg: parse error: rev expects a number
1694 hg: parse error: rev expects a number
1695 [255]
1695 [255]
1696
1696
1697 Test hexadecimal revision
1697 Test hexadecimal revision
1698 $ log 'id(2)'
1698 $ log 'id(2)'
1699 abort: 00changelog.i@2: ambiguous identifier!
1699 abort: 00changelog.i@2: ambiguous identifier!
1700 [255]
1700 [255]
1701 $ log 'id(23268)'
1701 $ log 'id(23268)'
1702 4
1702 4
1703 $ log 'id(2785f51eece)'
1703 $ log 'id(2785f51eece)'
1704 0
1704 0
1705 $ log 'id(d5d0dcbdc4d9ff5dbb2d336f32f0bb561c1a532c)'
1705 $ log 'id(d5d0dcbdc4d9ff5dbb2d336f32f0bb561c1a532c)'
1706 8
1706 8
1707 $ log 'id(d5d0dcbdc4a)'
1707 $ log 'id(d5d0dcbdc4a)'
1708 $ log 'id(d5d0dcbdc4w)'
1708 $ log 'id(d5d0dcbdc4w)'
1709 $ log 'id(d5d0dcbdc4d9ff5dbb2d336f32f0bb561c1a532d)'
1709 $ log 'id(d5d0dcbdc4d9ff5dbb2d336f32f0bb561c1a532d)'
1710 $ log 'id(d5d0dcbdc4d9ff5dbb2d336f32f0bb561c1a532q)'
1710 $ log 'id(d5d0dcbdc4d9ff5dbb2d336f32f0bb561c1a532q)'
1711 $ log 'id(1.0)'
1711 $ log 'id(1.0)'
1712 $ log 'id(xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)'
1712 $ log 'id(xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)'
1713
1713
1714 Test null revision
1714 Test null revision
1715 $ log '(null)'
1715 $ log '(null)'
1716 -1
1716 -1
1717 $ log '(null:0)'
1717 $ log '(null:0)'
1718 -1
1718 -1
1719 0
1719 0
1720 $ log '(0:null)'
1720 $ log '(0:null)'
1721 0
1721 0
1722 -1
1722 -1
1723 $ log 'null::0'
1723 $ log 'null::0'
1724 -1
1724 -1
1725 0
1725 0
1726 $ log 'null:tip - 0:'
1726 $ log 'null:tip - 0:'
1727 -1
1727 -1
1728 $ log 'null: and null::' | head -1
1728 $ log 'null: and null::' | head -1
1729 -1
1729 -1
1730 $ log 'null: or 0:' | head -2
1730 $ log 'null: or 0:' | head -2
1731 -1
1731 -1
1732 0
1732 0
1733 $ log 'ancestors(null)'
1733 $ log 'ancestors(null)'
1734 -1
1734 -1
1735 $ log 'reverse(null:)' | tail -2
1735 $ log 'reverse(null:)' | tail -2
1736 0
1736 0
1737 -1
1737 -1
1738 $ log 'first(null:)'
1738 $ log 'first(null:)'
1739 -1
1739 -1
1740 $ log 'min(null:)'
1740 $ log 'min(null:)'
1741 BROKEN: should be '-1'
1741 BROKEN: should be '-1'
1742 $ log 'tip:null and all()' | tail -2
1742 $ log 'tip:null and all()' | tail -2
1743 1
1743 1
1744 0
1744 0
1745
1745
1746 Test working-directory revision
1746 Test working-directory revision
1747 $ hg debugrevspec 'wdir()'
1747 $ hg debugrevspec 'wdir()'
1748 2147483647
1748 2147483647
1749 $ hg debugrevspec 'wdir()^'
1749 $ hg debugrevspec 'wdir()^'
1750 9
1750 9
1751 $ hg up 7
1751 $ hg up 7
1752 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1752 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
1753 $ hg debugrevspec 'wdir()^'
1753 $ hg debugrevspec 'wdir()^'
1754 7
1754 7
1755 $ hg debugrevspec 'wdir()^0'
1755 $ hg debugrevspec 'wdir()^0'
1756 2147483647
1756 2147483647
1757 $ hg debugrevspec 'wdir()~3'
1757 $ hg debugrevspec 'wdir()~3'
1758 5
1758 5
1759 $ hg debugrevspec 'ancestors(wdir())'
1759 $ hg debugrevspec 'ancestors(wdir())'
1760 0
1760 0
1761 1
1761 1
1762 2
1762 2
1763 3
1763 3
1764 4
1764 4
1765 5
1765 5
1766 6
1766 6
1767 7
1767 7
1768 2147483647
1768 2147483647
1769 $ hg debugrevspec 'wdir()~0'
1769 $ hg debugrevspec 'wdir()~0'
1770 2147483647
1770 2147483647
1771 $ hg debugrevspec 'p1(wdir())'
1771 $ hg debugrevspec 'p1(wdir())'
1772 7
1772 7
1773 $ hg debugrevspec 'p2(wdir())'
1773 $ hg debugrevspec 'p2(wdir())'
1774 $ hg debugrevspec 'parents(wdir())'
1774 $ hg debugrevspec 'parents(wdir())'
1775 7
1775 7
1776 $ hg debugrevspec 'wdir()^1'
1776 $ hg debugrevspec 'wdir()^1'
1777 7
1777 7
1778 $ hg debugrevspec 'wdir()^2'
1778 $ hg debugrevspec 'wdir()^2'
1779 $ hg debugrevspec 'wdir()^3'
1779 $ hg debugrevspec 'wdir()^3'
1780 hg: parse error: ^ expects a number 0, 1, or 2
1780 hg: parse error: ^ expects a number 0, 1, or 2
1781 [255]
1781 [255]
1782 For tests consistency
1782 For tests consistency
1783 $ hg up 9
1783 $ hg up 9
1784 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1784 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
1785 $ hg debugrevspec 'tip or wdir()'
1785 $ hg debugrevspec 'tip or wdir()'
1786 9
1786 9
1787 2147483647
1787 2147483647
1788 $ hg debugrevspec '0:tip and wdir()'
1788 $ hg debugrevspec '0:tip and wdir()'
1789 $ log '0:wdir()' | tail -3
1789 $ log '0:wdir()' | tail -3
1790 8
1790 8
1791 9
1791 9
1792 2147483647
1792 2147483647
1793 $ log 'wdir():0' | head -3
1793 $ log 'wdir():0' | head -3
1794 2147483647
1794 2147483647
1795 9
1795 9
1796 8
1796 8
1797 $ log 'wdir():wdir()'
1797 $ log 'wdir():wdir()'
1798 2147483647
1798 2147483647
1799 $ log '(all() + wdir()) & min(. + wdir())'
1799 $ log '(all() + wdir()) & min(. + wdir())'
1800 9
1800 9
1801 $ log '(all() + wdir()) & max(. + wdir())'
1801 $ log '(all() + wdir()) & max(. + wdir())'
1802 2147483647
1802 2147483647
1803 $ log 'first(wdir() + .)'
1803 $ log 'first(wdir() + .)'
1804 2147483647
1804 2147483647
1805 $ log 'last(. + wdir())'
1805 $ log 'last(. + wdir())'
1806 2147483647
1806 2147483647
1807
1807
1808 Test working-directory integer revision and node id
1808 Test working-directory integer revision and node id
1809 (BUG: '0:wdir()' is still needed to populate wdir revision)
1809 (BUG: '0:wdir()' is still needed to populate wdir revision)
1810
1810
1811 $ hg debugrevspec '0:wdir() & 2147483647'
1811 $ hg debugrevspec '0:wdir() & 2147483647'
1812 2147483647
1812 2147483647
1813 $ hg debugrevspec '0:wdir() & rev(2147483647)'
1813 $ hg debugrevspec '0:wdir() & rev(2147483647)'
1814 2147483647
1814 2147483647
1815 $ hg debugrevspec '0:wdir() & ffffffffffffffffffffffffffffffffffffffff'
1815 $ hg debugrevspec '0:wdir() & ffffffffffffffffffffffffffffffffffffffff'
1816 2147483647
1816 2147483647
1817 $ hg debugrevspec '0:wdir() & ffffffffffff'
1817 $ hg debugrevspec '0:wdir() & ffffffffffff'
1818 2147483647
1818 2147483647
1819 $ hg debugrevspec '0:wdir() & id(ffffffffffffffffffffffffffffffffffffffff)'
1819 $ hg debugrevspec '0:wdir() & id(ffffffffffffffffffffffffffffffffffffffff)'
1820 2147483647
1820 2147483647
1821 $ hg debugrevspec '0:wdir() & id(ffffffffffff)'
1821 $ hg debugrevspec '0:wdir() & id(ffffffffffff)'
1822 2147483647
1822 2147483647
1823
1823
1824 $ cd ..
1824 $ cd ..
1825
1825
1826 Test short 'ff...' hash collision
1826 Test short 'ff...' hash collision
1827 (BUG: '0:wdir()' is still needed to populate wdir revision)
1827 (BUG: '0:wdir()' is still needed to populate wdir revision)
1828
1828
1829 $ hg init wdir-hashcollision
1829 $ hg init wdir-hashcollision
1830 $ cd wdir-hashcollision
1830 $ cd wdir-hashcollision
1831 $ cat <<EOF >> .hg/hgrc
1831 $ cat <<EOF >> .hg/hgrc
1832 > [experimental]
1832 > [experimental]
1833 > stabilization = createmarkers
1833 > stabilization = createmarkers
1834 > EOF
1834 > EOF
1835 $ echo 0 > a
1835 $ echo 0 > a
1836 $ hg ci -qAm 0
1836 $ hg ci -qAm 0
1837 $ for i in 2463 2961 6726 78127; do
1837 $ for i in 2463 2961 6726 78127; do
1838 > hg up -q 0
1838 > hg up -q 0
1839 > echo $i > a
1839 > echo $i > a
1840 > hg ci -qm $i
1840 > hg ci -qm $i
1841 > done
1841 > done
1842 $ hg up -q null
1842 $ hg up -q null
1843 $ hg log -r '0:wdir()' -T '{rev}:{node} {shortest(node, 3)}\n'
1843 $ hg log -r '0:wdir()' -T '{rev}:{node} {shortest(node, 3)}\n'
1844 0:b4e73ffab476aa0ee32ed81ca51e07169844bc6a b4e
1844 0:b4e73ffab476aa0ee32ed81ca51e07169844bc6a b4e
1845 1:fffbae3886c8fbb2114296380d276fd37715d571 fffba
1845 1:fffbae3886c8fbb2114296380d276fd37715d571 fffba
1846 2:fffb6093b00943f91034b9bdad069402c834e572 fffb6
1846 2:fffb6093b00943f91034b9bdad069402c834e572 fffb6
1847 3:fff48a9b9de34a4d64120c29548214c67980ade3 fff4
1847 3:fff48a9b9de34a4d64120c29548214c67980ade3 fff4
1848 4:ffff85cff0ff78504fcdc3c0bc10de0c65379249 ffff8
1848 4:ffff85cff0ff78504fcdc3c0bc10de0c65379249 ffff8
1849 2147483647:ffffffffffffffffffffffffffffffffffffffff fffff
1849 2147483647:ffffffffffffffffffffffffffffffffffffffff fffff
1850 $ hg debugobsolete fffbae3886c8fbb2114296380d276fd37715d571
1850 $ hg debugobsolete fffbae3886c8fbb2114296380d276fd37715d571
1851 obsoleted 1 changesets
1851 obsoleted 1 changesets
1852
1852
1853 $ hg debugrevspec '0:wdir() & fff'
1853 $ hg debugrevspec '0:wdir() & fff'
1854 abort: 00changelog.i@fff: ambiguous identifier!
1854 abort: 00changelog.i@fff: ambiguous identifier!
1855 [255]
1855 [255]
1856 $ hg debugrevspec '0:wdir() & ffff'
1856 $ hg debugrevspec '0:wdir() & ffff'
1857 abort: 00changelog.i@ffff: ambiguous identifier!
1857 abort: 00changelog.i@ffff: ambiguous identifier!
1858 [255]
1858 [255]
1859 $ hg debugrevspec '0:wdir() & fffb'
1859 $ hg debugrevspec '0:wdir() & fffb'
1860 abort: 00changelog.i@fffb: ambiguous identifier!
1860 abort: 00changelog.i@fffb: ambiguous identifier!
1861 [255]
1861 [255]
1862 BROKEN should be '2' (node lookup uses unfiltered repo since dc25ed84bee8)
1862 BROKEN should be '2' (node lookup uses unfiltered repo since dc25ed84bee8)
1863 $ hg debugrevspec '0:wdir() & id(fffb)'
1863 $ hg debugrevspec '0:wdir() & id(fffb)'
1864 2
1864 2
1865 $ hg debugrevspec '0:wdir() & ffff8'
1865 $ hg debugrevspec '0:wdir() & ffff8'
1866 4
1866 4
1867 $ hg debugrevspec '0:wdir() & fffff'
1867 $ hg debugrevspec '0:wdir() & fffff'
1868 2147483647
1868 2147483647
1869
1869
1870 $ cd ..
1870 $ cd ..
1871
1871
1872 Test branch() with wdir()
1872 Test branch() with wdir()
1873
1873
1874 $ cd repo
1874 $ cd repo
1875
1875
1876 $ log '0:wdir() & branch("literal:Γ©")'
1876 $ log '0:wdir() & branch("literal:Γ©")'
1877 8
1877 8
1878 9
1878 9
1879 2147483647
1879 2147483647
1880 $ log '0:wdir() & branch("re:Γ©")'
1880 $ log '0:wdir() & branch("re:Γ©")'
1881 8
1881 8
1882 9
1882 9
1883 2147483647
1883 2147483647
1884 $ log '0:wdir() & branch("re:^a")'
1884 $ log '0:wdir() & branch("re:^a")'
1885 0
1885 0
1886 2
1886 2
1887 $ log '0:wdir() & branch(8)'
1887 $ log '0:wdir() & branch(8)'
1888 8
1888 8
1889 9
1889 9
1890 2147483647
1890 2147483647
1891
1891
1892 branch(wdir()) returns all revisions belonging to the working branch. The wdir
1892 branch(wdir()) returns all revisions belonging to the working branch. The wdir
1893 itself isn't returned unless it is explicitly populated.
1893 itself isn't returned unless it is explicitly populated.
1894
1894
1895 $ log 'branch(wdir())'
1895 $ log 'branch(wdir())'
1896 8
1896 8
1897 9
1897 9
1898 $ log '0:wdir() & branch(wdir())'
1898 $ log '0:wdir() & branch(wdir())'
1899 8
1899 8
1900 9
1900 9
1901 2147483647
1901 2147483647
1902
1902
1903 $ log 'outgoing()'
1903 $ log 'outgoing()'
1904 8
1904 8
1905 9
1905 9
1906 $ log 'outgoing("../remote1")'
1906 $ log 'outgoing("../remote1")'
1907 8
1907 8
1908 9
1908 9
1909 $ log 'outgoing("../remote2")'
1909 $ log 'outgoing("../remote2")'
1910 3
1910 3
1911 5
1911 5
1912 6
1912 6
1913 7
1913 7
1914 9
1914 9
1915 $ log 'p1(merge())'
1915 $ log 'p1(merge())'
1916 5
1916 5
1917 $ log 'p2(merge())'
1917 $ log 'p2(merge())'
1918 4
1918 4
1919 $ log 'parents(merge())'
1919 $ log 'parents(merge())'
1920 4
1920 4
1921 5
1921 5
1922 $ log 'p1(branchpoint())'
1922 $ log 'p1(branchpoint())'
1923 0
1923 0
1924 2
1924 2
1925 $ log 'p2(branchpoint())'
1925 $ log 'p2(branchpoint())'
1926 $ log 'parents(branchpoint())'
1926 $ log 'parents(branchpoint())'
1927 0
1927 0
1928 2
1928 2
1929 $ log 'removes(a)'
1929 $ log 'removes(a)'
1930 2
1930 2
1931 6
1931 6
1932 $ log 'roots(all())'
1932 $ log 'roots(all())'
1933 0
1933 0
1934 $ log 'reverse(2 or 3 or 4 or 5)'
1934 $ log 'reverse(2 or 3 or 4 or 5)'
1935 5
1935 5
1936 4
1936 4
1937 3
1937 3
1938 2
1938 2
1939 $ log 'reverse(all())'
1939 $ log 'reverse(all())'
1940 9
1940 9
1941 8
1941 8
1942 7
1942 7
1943 6
1943 6
1944 5
1944 5
1945 4
1945 4
1946 3
1946 3
1947 2
1947 2
1948 1
1948 1
1949 0
1949 0
1950 $ log 'reverse(all()) & filelog(b)'
1950 $ log 'reverse(all()) & filelog(b)'
1951 4
1951 4
1952 1
1952 1
1953 $ log 'rev(5)'
1953 $ log 'rev(5)'
1954 5
1954 5
1955 $ log 'sort(limit(reverse(all()), 3))'
1955 $ log 'sort(limit(reverse(all()), 3))'
1956 7
1956 7
1957 8
1957 8
1958 9
1958 9
1959 $ log 'sort(2 or 3 or 4 or 5, date)'
1959 $ log 'sort(2 or 3 or 4 or 5, date)'
1960 2
1960 2
1961 3
1961 3
1962 5
1962 5
1963 4
1963 4
1964 $ log 'tagged()'
1964 $ log 'tagged()'
1965 6
1965 6
1966 $ log 'tag()'
1966 $ log 'tag()'
1967 6
1967 6
1968 $ log 'tag(1.0)'
1968 $ log 'tag(1.0)'
1969 6
1969 6
1970 $ log 'tag(tip)'
1970 $ log 'tag(tip)'
1971 9
1971 9
1972
1972
1973 Test order of revisions in compound expression
1973 Test order of revisions in compound expression
1974 ----------------------------------------------
1974 ----------------------------------------------
1975
1975
1976 The general rule is that only the outermost (= leftmost) predicate can
1976 The general rule is that only the outermost (= leftmost) predicate can
1977 enforce its ordering requirement. The other predicates should take the
1977 enforce its ordering requirement. The other predicates should take the
1978 ordering defined by it.
1978 ordering defined by it.
1979
1979
1980 'A & B' should follow the order of 'A':
1980 'A & B' should follow the order of 'A':
1981
1981
1982 $ log '2:0 & 0::2'
1982 $ log '2:0 & 0::2'
1983 2
1983 2
1984 1
1984 1
1985 0
1985 0
1986
1986
1987 'head()' combines sets in right order:
1987 'head()' combines sets in right order:
1988
1988
1989 $ log '2:0 & head()'
1989 $ log '2:0 & head()'
1990 2
1990 2
1991 1
1991 1
1992 0
1992 0
1993
1993
1994 'x:y' takes ordering parameter into account:
1994 'x:y' takes ordering parameter into account:
1995
1995
1996 $ try -p optimized '3:0 & 0:3 & not 2:1'
1996 $ try -p optimized '3:0 & 0:3 & not 2:1'
1997 * optimized:
1997 * optimized:
1998 (difference
1998 (difference
1999 (and
1999 (and
2000 (range
2000 (range
2001 ('symbol', '3')
2001 ('symbol', '3')
2002 ('symbol', '0')
2002 ('symbol', '0')
2003 define)
2003 define)
2004 (range
2004 (range
2005 ('symbol', '0')
2005 ('symbol', '0')
2006 ('symbol', '3')
2006 ('symbol', '3')
2007 follow)
2007 follow)
2008 define)
2008 define)
2009 (range
2009 (range
2010 ('symbol', '2')
2010 ('symbol', '2')
2011 ('symbol', '1')
2011 ('symbol', '1')
2012 any)
2012 any)
2013 define)
2013 define)
2014 * set:
2014 * set:
2015 <filteredset
2015 <filteredset
2016 <filteredset
2016 <filteredset
2017 <spanset- 0:4>,
2017 <spanset- 0:4>,
2018 <spanset+ 0:4>>,
2018 <spanset+ 0:4>>,
2019 <not
2019 <not
2020 <spanset+ 1:3>>>
2020 <spanset+ 1:3>>>
2021 3
2021 3
2022 0
2022 0
2023
2023
2024 'a + b', which is optimized to '_list(a b)', should take the ordering of
2024 'a + b', which is optimized to '_list(a b)', should take the ordering of
2025 the left expression:
2025 the left expression:
2026
2026
2027 $ try --optimize '2:0 & (0 + 1 + 2)'
2027 $ try --optimize '2:0 & (0 + 1 + 2)'
2028 (and
2028 (and
2029 (range
2029 (range
2030 ('symbol', '2')
2030 ('symbol', '2')
2031 ('symbol', '0'))
2031 ('symbol', '0'))
2032 (group
2032 (group
2033 (or
2033 (or
2034 (list
2034 (list
2035 ('symbol', '0')
2035 ('symbol', '0')
2036 ('symbol', '1')
2036 ('symbol', '1')
2037 ('symbol', '2')))))
2037 ('symbol', '2')))))
2038 * optimized:
2038 * optimized:
2039 (and
2039 (and
2040 (range
2040 (range
2041 ('symbol', '2')
2041 ('symbol', '2')
2042 ('symbol', '0')
2042 ('symbol', '0')
2043 define)
2043 define)
2044 (func
2044 (func
2045 ('symbol', '_list')
2045 ('symbol', '_list')
2046 ('string', '0\x001\x002')
2046 ('string', '0\x001\x002')
2047 follow)
2047 follow)
2048 define)
2048 define)
2049 * set:
2049 * set:
2050 <filteredset
2050 <filteredset
2051 <spanset- 0:3>,
2051 <spanset- 0:3>,
2052 <baseset [0, 1, 2]>>
2052 <baseset [0, 1, 2]>>
2053 2
2053 2
2054 1
2054 1
2055 0
2055 0
2056
2056
2057 'A + B' should take the ordering of the left expression:
2057 'A + B' should take the ordering of the left expression:
2058
2058
2059 $ try --optimize '2:0 & (0:1 + 2)'
2059 $ try --optimize '2:0 & (0:1 + 2)'
2060 (and
2060 (and
2061 (range
2061 (range
2062 ('symbol', '2')
2062 ('symbol', '2')
2063 ('symbol', '0'))
2063 ('symbol', '0'))
2064 (group
2064 (group
2065 (or
2065 (or
2066 (list
2066 (list
2067 (range
2067 (range
2068 ('symbol', '0')
2068 ('symbol', '0')
2069 ('symbol', '1'))
2069 ('symbol', '1'))
2070 ('symbol', '2')))))
2070 ('symbol', '2')))))
2071 * optimized:
2071 * optimized:
2072 (and
2072 (and
2073 (range
2073 (range
2074 ('symbol', '2')
2074 ('symbol', '2')
2075 ('symbol', '0')
2075 ('symbol', '0')
2076 define)
2076 define)
2077 (or
2077 (or
2078 (list
2078 (list
2079 ('symbol', '2')
2079 ('symbol', '2')
2080 (range
2080 (range
2081 ('symbol', '0')
2081 ('symbol', '0')
2082 ('symbol', '1')
2082 ('symbol', '1')
2083 follow))
2083 follow))
2084 follow)
2084 follow)
2085 define)
2085 define)
2086 * set:
2086 * set:
2087 <filteredset
2087 <filteredset
2088 <spanset- 0:3>,
2088 <spanset- 0:3>,
2089 <addset
2089 <addset
2090 <baseset [2]>,
2090 <baseset [2]>,
2091 <spanset+ 0:2>>>
2091 <spanset+ 0:2>>>
2092 2
2092 2
2093 1
2093 1
2094 0
2094 0
2095
2095
2096 '_intlist(a b)' should behave like 'a + b':
2096 '_intlist(a b)' should behave like 'a + b':
2097
2097
2098 $ trylist --optimize '2:0 & %ld' 0 1 2
2098 $ trylist --optimize '2:0 & %ld' 0 1 2
2099 (and
2099 (and
2100 (range
2100 (range
2101 ('symbol', '2')
2101 ('symbol', '2')
2102 ('symbol', '0'))
2102 ('symbol', '0'))
2103 (func
2103 (func
2104 ('symbol', '_intlist')
2104 ('symbol', '_intlist')
2105 ('string', '0\x001\x002')))
2105 ('string', '0\x001\x002')))
2106 * optimized:
2106 * optimized:
2107 (and
2107 (and
2108 (func
2108 (func
2109 ('symbol', '_intlist')
2109 ('symbol', '_intlist')
2110 ('string', '0\x001\x002')
2110 ('string', '0\x001\x002')
2111 follow)
2111 follow)
2112 (range
2112 (range
2113 ('symbol', '2')
2113 ('symbol', '2')
2114 ('symbol', '0')
2114 ('symbol', '0')
2115 define)
2115 define)
2116 define)
2116 define)
2117 * set:
2117 * set:
2118 <filteredset
2118 <filteredset
2119 <spanset- 0:3>,
2119 <spanset- 0:3>,
2120 <baseset+ [0, 1, 2]>>
2120 <baseset+ [0, 1, 2]>>
2121 2
2121 2
2122 1
2122 1
2123 0
2123 0
2124
2124
2125 $ trylist --optimize '%ld & 2:0' 0 2 1
2125 $ trylist --optimize '%ld & 2:0' 0 2 1
2126 (and
2126 (and
2127 (func
2127 (func
2128 ('symbol', '_intlist')
2128 ('symbol', '_intlist')
2129 ('string', '0\x002\x001'))
2129 ('string', '0\x002\x001'))
2130 (range
2130 (range
2131 ('symbol', '2')
2131 ('symbol', '2')
2132 ('symbol', '0')))
2132 ('symbol', '0')))
2133 * optimized:
2133 * optimized:
2134 (and
2134 (and
2135 (func
2135 (func
2136 ('symbol', '_intlist')
2136 ('symbol', '_intlist')
2137 ('string', '0\x002\x001')
2137 ('string', '0\x002\x001')
2138 define)
2138 define)
2139 (range
2139 (range
2140 ('symbol', '2')
2140 ('symbol', '2')
2141 ('symbol', '0')
2141 ('symbol', '0')
2142 follow)
2142 follow)
2143 define)
2143 define)
2144 * set:
2144 * set:
2145 <filteredset
2145 <filteredset
2146 <baseset [0, 2, 1]>,
2146 <baseset [0, 2, 1]>,
2147 <spanset- 0:3>>
2147 <spanset- 0:3>>
2148 0
2148 0
2149 2
2149 2
2150 1
2150 1
2151
2151
2152 '_hexlist(a b)' should behave like 'a + b':
2152 '_hexlist(a b)' should behave like 'a + b':
2153
2153
2154 $ trylist --optimize --bin '2:0 & %ln' `hg log -T '{node} ' -r0:2`
2154 $ trylist --optimize --bin '2:0 & %ln' `hg log -T '{node} ' -r0:2`
2155 (and
2155 (and
2156 (range
2156 (range
2157 ('symbol', '2')
2157 ('symbol', '2')
2158 ('symbol', '0'))
2158 ('symbol', '0'))
2159 (func
2159 (func
2160 ('symbol', '_hexlist')
2160 ('symbol', '_hexlist')
2161 ('string', '*'))) (glob)
2161 ('string', '*'))) (glob)
2162 * optimized:
2162 * optimized:
2163 (and
2163 (and
2164 (range
2164 (range
2165 ('symbol', '2')
2165 ('symbol', '2')
2166 ('symbol', '0')
2166 ('symbol', '0')
2167 define)
2167 define)
2168 (func
2168 (func
2169 ('symbol', '_hexlist')
2169 ('symbol', '_hexlist')
2170 ('string', '*') (glob)
2170 ('string', '*') (glob)
2171 follow)
2171 follow)
2172 define)
2172 define)
2173 * set:
2173 * set:
2174 <filteredset
2174 <filteredset
2175 <spanset- 0:3>,
2175 <spanset- 0:3>,
2176 <baseset [0, 1, 2]>>
2176 <baseset [0, 1, 2]>>
2177 2
2177 2
2178 1
2178 1
2179 0
2179 0
2180
2180
2181 $ trylist --optimize --bin '%ln & 2:0' `hg log -T '{node} ' -r0+2+1`
2181 $ trylist --optimize --bin '%ln & 2:0' `hg log -T '{node} ' -r0+2+1`
2182 (and
2182 (and
2183 (func
2183 (func
2184 ('symbol', '_hexlist')
2184 ('symbol', '_hexlist')
2185 ('string', '*')) (glob)
2185 ('string', '*')) (glob)
2186 (range
2186 (range
2187 ('symbol', '2')
2187 ('symbol', '2')
2188 ('symbol', '0')))
2188 ('symbol', '0')))
2189 * optimized:
2189 * optimized:
2190 (and
2190 (and
2191 (range
2191 (range
2192 ('symbol', '2')
2192 ('symbol', '2')
2193 ('symbol', '0')
2193 ('symbol', '0')
2194 follow)
2194 follow)
2195 (func
2195 (func
2196 ('symbol', '_hexlist')
2196 ('symbol', '_hexlist')
2197 ('string', '*') (glob)
2197 ('string', '*') (glob)
2198 define)
2198 define)
2199 define)
2199 define)
2200 * set:
2200 * set:
2201 <baseset [0, 2, 1]>
2201 <baseset [0, 2, 1]>
2202 0
2202 0
2203 2
2203 2
2204 1
2204 1
2205
2205
2206 '_list' should not go through the slow follow-order path if order doesn't
2206 '_list' should not go through the slow follow-order path if order doesn't
2207 matter:
2207 matter:
2208
2208
2209 $ try -p optimized '2:0 & not (0 + 1)'
2209 $ try -p optimized '2:0 & not (0 + 1)'
2210 * optimized:
2210 * optimized:
2211 (difference
2211 (difference
2212 (range
2212 (range
2213 ('symbol', '2')
2213 ('symbol', '2')
2214 ('symbol', '0')
2214 ('symbol', '0')
2215 define)
2215 define)
2216 (func
2216 (func
2217 ('symbol', '_list')
2217 ('symbol', '_list')
2218 ('string', '0\x001')
2218 ('string', '0\x001')
2219 any)
2219 any)
2220 define)
2220 define)
2221 * set:
2221 * set:
2222 <filteredset
2222 <filteredset
2223 <spanset- 0:3>,
2223 <spanset- 0:3>,
2224 <not
2224 <not
2225 <baseset [0, 1]>>>
2225 <baseset [0, 1]>>>
2226 2
2226 2
2227
2227
2228 $ try -p optimized '2:0 & not (0:2 & (0 + 1))'
2228 $ try -p optimized '2:0 & not (0:2 & (0 + 1))'
2229 * optimized:
2229 * optimized:
2230 (difference
2230 (difference
2231 (range
2231 (range
2232 ('symbol', '2')
2232 ('symbol', '2')
2233 ('symbol', '0')
2233 ('symbol', '0')
2234 define)
2234 define)
2235 (and
2235 (and
2236 (range
2236 (range
2237 ('symbol', '0')
2237 ('symbol', '0')
2238 ('symbol', '2')
2238 ('symbol', '2')
2239 any)
2239 any)
2240 (func
2240 (func
2241 ('symbol', '_list')
2241 ('symbol', '_list')
2242 ('string', '0\x001')
2242 ('string', '0\x001')
2243 any)
2243 any)
2244 any)
2244 any)
2245 define)
2245 define)
2246 * set:
2246 * set:
2247 <filteredset
2247 <filteredset
2248 <spanset- 0:3>,
2248 <spanset- 0:3>,
2249 <not
2249 <not
2250 <baseset [0, 1]>>>
2250 <baseset [0, 1]>>>
2251 2
2251 2
2252
2252
2253 because 'present()' does nothing other than suppressing an error, the
2253 because 'present()' does nothing other than suppressing an error, the
2254 ordering requirement should be forwarded to the nested expression
2254 ordering requirement should be forwarded to the nested expression
2255
2255
2256 $ try -p optimized 'present(2 + 0 + 1)'
2256 $ try -p optimized 'present(2 + 0 + 1)'
2257 * optimized:
2257 * optimized:
2258 (func
2258 (func
2259 ('symbol', 'present')
2259 ('symbol', 'present')
2260 (func
2260 (func
2261 ('symbol', '_list')
2261 ('symbol', '_list')
2262 ('string', '2\x000\x001')
2262 ('string', '2\x000\x001')
2263 define)
2263 define)
2264 define)
2264 define)
2265 * set:
2265 * set:
2266 <baseset [2, 0, 1]>
2266 <baseset [2, 0, 1]>
2267 2
2267 2
2268 0
2268 0
2269 1
2269 1
2270
2270
2271 $ try --optimize '2:0 & present(0 + 1 + 2)'
2271 $ try --optimize '2:0 & present(0 + 1 + 2)'
2272 (and
2272 (and
2273 (range
2273 (range
2274 ('symbol', '2')
2274 ('symbol', '2')
2275 ('symbol', '0'))
2275 ('symbol', '0'))
2276 (func
2276 (func
2277 ('symbol', 'present')
2277 ('symbol', 'present')
2278 (or
2278 (or
2279 (list
2279 (list
2280 ('symbol', '0')
2280 ('symbol', '0')
2281 ('symbol', '1')
2281 ('symbol', '1')
2282 ('symbol', '2')))))
2282 ('symbol', '2')))))
2283 * optimized:
2283 * optimized:
2284 (and
2284 (and
2285 (range
2285 (range
2286 ('symbol', '2')
2286 ('symbol', '2')
2287 ('symbol', '0')
2287 ('symbol', '0')
2288 define)
2288 define)
2289 (func
2289 (func
2290 ('symbol', 'present')
2290 ('symbol', 'present')
2291 (func
2291 (func
2292 ('symbol', '_list')
2292 ('symbol', '_list')
2293 ('string', '0\x001\x002')
2293 ('string', '0\x001\x002')
2294 follow)
2294 follow)
2295 follow)
2295 follow)
2296 define)
2296 define)
2297 * set:
2297 * set:
2298 <filteredset
2298 <filteredset
2299 <spanset- 0:3>,
2299 <spanset- 0:3>,
2300 <baseset [0, 1, 2]>>
2300 <baseset [0, 1, 2]>>
2301 2
2301 2
2302 1
2302 1
2303 0
2303 0
2304
2304
2305 'reverse()' should take effect only if it is the outermost expression:
2305 'reverse()' should take effect only if it is the outermost expression:
2306
2306
2307 $ try --optimize '0:2 & reverse(all())'
2307 $ try --optimize '0:2 & reverse(all())'
2308 (and
2308 (and
2309 (range
2309 (range
2310 ('symbol', '0')
2310 ('symbol', '0')
2311 ('symbol', '2'))
2311 ('symbol', '2'))
2312 (func
2312 (func
2313 ('symbol', 'reverse')
2313 ('symbol', 'reverse')
2314 (func
2314 (func
2315 ('symbol', 'all')
2315 ('symbol', 'all')
2316 None)))
2316 None)))
2317 * optimized:
2317 * optimized:
2318 (and
2318 (and
2319 (range
2319 (range
2320 ('symbol', '0')
2320 ('symbol', '0')
2321 ('symbol', '2')
2321 ('symbol', '2')
2322 define)
2322 define)
2323 (func
2323 (func
2324 ('symbol', 'reverse')
2324 ('symbol', 'reverse')
2325 (func
2325 (func
2326 ('symbol', 'all')
2326 ('symbol', 'all')
2327 None
2327 None
2328 define)
2328 define)
2329 follow)
2329 follow)
2330 define)
2330 define)
2331 * set:
2331 * set:
2332 <filteredset
2332 <filteredset
2333 <spanset+ 0:3>,
2333 <spanset+ 0:3>,
2334 <spanset+ 0:10>>
2334 <spanset+ 0:10>>
2335 0
2335 0
2336 1
2336 1
2337 2
2337 2
2338
2338
2339 'sort()' should take effect only if it is the outermost expression:
2339 'sort()' should take effect only if it is the outermost expression:
2340
2340
2341 $ try --optimize '0:2 & sort(all(), -rev)'
2341 $ try --optimize '0:2 & sort(all(), -rev)'
2342 (and
2342 (and
2343 (range
2343 (range
2344 ('symbol', '0')
2344 ('symbol', '0')
2345 ('symbol', '2'))
2345 ('symbol', '2'))
2346 (func
2346 (func
2347 ('symbol', 'sort')
2347 ('symbol', 'sort')
2348 (list
2348 (list
2349 (func
2349 (func
2350 ('symbol', 'all')
2350 ('symbol', 'all')
2351 None)
2351 None)
2352 (negate
2352 (negate
2353 ('symbol', 'rev')))))
2353 ('symbol', 'rev')))))
2354 * optimized:
2354 * optimized:
2355 (and
2355 (and
2356 (range
2356 (range
2357 ('symbol', '0')
2357 ('symbol', '0')
2358 ('symbol', '2')
2358 ('symbol', '2')
2359 define)
2359 define)
2360 (func
2360 (func
2361 ('symbol', 'sort')
2361 ('symbol', 'sort')
2362 (list
2362 (list
2363 (func
2363 (func
2364 ('symbol', 'all')
2364 ('symbol', 'all')
2365 None
2365 None
2366 define)
2366 define)
2367 ('string', '-rev'))
2367 ('string', '-rev'))
2368 follow)
2368 follow)
2369 define)
2369 define)
2370 * set:
2370 * set:
2371 <filteredset
2371 <filteredset
2372 <spanset+ 0:3>,
2372 <spanset+ 0:3>,
2373 <spanset+ 0:10>>
2373 <spanset+ 0:10>>
2374 0
2374 0
2375 1
2375 1
2376 2
2376 2
2377
2377
2378 invalid argument passed to noop sort():
2378 invalid argument passed to noop sort():
2379
2379
2380 $ log '0:2 & sort()'
2380 $ log '0:2 & sort()'
2381 hg: parse error: sort requires one or two arguments
2381 hg: parse error: sort requires one or two arguments
2382 [255]
2382 [255]
2383 $ log '0:2 & sort(all(), -invalid)'
2383 $ log '0:2 & sort(all(), -invalid)'
2384 hg: parse error: unknown sort key '-invalid'
2384 hg: parse error: unknown sort key '-invalid'
2385 [255]
2385 [255]
2386
2386
2387 for 'A & f(B)', 'B' should not be affected by the order of 'A':
2387 for 'A & f(B)', 'B' should not be affected by the order of 'A':
2388
2388
2389 $ try --optimize '2:0 & first(1 + 0 + 2)'
2389 $ try --optimize '2:0 & first(1 + 0 + 2)'
2390 (and
2390 (and
2391 (range
2391 (range
2392 ('symbol', '2')
2392 ('symbol', '2')
2393 ('symbol', '0'))
2393 ('symbol', '0'))
2394 (func
2394 (func
2395 ('symbol', 'first')
2395 ('symbol', 'first')
2396 (or
2396 (or
2397 (list
2397 (list
2398 ('symbol', '1')
2398 ('symbol', '1')
2399 ('symbol', '0')
2399 ('symbol', '0')
2400 ('symbol', '2')))))
2400 ('symbol', '2')))))
2401 * optimized:
2401 * optimized:
2402 (and
2402 (and
2403 (range
2403 (range
2404 ('symbol', '2')
2404 ('symbol', '2')
2405 ('symbol', '0')
2405 ('symbol', '0')
2406 define)
2406 define)
2407 (func
2407 (func
2408 ('symbol', 'first')
2408 ('symbol', 'first')
2409 (func
2409 (func
2410 ('symbol', '_list')
2410 ('symbol', '_list')
2411 ('string', '1\x000\x002')
2411 ('string', '1\x000\x002')
2412 define)
2412 define)
2413 follow)
2413 follow)
2414 define)
2414 define)
2415 * set:
2415 * set:
2416 <filteredset
2416 <filteredset
2417 <baseset [1]>,
2417 <baseset [1]>,
2418 <spanset- 0:3>>
2418 <spanset- 0:3>>
2419 1
2419 1
2420
2420
2421 $ try --optimize '2:0 & not last(0 + 2 + 1)'
2421 $ try --optimize '2:0 & not last(0 + 2 + 1)'
2422 (and
2422 (and
2423 (range
2423 (range
2424 ('symbol', '2')
2424 ('symbol', '2')
2425 ('symbol', '0'))
2425 ('symbol', '0'))
2426 (not
2426 (not
2427 (func
2427 (func
2428 ('symbol', 'last')
2428 ('symbol', 'last')
2429 (or
2429 (or
2430 (list
2430 (list
2431 ('symbol', '0')
2431 ('symbol', '0')
2432 ('symbol', '2')
2432 ('symbol', '2')
2433 ('symbol', '1'))))))
2433 ('symbol', '1'))))))
2434 * optimized:
2434 * optimized:
2435 (difference
2435 (difference
2436 (range
2436 (range
2437 ('symbol', '2')
2437 ('symbol', '2')
2438 ('symbol', '0')
2438 ('symbol', '0')
2439 define)
2439 define)
2440 (func
2440 (func
2441 ('symbol', 'last')
2441 ('symbol', 'last')
2442 (func
2442 (func
2443 ('symbol', '_list')
2443 ('symbol', '_list')
2444 ('string', '0\x002\x001')
2444 ('string', '0\x002\x001')
2445 define)
2445 define)
2446 any)
2446 any)
2447 define)
2447 define)
2448 * set:
2448 * set:
2449 <filteredset
2449 <filteredset
2450 <spanset- 0:3>,
2450 <spanset- 0:3>,
2451 <not
2451 <not
2452 <baseset [1]>>>
2452 <baseset [1]>>>
2453 2
2453 2
2454 0
2454 0
2455
2455
2456 for 'A & (op)(B)', 'B' should not be affected by the order of 'A':
2456 for 'A & (op)(B)', 'B' should not be affected by the order of 'A':
2457
2457
2458 $ try --optimize '2:0 & (1 + 0 + 2):(0 + 2 + 1)'
2458 $ try --optimize '2:0 & (1 + 0 + 2):(0 + 2 + 1)'
2459 (and
2459 (and
2460 (range
2460 (range
2461 ('symbol', '2')
2461 ('symbol', '2')
2462 ('symbol', '0'))
2462 ('symbol', '0'))
2463 (range
2463 (range
2464 (group
2464 (group
2465 (or
2465 (or
2466 (list
2466 (list
2467 ('symbol', '1')
2467 ('symbol', '1')
2468 ('symbol', '0')
2468 ('symbol', '0')
2469 ('symbol', '2'))))
2469 ('symbol', '2'))))
2470 (group
2470 (group
2471 (or
2471 (or
2472 (list
2472 (list
2473 ('symbol', '0')
2473 ('symbol', '0')
2474 ('symbol', '2')
2474 ('symbol', '2')
2475 ('symbol', '1'))))))
2475 ('symbol', '1'))))))
2476 * optimized:
2476 * optimized:
2477 (and
2477 (and
2478 (range
2478 (range
2479 ('symbol', '2')
2479 ('symbol', '2')
2480 ('symbol', '0')
2480 ('symbol', '0')
2481 define)
2481 define)
2482 (range
2482 (range
2483 (func
2483 (func
2484 ('symbol', '_list')
2484 ('symbol', '_list')
2485 ('string', '1\x000\x002')
2485 ('string', '1\x000\x002')
2486 define)
2486 define)
2487 (func
2487 (func
2488 ('symbol', '_list')
2488 ('symbol', '_list')
2489 ('string', '0\x002\x001')
2489 ('string', '0\x002\x001')
2490 define)
2490 define)
2491 follow)
2491 follow)
2492 define)
2492 define)
2493 * set:
2493 * set:
2494 <filteredset
2494 <filteredset
2495 <spanset- 0:3>,
2495 <spanset- 0:3>,
2496 <baseset [1]>>
2496 <baseset [1]>>
2497 1
2497 1
2498
2498
2499 'A & B' can be rewritten as 'B & A' by weight, but that's fine as long as
2499 'A & B' can be rewritten as 'B & A' by weight, but that's fine as long as
2500 the ordering rule is determined before the rewrite; in this example,
2500 the ordering rule is determined before the rewrite; in this example,
2501 'B' follows the order of the initial set, which is the same order as 'A'
2501 'B' follows the order of the initial set, which is the same order as 'A'
2502 since 'A' also follows the order:
2502 since 'A' also follows the order:
2503
2503
2504 $ try --optimize 'contains("glob:*") & (2 + 0 + 1)'
2504 $ try --optimize 'contains("glob:*") & (2 + 0 + 1)'
2505 (and
2505 (and
2506 (func
2506 (func
2507 ('symbol', 'contains')
2507 ('symbol', 'contains')
2508 ('string', 'glob:*'))
2508 ('string', 'glob:*'))
2509 (group
2509 (group
2510 (or
2510 (or
2511 (list
2511 (list
2512 ('symbol', '2')
2512 ('symbol', '2')
2513 ('symbol', '0')
2513 ('symbol', '0')
2514 ('symbol', '1')))))
2514 ('symbol', '1')))))
2515 * optimized:
2515 * optimized:
2516 (and
2516 (and
2517 (func
2517 (func
2518 ('symbol', '_list')
2518 ('symbol', '_list')
2519 ('string', '2\x000\x001')
2519 ('string', '2\x000\x001')
2520 follow)
2520 follow)
2521 (func
2521 (func
2522 ('symbol', 'contains')
2522 ('symbol', 'contains')
2523 ('string', 'glob:*')
2523 ('string', 'glob:*')
2524 define)
2524 define)
2525 define)
2525 define)
2526 * set:
2526 * set:
2527 <filteredset
2527 <filteredset
2528 <baseset+ [0, 1, 2]>,
2528 <baseset+ [0, 1, 2]>,
2529 <contains 'glob:*'>>
2529 <contains 'glob:*'>>
2530 0
2530 0
2531 1
2531 1
2532 2
2532 2
2533
2533
2534 and in this example, 'A & B' is rewritten as 'B & A', but 'A' overrides
2534 and in this example, 'A & B' is rewritten as 'B & A', but 'A' overrides
2535 the order appropriately:
2535 the order appropriately:
2536
2536
2537 $ try --optimize 'reverse(contains("glob:*")) & (0 + 2 + 1)'
2537 $ try --optimize 'reverse(contains("glob:*")) & (0 + 2 + 1)'
2538 (and
2538 (and
2539 (func
2539 (func
2540 ('symbol', 'reverse')
2540 ('symbol', 'reverse')
2541 (func
2541 (func
2542 ('symbol', 'contains')
2542 ('symbol', 'contains')
2543 ('string', 'glob:*')))
2543 ('string', 'glob:*')))
2544 (group
2544 (group
2545 (or
2545 (or
2546 (list
2546 (list
2547 ('symbol', '0')
2547 ('symbol', '0')
2548 ('symbol', '2')
2548 ('symbol', '2')
2549 ('symbol', '1')))))
2549 ('symbol', '1')))))
2550 * optimized:
2550 * optimized:
2551 (and
2551 (and
2552 (func
2552 (func
2553 ('symbol', '_list')
2553 ('symbol', '_list')
2554 ('string', '0\x002\x001')
2554 ('string', '0\x002\x001')
2555 follow)
2555 follow)
2556 (func
2556 (func
2557 ('symbol', 'reverse')
2557 ('symbol', 'reverse')
2558 (func
2558 (func
2559 ('symbol', 'contains')
2559 ('symbol', 'contains')
2560 ('string', 'glob:*')
2560 ('string', 'glob:*')
2561 define)
2561 define)
2562 define)
2562 define)
2563 define)
2563 define)
2564 * set:
2564 * set:
2565 <filteredset
2565 <filteredset
2566 <baseset- [0, 1, 2]>,
2566 <baseset- [0, 1, 2]>,
2567 <contains 'glob:*'>>
2567 <contains 'glob:*'>>
2568 2
2568 2
2569 1
2569 1
2570 0
2570 0
2571
2571
2572 'A + B' can be rewritten to 'B + A' by weight only when the order doesn't
2572 'A + B' can be rewritten to 'B + A' by weight only when the order doesn't
2573 matter (e.g. 'X & (A + B)' can be 'X & (B + A)', but '(A + B) & X' can't):
2573 matter (e.g. 'X & (A + B)' can be 'X & (B + A)', but '(A + B) & X' can't):
2574
2574
2575 $ try -p optimized '0:2 & (reverse(contains("a")) + 2)'
2575 $ try -p optimized '0:2 & (reverse(contains("a")) + 2)'
2576 * optimized:
2576 * optimized:
2577 (and
2577 (and
2578 (range
2578 (range
2579 ('symbol', '0')
2579 ('symbol', '0')
2580 ('symbol', '2')
2580 ('symbol', '2')
2581 define)
2581 define)
2582 (or
2582 (or
2583 (list
2583 (list
2584 ('symbol', '2')
2584 ('symbol', '2')
2585 (func
2585 (func
2586 ('symbol', 'reverse')
2586 ('symbol', 'reverse')
2587 (func
2587 (func
2588 ('symbol', 'contains')
2588 ('symbol', 'contains')
2589 ('string', 'a')
2589 ('string', 'a')
2590 define)
2590 define)
2591 follow))
2591 follow))
2592 follow)
2592 follow)
2593 define)
2593 define)
2594 * set:
2594 * set:
2595 <filteredset
2595 <filteredset
2596 <spanset+ 0:3>,
2596 <spanset+ 0:3>,
2597 <addset
2597 <addset
2598 <baseset [2]>,
2598 <baseset [2]>,
2599 <filteredset
2599 <filteredset
2600 <fullreposet+ 0:10>,
2600 <fullreposet+ 0:10>,
2601 <contains 'a'>>>>
2601 <contains 'a'>>>>
2602 0
2602 0
2603 1
2603 1
2604 2
2604 2
2605
2605
2606 $ try -p optimized '(reverse(contains("a")) + 2) & 0:2'
2606 $ try -p optimized '(reverse(contains("a")) + 2) & 0:2'
2607 * optimized:
2607 * optimized:
2608 (and
2608 (and
2609 (range
2609 (range
2610 ('symbol', '0')
2610 ('symbol', '0')
2611 ('symbol', '2')
2611 ('symbol', '2')
2612 follow)
2612 follow)
2613 (or
2613 (or
2614 (list
2614 (list
2615 (func
2615 (func
2616 ('symbol', 'reverse')
2616 ('symbol', 'reverse')
2617 (func
2617 (func
2618 ('symbol', 'contains')
2618 ('symbol', 'contains')
2619 ('string', 'a')
2619 ('string', 'a')
2620 define)
2620 define)
2621 define)
2621 define)
2622 ('symbol', '2'))
2622 ('symbol', '2'))
2623 define)
2623 define)
2624 define)
2624 define)
2625 * set:
2625 * set:
2626 <addset
2626 <addset
2627 <filteredset
2627 <filteredset
2628 <spanset- 0:3>,
2628 <spanset- 0:3>,
2629 <contains 'a'>>,
2629 <contains 'a'>>,
2630 <baseset [2]>>
2630 <baseset [2]>>
2631 1
2631 1
2632 0
2632 0
2633 2
2633 2
2634
2634
2635 test sort revset
2635 test sort revset
2636 --------------------------------------------
2636 --------------------------------------------
2637
2637
2638 test when adding two unordered revsets
2638 test when adding two unordered revsets
2639
2639
2640 $ log 'sort(keyword(issue) or modifies(b))'
2640 $ log 'sort(keyword(issue) or modifies(b))'
2641 4
2641 4
2642 6
2642 6
2643
2643
2644 test when sorting a reversed collection in the same way it is
2644 test when sorting a reversed collection in the same way it is
2645
2645
2646 $ log 'sort(reverse(all()), -rev)'
2646 $ log 'sort(reverse(all()), -rev)'
2647 9
2647 9
2648 8
2648 8
2649 7
2649 7
2650 6
2650 6
2651 5
2651 5
2652 4
2652 4
2653 3
2653 3
2654 2
2654 2
2655 1
2655 1
2656 0
2656 0
2657
2657
2658 test when sorting a reversed collection
2658 test when sorting a reversed collection
2659
2659
2660 $ log 'sort(reverse(all()), rev)'
2660 $ log 'sort(reverse(all()), rev)'
2661 0
2661 0
2662 1
2662 1
2663 2
2663 2
2664 3
2664 3
2665 4
2665 4
2666 5
2666 5
2667 6
2667 6
2668 7
2668 7
2669 8
2669 8
2670 9
2670 9
2671
2671
2672
2672
2673 test sorting two sorted collections in different orders
2673 test sorting two sorted collections in different orders
2674
2674
2675 $ log 'sort(outgoing() or reverse(removes(a)), rev)'
2675 $ log 'sort(outgoing() or reverse(removes(a)), rev)'
2676 2
2676 2
2677 6
2677 6
2678 8
2678 8
2679 9
2679 9
2680
2680
2681 test sorting two sorted collections in different orders backwards
2681 test sorting two sorted collections in different orders backwards
2682
2682
2683 $ log 'sort(outgoing() or reverse(removes(a)), -rev)'
2683 $ log 'sort(outgoing() or reverse(removes(a)), -rev)'
2684 9
2684 9
2685 8
2685 8
2686 6
2686 6
2687 2
2687 2
2688
2688
2689 test empty sort key which is noop
2689 test empty sort key which is noop
2690
2690
2691 $ log 'sort(0 + 2 + 1, "")'
2691 $ log 'sort(0 + 2 + 1, "")'
2692 0
2692 0
2693 2
2693 2
2694 1
2694 1
2695
2695
2696 test invalid sort keys
2696 test invalid sort keys
2697
2697
2698 $ log 'sort(all(), -invalid)'
2698 $ log 'sort(all(), -invalid)'
2699 hg: parse error: unknown sort key '-invalid'
2699 hg: parse error: unknown sort key '-invalid'
2700 [255]
2700 [255]
2701
2701
2702 $ cd ..
2702 $ cd ..
2703
2703
2704 test sorting by multiple keys including variable-length strings
2704 test sorting by multiple keys including variable-length strings
2705
2705
2706 $ hg init sorting
2706 $ hg init sorting
2707 $ cd sorting
2707 $ cd sorting
2708 $ cat <<EOF >> .hg/hgrc
2708 $ cat <<EOF >> .hg/hgrc
2709 > [ui]
2709 > [ui]
2710 > logtemplate = '{rev} {branch|p5}{desc|p5}{author|p5}{date|hgdate}\n'
2710 > logtemplate = '{rev} {branch|p5}{desc|p5}{author|p5}{date|hgdate}\n'
2711 > [templatealias]
2711 > [templatealias]
2712 > p5(s) = pad(s, 5)
2712 > p5(s) = pad(s, 5)
2713 > EOF
2713 > EOF
2714 $ hg branch -qf b12
2714 $ hg branch -qf b12
2715 $ hg ci -m m111 -u u112 -d '111 10800'
2715 $ hg ci -m m111 -u u112 -d '111 10800'
2716 $ hg branch -qf b11
2716 $ hg branch -qf b11
2717 $ hg ci -m m12 -u u111 -d '112 7200'
2717 $ hg ci -m m12 -u u111 -d '112 7200'
2718 $ hg branch -qf b111
2718 $ hg branch -qf b111
2719 $ hg ci -m m11 -u u12 -d '111 3600'
2719 $ hg ci -m m11 -u u12 -d '111 3600'
2720 $ hg branch -qf b112
2720 $ hg branch -qf b112
2721 $ hg ci -m m111 -u u11 -d '120 0'
2721 $ hg ci -m m111 -u u11 -d '120 0'
2722 $ hg branch -qf b111
2722 $ hg branch -qf b111
2723 $ hg ci -m m112 -u u111 -d '110 14400'
2723 $ hg ci -m m112 -u u111 -d '110 14400'
2724 created new head
2724 created new head
2725
2725
2726 compare revisions (has fast path):
2726 compare revisions (has fast path):
2727
2727
2728 $ hg log -r 'sort(all(), rev)'
2728 $ hg log -r 'sort(all(), rev)'
2729 0 b12 m111 u112 111 10800
2729 0 b12 m111 u112 111 10800
2730 1 b11 m12 u111 112 7200
2730 1 b11 m12 u111 112 7200
2731 2 b111 m11 u12 111 3600
2731 2 b111 m11 u12 111 3600
2732 3 b112 m111 u11 120 0
2732 3 b112 m111 u11 120 0
2733 4 b111 m112 u111 110 14400
2733 4 b111 m112 u111 110 14400
2734
2734
2735 $ hg log -r 'sort(all(), -rev)'
2735 $ hg log -r 'sort(all(), -rev)'
2736 4 b111 m112 u111 110 14400
2736 4 b111 m112 u111 110 14400
2737 3 b112 m111 u11 120 0
2737 3 b112 m111 u11 120 0
2738 2 b111 m11 u12 111 3600
2738 2 b111 m11 u12 111 3600
2739 1 b11 m12 u111 112 7200
2739 1 b11 m12 u111 112 7200
2740 0 b12 m111 u112 111 10800
2740 0 b12 m111 u112 111 10800
2741
2741
2742 compare variable-length strings (issue5218):
2742 compare variable-length strings (issue5218):
2743
2743
2744 $ hg log -r 'sort(all(), branch)'
2744 $ hg log -r 'sort(all(), branch)'
2745 1 b11 m12 u111 112 7200
2745 1 b11 m12 u111 112 7200
2746 2 b111 m11 u12 111 3600
2746 2 b111 m11 u12 111 3600
2747 4 b111 m112 u111 110 14400
2747 4 b111 m112 u111 110 14400
2748 3 b112 m111 u11 120 0
2748 3 b112 m111 u11 120 0
2749 0 b12 m111 u112 111 10800
2749 0 b12 m111 u112 111 10800
2750
2750
2751 $ hg log -r 'sort(all(), -branch)'
2751 $ hg log -r 'sort(all(), -branch)'
2752 0 b12 m111 u112 111 10800
2752 0 b12 m111 u112 111 10800
2753 3 b112 m111 u11 120 0
2753 3 b112 m111 u11 120 0
2754 2 b111 m11 u12 111 3600
2754 2 b111 m11 u12 111 3600
2755 4 b111 m112 u111 110 14400
2755 4 b111 m112 u111 110 14400
2756 1 b11 m12 u111 112 7200
2756 1 b11 m12 u111 112 7200
2757
2757
2758 $ hg log -r 'sort(all(), desc)'
2758 $ hg log -r 'sort(all(), desc)'
2759 2 b111 m11 u12 111 3600
2759 2 b111 m11 u12 111 3600
2760 0 b12 m111 u112 111 10800
2760 0 b12 m111 u112 111 10800
2761 3 b112 m111 u11 120 0
2761 3 b112 m111 u11 120 0
2762 4 b111 m112 u111 110 14400
2762 4 b111 m112 u111 110 14400
2763 1 b11 m12 u111 112 7200
2763 1 b11 m12 u111 112 7200
2764
2764
2765 $ hg log -r 'sort(all(), -desc)'
2765 $ hg log -r 'sort(all(), -desc)'
2766 1 b11 m12 u111 112 7200
2766 1 b11 m12 u111 112 7200
2767 4 b111 m112 u111 110 14400
2767 4 b111 m112 u111 110 14400
2768 0 b12 m111 u112 111 10800
2768 0 b12 m111 u112 111 10800
2769 3 b112 m111 u11 120 0
2769 3 b112 m111 u11 120 0
2770 2 b111 m11 u12 111 3600
2770 2 b111 m11 u12 111 3600
2771
2771
2772 $ hg log -r 'sort(all(), user)'
2772 $ hg log -r 'sort(all(), user)'
2773 3 b112 m111 u11 120 0
2773 3 b112 m111 u11 120 0
2774 1 b11 m12 u111 112 7200
2774 1 b11 m12 u111 112 7200
2775 4 b111 m112 u111 110 14400
2775 4 b111 m112 u111 110 14400
2776 0 b12 m111 u112 111 10800
2776 0 b12 m111 u112 111 10800
2777 2 b111 m11 u12 111 3600
2777 2 b111 m11 u12 111 3600
2778
2778
2779 $ hg log -r 'sort(all(), -user)'
2779 $ hg log -r 'sort(all(), -user)'
2780 2 b111 m11 u12 111 3600
2780 2 b111 m11 u12 111 3600
2781 0 b12 m111 u112 111 10800
2781 0 b12 m111 u112 111 10800
2782 1 b11 m12 u111 112 7200
2782 1 b11 m12 u111 112 7200
2783 4 b111 m112 u111 110 14400
2783 4 b111 m112 u111 110 14400
2784 3 b112 m111 u11 120 0
2784 3 b112 m111 u11 120 0
2785
2785
2786 compare dates (tz offset should have no effect):
2786 compare dates (tz offset should have no effect):
2787
2787
2788 $ hg log -r 'sort(all(), date)'
2788 $ hg log -r 'sort(all(), date)'
2789 4 b111 m112 u111 110 14400
2789 4 b111 m112 u111 110 14400
2790 0 b12 m111 u112 111 10800
2790 0 b12 m111 u112 111 10800
2791 2 b111 m11 u12 111 3600
2791 2 b111 m11 u12 111 3600
2792 1 b11 m12 u111 112 7200
2792 1 b11 m12 u111 112 7200
2793 3 b112 m111 u11 120 0
2793 3 b112 m111 u11 120 0
2794
2794
2795 $ hg log -r 'sort(all(), -date)'
2795 $ hg log -r 'sort(all(), -date)'
2796 3 b112 m111 u11 120 0
2796 3 b112 m111 u11 120 0
2797 1 b11 m12 u111 112 7200
2797 1 b11 m12 u111 112 7200
2798 0 b12 m111 u112 111 10800
2798 0 b12 m111 u112 111 10800
2799 2 b111 m11 u12 111 3600
2799 2 b111 m11 u12 111 3600
2800 4 b111 m112 u111 110 14400
2800 4 b111 m112 u111 110 14400
2801
2801
2802 be aware that 'sort(x, -k)' is not exactly the same as 'reverse(sort(x, k))'
2802 be aware that 'sort(x, -k)' is not exactly the same as 'reverse(sort(x, k))'
2803 because '-k' reverses the comparison, not the list itself:
2803 because '-k' reverses the comparison, not the list itself:
2804
2804
2805 $ hg log -r 'sort(0 + 2, date)'
2805 $ hg log -r 'sort(0 + 2, date)'
2806 0 b12 m111 u112 111 10800
2806 0 b12 m111 u112 111 10800
2807 2 b111 m11 u12 111 3600
2807 2 b111 m11 u12 111 3600
2808
2808
2809 $ hg log -r 'sort(0 + 2, -date)'
2809 $ hg log -r 'sort(0 + 2, -date)'
2810 0 b12 m111 u112 111 10800
2810 0 b12 m111 u112 111 10800
2811 2 b111 m11 u12 111 3600
2811 2 b111 m11 u12 111 3600
2812
2812
2813 $ hg log -r 'reverse(sort(0 + 2, date))'
2813 $ hg log -r 'reverse(sort(0 + 2, date))'
2814 2 b111 m11 u12 111 3600
2814 2 b111 m11 u12 111 3600
2815 0 b12 m111 u112 111 10800
2815 0 b12 m111 u112 111 10800
2816
2816
2817 sort by multiple keys:
2817 sort by multiple keys:
2818
2818
2819 $ hg log -r 'sort(all(), "branch -rev")'
2819 $ hg log -r 'sort(all(), "branch -rev")'
2820 1 b11 m12 u111 112 7200
2820 1 b11 m12 u111 112 7200
2821 4 b111 m112 u111 110 14400
2821 4 b111 m112 u111 110 14400
2822 2 b111 m11 u12 111 3600
2822 2 b111 m11 u12 111 3600
2823 3 b112 m111 u11 120 0
2823 3 b112 m111 u11 120 0
2824 0 b12 m111 u112 111 10800
2824 0 b12 m111 u112 111 10800
2825
2825
2826 $ hg log -r 'sort(all(), "-desc -date")'
2826 $ hg log -r 'sort(all(), "-desc -date")'
2827 1 b11 m12 u111 112 7200
2827 1 b11 m12 u111 112 7200
2828 4 b111 m112 u111 110 14400
2828 4 b111 m112 u111 110 14400
2829 3 b112 m111 u11 120 0
2829 3 b112 m111 u11 120 0
2830 0 b12 m111 u112 111 10800
2830 0 b12 m111 u112 111 10800
2831 2 b111 m11 u12 111 3600
2831 2 b111 m11 u12 111 3600
2832
2832
2833 $ hg log -r 'sort(all(), "user -branch date rev")'
2833 $ hg log -r 'sort(all(), "user -branch date rev")'
2834 3 b112 m111 u11 120 0
2834 3 b112 m111 u11 120 0
2835 4 b111 m112 u111 110 14400
2835 4 b111 m112 u111 110 14400
2836 1 b11 m12 u111 112 7200
2836 1 b11 m12 u111 112 7200
2837 0 b12 m111 u112 111 10800
2837 0 b12 m111 u112 111 10800
2838 2 b111 m11 u12 111 3600
2838 2 b111 m11 u12 111 3600
2839
2839
2840 toposort prioritises graph branches
2840 toposort prioritises graph branches
2841
2841
2842 $ hg up 2
2842 $ hg up 2
2843 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
2843 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
2844 $ touch a
2844 $ touch a
2845 $ hg addremove
2845 $ hg addremove
2846 adding a
2846 adding a
2847 $ hg ci -m 't1' -u 'tu' -d '130 0'
2847 $ hg ci -m 't1' -u 'tu' -d '130 0'
2848 created new head
2848 created new head
2849 $ echo 'a' >> a
2849 $ echo 'a' >> a
2850 $ hg ci -m 't2' -u 'tu' -d '130 0'
2850 $ hg ci -m 't2' -u 'tu' -d '130 0'
2851 $ hg book book1
2851 $ hg book book1
2852 $ hg up 4
2852 $ hg up 4
2853 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
2853 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
2854 (leaving bookmark book1)
2854 (leaving bookmark book1)
2855 $ touch a
2855 $ touch a
2856 $ hg addremove
2856 $ hg addremove
2857 adding a
2857 adding a
2858 $ hg ci -m 't3' -u 'tu' -d '130 0'
2858 $ hg ci -m 't3' -u 'tu' -d '130 0'
2859
2859
2860 $ hg log -r 'sort(all(), topo)'
2860 $ hg log -r 'sort(all(), topo)'
2861 7 b111 t3 tu 130 0
2861 7 b111 t3 tu 130 0
2862 4 b111 m112 u111 110 14400
2862 4 b111 m112 u111 110 14400
2863 3 b112 m111 u11 120 0
2863 3 b112 m111 u11 120 0
2864 6 b111 t2 tu 130 0
2864 6 b111 t2 tu 130 0
2865 5 b111 t1 tu 130 0
2865 5 b111 t1 tu 130 0
2866 2 b111 m11 u12 111 3600
2866 2 b111 m11 u12 111 3600
2867 1 b11 m12 u111 112 7200
2867 1 b11 m12 u111 112 7200
2868 0 b12 m111 u112 111 10800
2868 0 b12 m111 u112 111 10800
2869
2869
2870 $ hg log -r 'sort(all(), -topo)'
2870 $ hg log -r 'sort(all(), -topo)'
2871 0 b12 m111 u112 111 10800
2871 0 b12 m111 u112 111 10800
2872 1 b11 m12 u111 112 7200
2872 1 b11 m12 u111 112 7200
2873 2 b111 m11 u12 111 3600
2873 2 b111 m11 u12 111 3600
2874 5 b111 t1 tu 130 0
2874 5 b111 t1 tu 130 0
2875 6 b111 t2 tu 130 0
2875 6 b111 t2 tu 130 0
2876 3 b112 m111 u11 120 0
2876 3 b112 m111 u11 120 0
2877 4 b111 m112 u111 110 14400
2877 4 b111 m112 u111 110 14400
2878 7 b111 t3 tu 130 0
2878 7 b111 t3 tu 130 0
2879
2879
2880 $ hg log -r 'sort(all(), topo, topo.firstbranch=book1)'
2880 $ hg log -r 'sort(all(), topo, topo.firstbranch=book1)'
2881 6 b111 t2 tu 130 0
2881 6 b111 t2 tu 130 0
2882 5 b111 t1 tu 130 0
2882 5 b111 t1 tu 130 0
2883 7 b111 t3 tu 130 0
2883 7 b111 t3 tu 130 0
2884 4 b111 m112 u111 110 14400
2884 4 b111 m112 u111 110 14400
2885 3 b112 m111 u11 120 0
2885 3 b112 m111 u11 120 0
2886 2 b111 m11 u12 111 3600
2886 2 b111 m11 u12 111 3600
2887 1 b11 m12 u111 112 7200
2887 1 b11 m12 u111 112 7200
2888 0 b12 m111 u112 111 10800
2888 0 b12 m111 u112 111 10800
2889
2889
2890 topographical sorting can't be combined with other sort keys, and you can't
2890 topographical sorting can't be combined with other sort keys, and you can't
2891 use the topo.firstbranch option when topo sort is not active:
2891 use the topo.firstbranch option when topo sort is not active:
2892
2892
2893 $ hg log -r 'sort(all(), "topo user")'
2893 $ hg log -r 'sort(all(), "topo user")'
2894 hg: parse error: topo sort order cannot be combined with other sort keys
2894 hg: parse error: topo sort order cannot be combined with other sort keys
2895 [255]
2895 [255]
2896
2896
2897 $ hg log -r 'sort(all(), user, topo.firstbranch=book1)'
2897 $ hg log -r 'sort(all(), user, topo.firstbranch=book1)'
2898 hg: parse error: topo.firstbranch can only be used when using the topo sort key
2898 hg: parse error: topo.firstbranch can only be used when using the topo sort key
2899 [255]
2899 [255]
2900
2900
2901 topo.firstbranch should accept any kind of expressions:
2901 topo.firstbranch should accept any kind of expressions:
2902
2902
2903 $ hg log -r 'sort(0, topo, topo.firstbranch=(book1))'
2903 $ hg log -r 'sort(0, topo, topo.firstbranch=(book1))'
2904 0 b12 m111 u112 111 10800
2904 0 b12 m111 u112 111 10800
2905
2905
2906 $ cd ..
2906 $ cd ..
2907 $ cd repo
2907 $ cd repo
2908
2908
2909 test subtracting something from an addset
2909 test subtracting something from an addset
2910
2910
2911 $ log '(outgoing() or removes(a)) - removes(a)'
2911 $ log '(outgoing() or removes(a)) - removes(a)'
2912 8
2912 8
2913 9
2913 9
2914
2914
2915 test intersecting something with an addset
2915 test intersecting something with an addset
2916
2916
2917 $ log 'parents(outgoing() or removes(a))'
2917 $ log 'parents(outgoing() or removes(a))'
2918 1
2918 1
2919 4
2919 4
2920 5
2920 5
2921 8
2921 8
2922
2922
2923 test that `or` operation combines elements in the right order:
2923 test that `or` operation combines elements in the right order:
2924
2924
2925 $ log '3:4 or 2:5'
2925 $ log '3:4 or 2:5'
2926 3
2926 3
2927 4
2927 4
2928 2
2928 2
2929 5
2929 5
2930 $ log '3:4 or 5:2'
2930 $ log '3:4 or 5:2'
2931 3
2931 3
2932 4
2932 4
2933 5
2933 5
2934 2
2934 2
2935 $ log 'sort(3:4 or 2:5)'
2935 $ log 'sort(3:4 or 2:5)'
2936 2
2936 2
2937 3
2937 3
2938 4
2938 4
2939 5
2939 5
2940 $ log 'sort(3:4 or 5:2)'
2940 $ log 'sort(3:4 or 5:2)'
2941 2
2941 2
2942 3
2942 3
2943 4
2943 4
2944 5
2944 5
2945
2945
2946 test that more than one `-r`s are combined in the right order and deduplicated:
2946 test that more than one `-r`s are combined in the right order and deduplicated:
2947
2947
2948 $ hg log -T '{rev}\n' -r 3 -r 3 -r 4 -r 5:2 -r 'ancestors(4)'
2948 $ hg log -T '{rev}\n' -r 3 -r 3 -r 4 -r 5:2 -r 'ancestors(4)'
2949 3
2949 3
2950 4
2950 4
2951 5
2951 5
2952 2
2952 2
2953 0
2953 0
2954 1
2954 1
2955
2955
2956 test that `or` operation skips duplicated revisions from right-hand side
2956 test that `or` operation skips duplicated revisions from right-hand side
2957
2957
2958 $ try 'reverse(1::5) or ancestors(4)'
2958 $ try 'reverse(1::5) or ancestors(4)'
2959 (or
2959 (or
2960 (list
2960 (list
2961 (func
2961 (func
2962 ('symbol', 'reverse')
2962 ('symbol', 'reverse')
2963 (dagrange
2963 (dagrange
2964 ('symbol', '1')
2964 ('symbol', '1')
2965 ('symbol', '5')))
2965 ('symbol', '5')))
2966 (func
2966 (func
2967 ('symbol', 'ancestors')
2967 ('symbol', 'ancestors')
2968 ('symbol', '4'))))
2968 ('symbol', '4'))))
2969 * set:
2969 * set:
2970 <addset
2970 <addset
2971 <baseset- [1, 3, 5]>,
2971 <baseset- [1, 3, 5]>,
2972 <generatorset+>>
2972 <generatorset+>>
2973 5
2973 5
2974 3
2974 3
2975 1
2975 1
2976 0
2976 0
2977 2
2977 2
2978 4
2978 4
2979 $ try 'sort(ancestors(4) or reverse(1::5))'
2979 $ try 'sort(ancestors(4) or reverse(1::5))'
2980 (func
2980 (func
2981 ('symbol', 'sort')
2981 ('symbol', 'sort')
2982 (or
2982 (or
2983 (list
2983 (list
2984 (func
2984 (func
2985 ('symbol', 'ancestors')
2985 ('symbol', 'ancestors')
2986 ('symbol', '4'))
2986 ('symbol', '4'))
2987 (func
2987 (func
2988 ('symbol', 'reverse')
2988 ('symbol', 'reverse')
2989 (dagrange
2989 (dagrange
2990 ('symbol', '1')
2990 ('symbol', '1')
2991 ('symbol', '5'))))))
2991 ('symbol', '5'))))))
2992 * set:
2992 * set:
2993 <addset+
2993 <addset+
2994 <generatorset+>,
2994 <generatorset+>,
2995 <baseset- [1, 3, 5]>>
2995 <baseset- [1, 3, 5]>>
2996 0
2996 0
2997 1
2997 1
2998 2
2998 2
2999 3
2999 3
3000 4
3000 4
3001 5
3001 5
3002
3002
3003 test optimization of trivial `or` operation
3003 test optimization of trivial `or` operation
3004
3004
3005 $ try --optimize '0|(1)|"2"|-2|tip|null'
3005 $ try --optimize '0|(1)|"2"|-2|tip|null'
3006 (or
3006 (or
3007 (list
3007 (list
3008 ('symbol', '0')
3008 ('symbol', '0')
3009 (group
3009 (group
3010 ('symbol', '1'))
3010 ('symbol', '1'))
3011 ('string', '2')
3011 ('string', '2')
3012 (negate
3012 (negate
3013 ('symbol', '2'))
3013 ('symbol', '2'))
3014 ('symbol', 'tip')
3014 ('symbol', 'tip')
3015 ('symbol', 'null')))
3015 ('symbol', 'null')))
3016 * optimized:
3016 * optimized:
3017 (func
3017 (func
3018 ('symbol', '_list')
3018 ('symbol', '_list')
3019 ('string', '0\x001\x002\x00-2\x00tip\x00null')
3019 ('string', '0\x001\x002\x00-2\x00tip\x00null')
3020 define)
3020 define)
3021 * set:
3021 * set:
3022 <baseset [0, 1, 2, 8, 9, -1]>
3022 <baseset [0, 1, 2, 8, 9, -1]>
3023 0
3023 0
3024 1
3024 1
3025 2
3025 2
3026 8
3026 8
3027 9
3027 9
3028 -1
3028 -1
3029
3029
3030 $ try --optimize '0|1|2:3'
3030 $ try --optimize '0|1|2:3'
3031 (or
3031 (or
3032 (list
3032 (list
3033 ('symbol', '0')
3033 ('symbol', '0')
3034 ('symbol', '1')
3034 ('symbol', '1')
3035 (range
3035 (range
3036 ('symbol', '2')
3036 ('symbol', '2')
3037 ('symbol', '3'))))
3037 ('symbol', '3'))))
3038 * optimized:
3038 * optimized:
3039 (or
3039 (or
3040 (list
3040 (list
3041 (func
3041 (func
3042 ('symbol', '_list')
3042 ('symbol', '_list')
3043 ('string', '0\x001')
3043 ('string', '0\x001')
3044 define)
3044 define)
3045 (range
3045 (range
3046 ('symbol', '2')
3046 ('symbol', '2')
3047 ('symbol', '3')
3047 ('symbol', '3')
3048 define))
3048 define))
3049 define)
3049 define)
3050 * set:
3050 * set:
3051 <addset
3051 <addset
3052 <baseset [0, 1]>,
3052 <baseset [0, 1]>,
3053 <spanset+ 2:4>>
3053 <spanset+ 2:4>>
3054 0
3054 0
3055 1
3055 1
3056 2
3056 2
3057 3
3057 3
3058
3058
3059 $ try --optimize '0:1|2|3:4|5|6'
3059 $ try --optimize '0:1|2|3:4|5|6'
3060 (or
3060 (or
3061 (list
3061 (list
3062 (range
3062 (range
3063 ('symbol', '0')
3063 ('symbol', '0')
3064 ('symbol', '1'))
3064 ('symbol', '1'))
3065 ('symbol', '2')
3065 ('symbol', '2')
3066 (range
3066 (range
3067 ('symbol', '3')
3067 ('symbol', '3')
3068 ('symbol', '4'))
3068 ('symbol', '4'))
3069 ('symbol', '5')
3069 ('symbol', '5')
3070 ('symbol', '6')))
3070 ('symbol', '6')))
3071 * optimized:
3071 * optimized:
3072 (or
3072 (or
3073 (list
3073 (list
3074 (range
3074 (range
3075 ('symbol', '0')
3075 ('symbol', '0')
3076 ('symbol', '1')
3076 ('symbol', '1')
3077 define)
3077 define)
3078 ('symbol', '2')
3078 ('symbol', '2')
3079 (range
3079 (range
3080 ('symbol', '3')
3080 ('symbol', '3')
3081 ('symbol', '4')
3081 ('symbol', '4')
3082 define)
3082 define)
3083 (func
3083 (func
3084 ('symbol', '_list')
3084 ('symbol', '_list')
3085 ('string', '5\x006')
3085 ('string', '5\x006')
3086 define))
3086 define))
3087 define)
3087 define)
3088 * set:
3088 * set:
3089 <addset
3089 <addset
3090 <addset
3090 <addset
3091 <spanset+ 0:2>,
3091 <spanset+ 0:2>,
3092 <baseset [2]>>,
3092 <baseset [2]>>,
3093 <addset
3093 <addset
3094 <spanset+ 3:5>,
3094 <spanset+ 3:5>,
3095 <baseset [5, 6]>>>
3095 <baseset [5, 6]>>>
3096 0
3096 0
3097 1
3097 1
3098 2
3098 2
3099 3
3099 3
3100 4
3100 4
3101 5
3101 5
3102 6
3102 6
3103
3103
3104 unoptimized `or` looks like this
3104 unoptimized `or` looks like this
3105
3105
3106 $ try --no-optimized -p analyzed '0|1|2|3|4'
3106 $ try --no-optimized -p analyzed '0|1|2|3|4'
3107 * analyzed:
3107 * analyzed:
3108 (or
3108 (or
3109 (list
3109 (list
3110 ('symbol', '0')
3110 ('symbol', '0')
3111 ('symbol', '1')
3111 ('symbol', '1')
3112 ('symbol', '2')
3112 ('symbol', '2')
3113 ('symbol', '3')
3113 ('symbol', '3')
3114 ('symbol', '4'))
3114 ('symbol', '4'))
3115 define)
3115 define)
3116 * set:
3116 * set:
3117 <addset
3117 <addset
3118 <addset
3118 <addset
3119 <baseset [0]>,
3119 <baseset [0]>,
3120 <baseset [1]>>,
3120 <baseset [1]>>,
3121 <addset
3121 <addset
3122 <baseset [2]>,
3122 <baseset [2]>,
3123 <addset
3123 <addset
3124 <baseset [3]>,
3124 <baseset [3]>,
3125 <baseset [4]>>>>
3125 <baseset [4]>>>>
3126 0
3126 0
3127 1
3127 1
3128 2
3128 2
3129 3
3129 3
3130 4
3130 4
3131
3131
3132 test that `_list` should be narrowed by provided `subset`
3132 test that `_list` should be narrowed by provided `subset`
3133
3133
3134 $ log '0:2 and (null|1|2|3)'
3134 $ log '0:2 and (null|1|2|3)'
3135 1
3135 1
3136 2
3136 2
3137
3137
3138 test that `_list` should remove duplicates
3138 test that `_list` should remove duplicates
3139
3139
3140 $ log '0|1|2|1|2|-1|tip'
3140 $ log '0|1|2|1|2|-1|tip'
3141 0
3141 0
3142 1
3142 1
3143 2
3143 2
3144 9
3144 9
3145
3145
3146 test unknown revision in `_list`
3146 test unknown revision in `_list`
3147
3147
3148 $ log '0|unknown'
3148 $ log '0|unknown'
3149 abort: unknown revision 'unknown'!
3149 abort: unknown revision 'unknown'!
3150 [255]
3150 [255]
3151
3151
3152 test integer range in `_list`
3152 test integer range in `_list`
3153
3153
3154 $ log '-1|-10'
3154 $ log '-1|-10'
3155 9
3155 9
3156 0
3156 0
3157
3157
3158 $ log '-10|-11'
3158 $ log '-10|-11'
3159 abort: unknown revision '-11'!
3159 abort: unknown revision '-11'!
3160 [255]
3160 [255]
3161
3161
3162 $ log '9|10'
3162 $ log '9|10'
3163 abort: unknown revision '10'!
3163 abort: unknown revision '10'!
3164 [255]
3164 [255]
3165
3165
3166 test '0000' != '0' in `_list`
3166 test '0000' != '0' in `_list`
3167
3167
3168 $ log '0|0000'
3168 $ log '0|0000'
3169 0
3169 0
3170 -1
3170 -1
3171
3171
3172 test ',' in `_list`
3172 test ',' in `_list`
3173 $ log '0,1'
3173 $ log '0,1'
3174 hg: parse error: can't use a list in this context
3174 hg: parse error: can't use a list in this context
3175 (see hg help "revsets.x or y")
3175 (see hg help "revsets.x or y")
3176 [255]
3176 [255]
3177 $ try '0,1,2'
3177 $ try '0,1,2'
3178 (list
3178 (list
3179 ('symbol', '0')
3179 ('symbol', '0')
3180 ('symbol', '1')
3180 ('symbol', '1')
3181 ('symbol', '2'))
3181 ('symbol', '2'))
3182 hg: parse error: can't use a list in this context
3182 hg: parse error: can't use a list in this context
3183 (see hg help "revsets.x or y")
3183 (see hg help "revsets.x or y")
3184 [255]
3184 [255]
3185
3185
3186 test that chained `or` operations make balanced addsets
3186 test that chained `or` operations make balanced addsets
3187
3187
3188 $ try '0:1|1:2|2:3|3:4|4:5'
3188 $ try '0:1|1:2|2:3|3:4|4:5'
3189 (or
3189 (or
3190 (list
3190 (list
3191 (range
3191 (range
3192 ('symbol', '0')
3192 ('symbol', '0')
3193 ('symbol', '1'))
3193 ('symbol', '1'))
3194 (range
3194 (range
3195 ('symbol', '1')
3195 ('symbol', '1')
3196 ('symbol', '2'))
3196 ('symbol', '2'))
3197 (range
3197 (range
3198 ('symbol', '2')
3198 ('symbol', '2')
3199 ('symbol', '3'))
3199 ('symbol', '3'))
3200 (range
3200 (range
3201 ('symbol', '3')
3201 ('symbol', '3')
3202 ('symbol', '4'))
3202 ('symbol', '4'))
3203 (range
3203 (range
3204 ('symbol', '4')
3204 ('symbol', '4')
3205 ('symbol', '5'))))
3205 ('symbol', '5'))))
3206 * set:
3206 * set:
3207 <addset
3207 <addset
3208 <addset
3208 <addset
3209 <spanset+ 0:2>,
3209 <spanset+ 0:2>,
3210 <spanset+ 1:3>>,
3210 <spanset+ 1:3>>,
3211 <addset
3211 <addset
3212 <spanset+ 2:4>,
3212 <spanset+ 2:4>,
3213 <addset
3213 <addset
3214 <spanset+ 3:5>,
3214 <spanset+ 3:5>,
3215 <spanset+ 4:6>>>>
3215 <spanset+ 4:6>>>>
3216 0
3216 0
3217 1
3217 1
3218 2
3218 2
3219 3
3219 3
3220 4
3220 4
3221 5
3221 5
3222
3222
3223 no crash by empty group "()" while optimizing `or` operations
3223 no crash by empty group "()" while optimizing `or` operations
3224
3224
3225 $ try --optimize '0|()'
3225 $ try --optimize '0|()'
3226 (or
3226 (or
3227 (list
3227 (list
3228 ('symbol', '0')
3228 ('symbol', '0')
3229 (group
3229 (group
3230 None)))
3230 None)))
3231 * optimized:
3231 * optimized:
3232 (or
3232 (or
3233 (list
3233 (list
3234 ('symbol', '0')
3234 ('symbol', '0')
3235 None)
3235 None)
3236 define)
3236 define)
3237 hg: parse error: missing argument
3237 hg: parse error: missing argument
3238 [255]
3238 [255]
3239
3239
3240 test that chained `or` operations never eat up stack (issue4624)
3240 test that chained `or` operations never eat up stack (issue4624)
3241 (uses `0:1` instead of `0` to avoid future optimization of trivial revisions)
3241 (uses `0:1` instead of `0` to avoid future optimization of trivial revisions)
3242
3242
3243 $ hg log -T '{rev}\n' -r `$PYTHON -c "print '+'.join(['0:1'] * 500)"`
3243 $ hg log -T '{rev}\n' -r `$PYTHON -c "print '+'.join(['0:1'] * 500)"`
3244 0
3244 0
3245 1
3245 1
3246
3246
3247 test that repeated `-r` options never eat up stack (issue4565)
3247 test that repeated `-r` options never eat up stack (issue4565)
3248 (uses `-r 0::1` to avoid possible optimization at old-style parser)
3248 (uses `-r 0::1` to avoid possible optimization at old-style parser)
3249
3249
3250 $ hg log -T '{rev}\n' `$PYTHON -c "for i in xrange(500): print '-r 0::1 ',"`
3250 $ hg log -T '{rev}\n' `$PYTHON -c "for i in xrange(500): print '-r 0::1 ',"`
3251 0
3251 0
3252 1
3252 1
3253
3253
3254 check that conversion to only works
3254 check that conversion to only works
3255 $ try --optimize '::3 - ::1'
3255 $ try --optimize '::3 - ::1'
3256 (minus
3256 (minus
3257 (dagrangepre
3257 (dagrangepre
3258 ('symbol', '3'))
3258 ('symbol', '3'))
3259 (dagrangepre
3259 (dagrangepre
3260 ('symbol', '1')))
3260 ('symbol', '1')))
3261 * optimized:
3261 * optimized:
3262 (func
3262 (func
3263 ('symbol', 'only')
3263 ('symbol', 'only')
3264 (list
3264 (list
3265 ('symbol', '3')
3265 ('symbol', '3')
3266 ('symbol', '1'))
3266 ('symbol', '1'))
3267 define)
3267 define)
3268 * set:
3268 * set:
3269 <baseset+ [3]>
3269 <baseset+ [3]>
3270 3
3270 3
3271 $ try --optimize 'ancestors(1) - ancestors(3)'
3271 $ try --optimize 'ancestors(1) - ancestors(3)'
3272 (minus
3272 (minus
3273 (func
3273 (func
3274 ('symbol', 'ancestors')
3274 ('symbol', 'ancestors')
3275 ('symbol', '1'))
3275 ('symbol', '1'))
3276 (func
3276 (func
3277 ('symbol', 'ancestors')
3277 ('symbol', 'ancestors')
3278 ('symbol', '3')))
3278 ('symbol', '3')))
3279 * optimized:
3279 * optimized:
3280 (func
3280 (func
3281 ('symbol', 'only')
3281 ('symbol', 'only')
3282 (list
3282 (list
3283 ('symbol', '1')
3283 ('symbol', '1')
3284 ('symbol', '3'))
3284 ('symbol', '3'))
3285 define)
3285 define)
3286 * set:
3286 * set:
3287 <baseset+ []>
3287 <baseset+ []>
3288 $ try --optimize 'not ::2 and ::6'
3288 $ try --optimize 'not ::2 and ::6'
3289 (and
3289 (and
3290 (not
3290 (not
3291 (dagrangepre
3291 (dagrangepre
3292 ('symbol', '2')))
3292 ('symbol', '2')))
3293 (dagrangepre
3293 (dagrangepre
3294 ('symbol', '6')))
3294 ('symbol', '6')))
3295 * optimized:
3295 * optimized:
3296 (func
3296 (func
3297 ('symbol', 'only')
3297 ('symbol', 'only')
3298 (list
3298 (list
3299 ('symbol', '6')
3299 ('symbol', '6')
3300 ('symbol', '2'))
3300 ('symbol', '2'))
3301 define)
3301 define)
3302 * set:
3302 * set:
3303 <baseset+ [3, 4, 5, 6]>
3303 <baseset+ [3, 4, 5, 6]>
3304 3
3304 3
3305 4
3305 4
3306 5
3306 5
3307 6
3307 6
3308 $ try --optimize 'ancestors(6) and not ancestors(4)'
3308 $ try --optimize 'ancestors(6) and not ancestors(4)'
3309 (and
3309 (and
3310 (func
3310 (func
3311 ('symbol', 'ancestors')
3311 ('symbol', 'ancestors')
3312 ('symbol', '6'))
3312 ('symbol', '6'))
3313 (not
3313 (not
3314 (func
3314 (func
3315 ('symbol', 'ancestors')
3315 ('symbol', 'ancestors')
3316 ('symbol', '4'))))
3316 ('symbol', '4'))))
3317 * optimized:
3317 * optimized:
3318 (func
3318 (func
3319 ('symbol', 'only')
3319 ('symbol', 'only')
3320 (list
3320 (list
3321 ('symbol', '6')
3321 ('symbol', '6')
3322 ('symbol', '4'))
3322 ('symbol', '4'))
3323 define)
3323 define)
3324 * set:
3324 * set:
3325 <baseset+ [3, 5, 6]>
3325 <baseset+ [3, 5, 6]>
3326 3
3326 3
3327 5
3327 5
3328 6
3328 6
3329
3329
3330 no crash by empty group "()" while optimizing to "only()"
3330 no crash by empty group "()" while optimizing to "only()"
3331
3331
3332 $ try --optimize '::1 and ()'
3332 $ try --optimize '::1 and ()'
3333 (and
3333 (and
3334 (dagrangepre
3334 (dagrangepre
3335 ('symbol', '1'))
3335 ('symbol', '1'))
3336 (group
3336 (group
3337 None))
3337 None))
3338 * optimized:
3338 * optimized:
3339 (and
3339 (and
3340 None
3340 None
3341 (func
3341 (func
3342 ('symbol', 'ancestors')
3342 ('symbol', 'ancestors')
3343 ('symbol', '1')
3343 ('symbol', '1')
3344 define)
3344 define)
3345 define)
3345 define)
3346 hg: parse error: missing argument
3346 hg: parse error: missing argument
3347 [255]
3347 [255]
3348
3348
3349 optimization to only() works only if ancestors() takes only one argument
3349 optimization to only() works only if ancestors() takes only one argument
3350
3350
3351 $ hg debugrevspec -p optimized 'ancestors(6) - ancestors(4, 1)'
3351 $ hg debugrevspec -p optimized 'ancestors(6) - ancestors(4, 1)'
3352 * optimized:
3352 * optimized:
3353 (difference
3353 (difference
3354 (func
3354 (func
3355 ('symbol', 'ancestors')
3355 ('symbol', 'ancestors')
3356 ('symbol', '6')
3356 ('symbol', '6')
3357 define)
3357 define)
3358 (func
3358 (func
3359 ('symbol', 'ancestors')
3359 ('symbol', 'ancestors')
3360 (list
3360 (list
3361 ('symbol', '4')
3361 ('symbol', '4')
3362 ('symbol', '1'))
3362 ('symbol', '1'))
3363 any)
3363 any)
3364 define)
3364 define)
3365 0
3365 0
3366 1
3366 1
3367 3
3367 3
3368 5
3368 5
3369 6
3369 6
3370 $ hg debugrevspec -p optimized 'ancestors(6, 1) - ancestors(4)'
3370 $ hg debugrevspec -p optimized 'ancestors(6, 1) - ancestors(4)'
3371 * optimized:
3371 * optimized:
3372 (difference
3372 (difference
3373 (func
3373 (func
3374 ('symbol', 'ancestors')
3374 ('symbol', 'ancestors')
3375 (list
3375 (list
3376 ('symbol', '6')
3376 ('symbol', '6')
3377 ('symbol', '1'))
3377 ('symbol', '1'))
3378 define)
3378 define)
3379 (func
3379 (func
3380 ('symbol', 'ancestors')
3380 ('symbol', 'ancestors')
3381 ('symbol', '4')
3381 ('symbol', '4')
3382 any)
3382 any)
3383 define)
3383 define)
3384 5
3384 5
3385 6
3385 6
3386
3386
3387 optimization disabled if keyword arguments passed (because we're too lazy
3387 optimization disabled if keyword arguments passed (because we're too lazy
3388 to support it)
3388 to support it)
3389
3389
3390 $ hg debugrevspec -p optimized 'ancestors(set=6) - ancestors(set=4)'
3390 $ hg debugrevspec -p optimized 'ancestors(set=6) - ancestors(set=4)'
3391 * optimized:
3391 * optimized:
3392 (difference
3392 (difference
3393 (func
3393 (func
3394 ('symbol', 'ancestors')
3394 ('symbol', 'ancestors')
3395 (keyvalue
3395 (keyvalue
3396 ('symbol', 'set')
3396 ('symbol', 'set')
3397 ('symbol', '6'))
3397 ('symbol', '6'))
3398 define)
3398 define)
3399 (func
3399 (func
3400 ('symbol', 'ancestors')
3400 ('symbol', 'ancestors')
3401 (keyvalue
3401 (keyvalue
3402 ('symbol', 'set')
3402 ('symbol', 'set')
3403 ('symbol', '4'))
3403 ('symbol', '4'))
3404 any)
3404 any)
3405 define)
3405 define)
3406 3
3406 3
3407 5
3407 5
3408 6
3408 6
3409
3409
3410 invalid function call should not be optimized to only()
3410 invalid function call should not be optimized to only()
3411
3411
3412 $ log '"ancestors"(6) and not ancestors(4)'
3412 $ log '"ancestors"(6) and not ancestors(4)'
3413 hg: parse error: not a symbol
3413 hg: parse error: not a symbol
3414 [255]
3414 [255]
3415
3415
3416 $ log 'ancestors(6) and not "ancestors"(4)'
3416 $ log 'ancestors(6) and not "ancestors"(4)'
3417 hg: parse error: not a symbol
3417 hg: parse error: not a symbol
3418 [255]
3418 [255]
3419
3419
3420 we can use patterns when searching for tags
3420 we can use patterns when searching for tags
3421
3421
3422 $ log 'tag("1..*")'
3422 $ log 'tag("1..*")'
3423 abort: tag '1..*' does not exist!
3423 abort: tag '1..*' does not exist!
3424 [255]
3424 [255]
3425 $ log 'tag("re:1..*")'
3425 $ log 'tag("re:1..*")'
3426 6
3426 6
3427 $ log 'tag("re:[0-9].[0-9]")'
3427 $ log 'tag("re:[0-9].[0-9]")'
3428 6
3428 6
3429 $ log 'tag("literal:1.0")'
3429 $ log 'tag("literal:1.0")'
3430 6
3430 6
3431 $ log 'tag("re:0..*")'
3431 $ log 'tag("re:0..*")'
3432
3432
3433 $ log 'tag(unknown)'
3433 $ log 'tag(unknown)'
3434 abort: tag 'unknown' does not exist!
3434 abort: tag 'unknown' does not exist!
3435 [255]
3435 [255]
3436 $ log 'tag("re:unknown")'
3436 $ log 'tag("re:unknown")'
3437 $ log 'present(tag("unknown"))'
3437 $ log 'present(tag("unknown"))'
3438 $ log 'present(tag("re:unknown"))'
3438 $ log 'present(tag("re:unknown"))'
3439 $ log 'branch(unknown)'
3439 $ log 'branch(unknown)'
3440 abort: unknown revision 'unknown'!
3440 abort: unknown revision 'unknown'!
3441 [255]
3441 [255]
3442 $ log 'branch("literal:unknown")'
3442 $ log 'branch("literal:unknown")'
3443 abort: branch 'unknown' does not exist!
3443 abort: branch 'unknown' does not exist!
3444 [255]
3444 [255]
3445 $ log 'branch("re:unknown")'
3445 $ log 'branch("re:unknown")'
3446 $ log 'present(branch("unknown"))'
3446 $ log 'present(branch("unknown"))'
3447 $ log 'present(branch("re:unknown"))'
3447 $ log 'present(branch("re:unknown"))'
3448 $ log 'user(bob)'
3448 $ log 'user(bob)'
3449 2
3449 2
3450
3450
3451 $ log '4::8'
3451 $ log '4::8'
3452 4
3452 4
3453 8
3453 8
3454 $ log '4:8'
3454 $ log '4:8'
3455 4
3455 4
3456 5
3456 5
3457 6
3457 6
3458 7
3458 7
3459 8
3459 8
3460
3460
3461 $ log 'sort(!merge() & (modifies(b) | user(bob) | keyword(bug) | keyword(issue) & 1::9), "-date")'
3461 $ log 'sort(!merge() & (modifies(b) | user(bob) | keyword(bug) | keyword(issue) & 1::9), "-date")'
3462 4
3462 4
3463 2
3463 2
3464 5
3464 5
3465
3465
3466 $ log 'not 0 and 0:2'
3466 $ log 'not 0 and 0:2'
3467 1
3467 1
3468 2
3468 2
3469 $ log 'not 1 and 0:2'
3469 $ log 'not 1 and 0:2'
3470 0
3470 0
3471 2
3471 2
3472 $ log 'not 2 and 0:2'
3472 $ log 'not 2 and 0:2'
3473 0
3473 0
3474 1
3474 1
3475 $ log '(1 and 2)::'
3475 $ log '(1 and 2)::'
3476 $ log '(1 and 2):'
3476 $ log '(1 and 2):'
3477 $ log '(1 and 2):3'
3477 $ log '(1 and 2):3'
3478 $ log 'sort(head(), -rev)'
3478 $ log 'sort(head(), -rev)'
3479 9
3479 9
3480 7
3480 7
3481 6
3481 6
3482 5
3482 5
3483 4
3483 4
3484 3
3484 3
3485 2
3485 2
3486 1
3486 1
3487 0
3487 0
3488 $ log '4::8 - 8'
3488 $ log '4::8 - 8'
3489 4
3489 4
3490
3490
3491 matching() should preserve the order of the input set:
3491 matching() should preserve the order of the input set:
3492
3492
3493 $ log '(2 or 3 or 1) and matching(1 or 2 or 3)'
3493 $ log '(2 or 3 or 1) and matching(1 or 2 or 3)'
3494 2
3494 2
3495 3
3495 3
3496 1
3496 1
3497
3497
3498 $ log 'named("unknown")'
3498 $ log 'named("unknown")'
3499 abort: namespace 'unknown' does not exist!
3499 abort: namespace 'unknown' does not exist!
3500 [255]
3500 [255]
3501 $ log 'named("re:unknown")'
3501 $ log 'named("re:unknown")'
3502 abort: no namespace exists that match 'unknown'!
3502 abort: no namespace exists that match 'unknown'!
3503 [255]
3503 [255]
3504 $ log 'present(named("unknown"))'
3504 $ log 'present(named("unknown"))'
3505 $ log 'present(named("re:unknown"))'
3505 $ log 'present(named("re:unknown"))'
3506
3506
3507 $ log 'tag()'
3507 $ log 'tag()'
3508 6
3508 6
3509 $ log 'named("tags")'
3509 $ log 'named("tags")'
3510 6
3510 6
3511
3511
3512 issue2437
3512 issue2437
3513
3513
3514 $ log '3 and p1(5)'
3514 $ log '3 and p1(5)'
3515 3
3515 3
3516 $ log '4 and p2(6)'
3516 $ log '4 and p2(6)'
3517 4
3517 4
3518 $ log '1 and parents(:2)'
3518 $ log '1 and parents(:2)'
3519 1
3519 1
3520 $ log '2 and children(1:)'
3520 $ log '2 and children(1:)'
3521 2
3521 2
3522 $ log 'roots(all()) or roots(all())'
3522 $ log 'roots(all()) or roots(all())'
3523 0
3523 0
3524 $ hg debugrevspec 'roots(all()) or roots(all())'
3524 $ hg debugrevspec 'roots(all()) or roots(all())'
3525 0
3525 0
3526 $ log 'heads(branch(Γ©)) or heads(branch(Γ©))'
3526 $ log 'heads(branch(Γ©)) or heads(branch(Γ©))'
3527 9
3527 9
3528 $ log 'ancestors(8) and (heads(branch("-a-b-c-")) or heads(branch(Γ©)))'
3528 $ log 'ancestors(8) and (heads(branch("-a-b-c-")) or heads(branch(Γ©)))'
3529 4
3529 4
3530
3530
3531 issue2654: report a parse error if the revset was not completely parsed
3531 issue2654: report a parse error if the revset was not completely parsed
3532
3532
3533 $ log '1 OR 2'
3533 $ log '1 OR 2'
3534 hg: parse error at 2: invalid token
3534 hg: parse error at 2: invalid token
3535 [255]
3535 [255]
3536
3536
3537 or operator should preserve ordering:
3537 or operator should preserve ordering:
3538 $ log 'reverse(2::4) or tip'
3538 $ log 'reverse(2::4) or tip'
3539 4
3539 4
3540 2
3540 2
3541 9
3541 9
3542
3542
3543 parentrevspec
3543 parentrevspec
3544
3544
3545 $ log 'merge()^0'
3545 $ log 'merge()^0'
3546 6
3546 6
3547 $ log 'merge()^'
3547 $ log 'merge()^'
3548 5
3548 5
3549 $ log 'merge()^1'
3549 $ log 'merge()^1'
3550 5
3550 5
3551 $ log 'merge()^2'
3551 $ log 'merge()^2'
3552 4
3552 4
3553 $ log '(not merge())^2'
3553 $ log '(not merge())^2'
3554 $ log 'merge()^^'
3554 $ log 'merge()^^'
3555 3
3555 3
3556 $ log 'merge()^1^'
3556 $ log 'merge()^1^'
3557 3
3557 3
3558 $ log 'merge()^^^'
3558 $ log 'merge()^^^'
3559 1
3559 1
3560
3560
3561 $ hg debugrevspec -s '(merge() | 0)~-1'
3561 $ hg debugrevspec -s '(merge() | 0)~-1'
3562 * set:
3562 * set:
3563 <baseset+ [1, 7]>
3563 <baseset+ [1, 7]>
3564 1
3564 1
3565 7
3565 7
3566 $ log 'merge()~-1'
3566 $ log 'merge()~-1'
3567 7
3567 7
3568 $ log 'tip~-1'
3568 $ log 'tip~-1'
3569 $ log '(tip | merge())~-1'
3569 $ log '(tip | merge())~-1'
3570 7
3570 7
3571 $ log 'merge()~0'
3571 $ log 'merge()~0'
3572 6
3572 6
3573 $ log 'merge()~1'
3573 $ log 'merge()~1'
3574 5
3574 5
3575 $ log 'merge()~2'
3575 $ log 'merge()~2'
3576 3
3576 3
3577 $ log 'merge()~2^1'
3577 $ log 'merge()~2^1'
3578 1
3578 1
3579 $ log 'merge()~3'
3579 $ log 'merge()~3'
3580 1
3580 1
3581
3581
3582 $ log '(-3:tip)^'
3582 $ log '(-3:tip)^'
3583 4
3583 4
3584 6
3584 6
3585 8
3585 8
3586
3586
3587 $ log 'tip^foo'
3587 $ log 'tip^foo'
3588 hg: parse error: ^ expects a number 0, 1, or 2
3588 hg: parse error: ^ expects a number 0, 1, or 2
3589 [255]
3589 [255]
3590
3590
3591 $ log 'branchpoint()~-1'
3591 $ log 'branchpoint()~-1'
3592 abort: revision in set has more than one child!
3592 abort: revision in set has more than one child!
3593 [255]
3593 [255]
3594
3594
3595 Bogus function gets suggestions
3595 Bogus function gets suggestions
3596 $ log 'add()'
3596 $ log 'add()'
3597 hg: parse error: unknown identifier: add
3597 hg: parse error: unknown identifier: add
3598 (did you mean adds?)
3598 (did you mean adds?)
3599 [255]
3599 [255]
3600 $ log 'added()'
3600 $ log 'added()'
3601 hg: parse error: unknown identifier: added
3601 hg: parse error: unknown identifier: added
3602 (did you mean adds?)
3602 (did you mean adds?)
3603 [255]
3603 [255]
3604 $ log 'remo()'
3604 $ log 'remo()'
3605 hg: parse error: unknown identifier: remo
3605 hg: parse error: unknown identifier: remo
3606 (did you mean one of remote, removes?)
3606 (did you mean one of remote, removes?)
3607 [255]
3607 [255]
3608 $ log 'babar()'
3608 $ log 'babar()'
3609 hg: parse error: unknown identifier: babar
3609 hg: parse error: unknown identifier: babar
3610 [255]
3610 [255]
3611
3611
3612 Bogus function with a similar internal name doesn't suggest the internal name
3612 Bogus function with a similar internal name doesn't suggest the internal name
3613 $ log 'matches()'
3613 $ log 'matches()'
3614 hg: parse error: unknown identifier: matches
3614 hg: parse error: unknown identifier: matches
3615 (did you mean matching?)
3615 (did you mean matching?)
3616 [255]
3616 [255]
3617
3617
3618 Undocumented functions aren't suggested as similar either
3618 Undocumented functions aren't suggested as similar either
3619 $ log 'tagged2()'
3619 $ log 'tagged2()'
3620 hg: parse error: unknown identifier: tagged2
3620 hg: parse error: unknown identifier: tagged2
3621 [255]
3621 [255]
3622
3622
3623 multiple revspecs
3623 multiple revspecs
3624
3624
3625 $ hg log -r 'tip~1:tip' -r 'tip~2:tip~1' --template '{rev}\n'
3625 $ hg log -r 'tip~1:tip' -r 'tip~2:tip~1' --template '{rev}\n'
3626 8
3626 8
3627 9
3627 9
3628 4
3628 4
3629 5
3629 5
3630 6
3630 6
3631 7
3631 7
3632
3632
3633 test usage in revpair (with "+")
3633 test usage in revpair (with "+")
3634
3634
3635 (real pair)
3635 (real pair)
3636
3636
3637 $ hg diff -r 'tip^^' -r 'tip'
3637 $ hg diff -r 'tip^^' -r 'tip'
3638 diff -r 2326846efdab -r 24286f4ae135 .hgtags
3638 diff -r 2326846efdab -r 24286f4ae135 .hgtags
3639 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
3639 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
3640 +++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000
3640 +++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000
3641 @@ -0,0 +1,1 @@
3641 @@ -0,0 +1,1 @@
3642 +e0cc66ef77e8b6f711815af4e001a6594fde3ba5 1.0
3642 +e0cc66ef77e8b6f711815af4e001a6594fde3ba5 1.0
3643 $ hg diff -r 'tip^^::tip'
3643 $ hg diff -r 'tip^^::tip'
3644 diff -r 2326846efdab -r 24286f4ae135 .hgtags
3644 diff -r 2326846efdab -r 24286f4ae135 .hgtags
3645 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
3645 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
3646 +++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000
3646 +++ b/.hgtags Thu Jan 01 00:00:00 1970 +0000
3647 @@ -0,0 +1,1 @@
3647 @@ -0,0 +1,1 @@
3648 +e0cc66ef77e8b6f711815af4e001a6594fde3ba5 1.0
3648 +e0cc66ef77e8b6f711815af4e001a6594fde3ba5 1.0
3649
3649
3650 (single rev)
3650 (single rev)
3651
3651
3652 $ hg diff -r 'tip^' -r 'tip^'
3652 $ hg diff -r 'tip^' -r 'tip^'
3653 $ hg diff -r 'tip^:tip^'
3653 $ hg diff -r 'tip^:tip^'
3654
3654
3655 (single rev that does not looks like a range)
3655 (single rev that does not looks like a range)
3656
3656
3657 $ hg diff -r 'tip^::tip^ or tip^'
3657 $ hg diff -r 'tip^::tip^ or tip^'
3658 diff -r d5d0dcbdc4d9 .hgtags
3658 diff -r d5d0dcbdc4d9 .hgtags
3659 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
3659 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
3660 +++ b/.hgtags * (glob)
3660 +++ b/.hgtags * (glob)
3661 @@ -0,0 +1,1 @@
3661 @@ -0,0 +1,1 @@
3662 +e0cc66ef77e8b6f711815af4e001a6594fde3ba5 1.0
3662 +e0cc66ef77e8b6f711815af4e001a6594fde3ba5 1.0
3663 $ hg diff -r 'tip^ or tip^'
3663 $ hg diff -r 'tip^ or tip^'
3664 diff -r d5d0dcbdc4d9 .hgtags
3664 diff -r d5d0dcbdc4d9 .hgtags
3665 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
3665 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
3666 +++ b/.hgtags * (glob)
3666 +++ b/.hgtags * (glob)
3667 @@ -0,0 +1,1 @@
3667 @@ -0,0 +1,1 @@
3668 +e0cc66ef77e8b6f711815af4e001a6594fde3ba5 1.0
3668 +e0cc66ef77e8b6f711815af4e001a6594fde3ba5 1.0
3669
3669
3670 (no rev)
3670 (no rev)
3671
3671
3672 $ hg diff -r 'author("babar") or author("celeste")'
3672 $ hg diff -r 'author("babar") or author("celeste")'
3673 abort: empty revision range
3673 abort: empty revision range
3674 [255]
3674 [255]
3675
3675
3676 aliases:
3676 aliases:
3677
3677
3678 $ echo '[revsetalias]' >> .hg/hgrc
3678 $ echo '[revsetalias]' >> .hg/hgrc
3679 $ echo 'm = merge()' >> .hg/hgrc
3679 $ echo 'm = merge()' >> .hg/hgrc
3680 (revset aliases can override builtin revsets)
3680 (revset aliases can override builtin revsets)
3681 $ echo 'p2($1) = p1($1)' >> .hg/hgrc
3681 $ echo 'p2($1) = p1($1)' >> .hg/hgrc
3682 $ echo 'sincem = descendants(m)' >> .hg/hgrc
3682 $ echo 'sincem = descendants(m)' >> .hg/hgrc
3683 $ echo 'd($1) = reverse(sort($1, date))' >> .hg/hgrc
3683 $ echo 'd($1) = reverse(sort($1, date))' >> .hg/hgrc
3684 $ echo 'rs(ARG1, ARG2) = reverse(sort(ARG1, ARG2))' >> .hg/hgrc
3684 $ echo 'rs(ARG1, ARG2) = reverse(sort(ARG1, ARG2))' >> .hg/hgrc
3685 $ echo 'rs4(ARG1, ARGA, ARGB, ARG2) = reverse(sort(ARG1, ARG2))' >> .hg/hgrc
3685 $ echo 'rs4(ARG1, ARGA, ARGB, ARG2) = reverse(sort(ARG1, ARG2))' >> .hg/hgrc
3686
3686
3687 $ try m
3687 $ try m
3688 ('symbol', 'm')
3688 ('symbol', 'm')
3689 * expanded:
3689 * expanded:
3690 (func
3690 (func
3691 ('symbol', 'merge')
3691 ('symbol', 'merge')
3692 None)
3692 None)
3693 * set:
3693 * set:
3694 <filteredset
3694 <filteredset
3695 <fullreposet+ 0:10>,
3695 <fullreposet+ 0:10>,
3696 <merge>>
3696 <merge>>
3697 6
3697 6
3698
3698
3699 $ HGPLAIN=1
3699 $ HGPLAIN=1
3700 $ export HGPLAIN
3700 $ export HGPLAIN
3701 $ try m
3701 $ try m
3702 ('symbol', 'm')
3702 ('symbol', 'm')
3703 abort: unknown revision 'm'!
3703 abort: unknown revision 'm'!
3704 [255]
3704 [255]
3705
3705
3706 $ HGPLAINEXCEPT=revsetalias
3706 $ HGPLAINEXCEPT=revsetalias
3707 $ export HGPLAINEXCEPT
3707 $ export HGPLAINEXCEPT
3708 $ try m
3708 $ try m
3709 ('symbol', 'm')
3709 ('symbol', 'm')
3710 * expanded:
3710 * expanded:
3711 (func
3711 (func
3712 ('symbol', 'merge')
3712 ('symbol', 'merge')
3713 None)
3713 None)
3714 * set:
3714 * set:
3715 <filteredset
3715 <filteredset
3716 <fullreposet+ 0:10>,
3716 <fullreposet+ 0:10>,
3717 <merge>>
3717 <merge>>
3718 6
3718 6
3719
3719
3720 $ unset HGPLAIN
3720 $ unset HGPLAIN
3721 $ unset HGPLAINEXCEPT
3721 $ unset HGPLAINEXCEPT
3722
3722
3723 $ try 'p2(.)'
3723 $ try 'p2(.)'
3724 (func
3724 (func
3725 ('symbol', 'p2')
3725 ('symbol', 'p2')
3726 ('symbol', '.'))
3726 ('symbol', '.'))
3727 * expanded:
3727 * expanded:
3728 (func
3728 (func
3729 ('symbol', 'p1')
3729 ('symbol', 'p1')
3730 ('symbol', '.'))
3730 ('symbol', '.'))
3731 * set:
3731 * set:
3732 <baseset+ [8]>
3732 <baseset+ [8]>
3733 8
3733 8
3734
3734
3735 $ HGPLAIN=1
3735 $ HGPLAIN=1
3736 $ export HGPLAIN
3736 $ export HGPLAIN
3737 $ try 'p2(.)'
3737 $ try 'p2(.)'
3738 (func
3738 (func
3739 ('symbol', 'p2')
3739 ('symbol', 'p2')
3740 ('symbol', '.'))
3740 ('symbol', '.'))
3741 * set:
3741 * set:
3742 <baseset+ []>
3742 <baseset+ []>
3743
3743
3744 $ HGPLAINEXCEPT=revsetalias
3744 $ HGPLAINEXCEPT=revsetalias
3745 $ export HGPLAINEXCEPT
3745 $ export HGPLAINEXCEPT
3746 $ try 'p2(.)'
3746 $ try 'p2(.)'
3747 (func
3747 (func
3748 ('symbol', 'p2')
3748 ('symbol', 'p2')
3749 ('symbol', '.'))
3749 ('symbol', '.'))
3750 * expanded:
3750 * expanded:
3751 (func
3751 (func
3752 ('symbol', 'p1')
3752 ('symbol', 'p1')
3753 ('symbol', '.'))
3753 ('symbol', '.'))
3754 * set:
3754 * set:
3755 <baseset+ [8]>
3755 <baseset+ [8]>
3756 8
3756 8
3757
3757
3758 $ unset HGPLAIN
3758 $ unset HGPLAIN
3759 $ unset HGPLAINEXCEPT
3759 $ unset HGPLAINEXCEPT
3760
3760
3761 test alias recursion
3761 test alias recursion
3762
3762
3763 $ try sincem
3763 $ try sincem
3764 ('symbol', 'sincem')
3764 ('symbol', 'sincem')
3765 * expanded:
3765 * expanded:
3766 (func
3766 (func
3767 ('symbol', 'descendants')
3767 ('symbol', 'descendants')
3768 (func
3768 (func
3769 ('symbol', 'merge')
3769 ('symbol', 'merge')
3770 None))
3770 None))
3771 * set:
3771 * set:
3772 <generatorset+>
3772 <generatorset+>
3773 6
3773 6
3774 7
3774 7
3775
3775
3776 test infinite recursion
3776 test infinite recursion
3777
3777
3778 $ echo 'recurse1 = recurse2' >> .hg/hgrc
3778 $ echo 'recurse1 = recurse2' >> .hg/hgrc
3779 $ echo 'recurse2 = recurse1' >> .hg/hgrc
3779 $ echo 'recurse2 = recurse1' >> .hg/hgrc
3780 $ try recurse1
3780 $ try recurse1
3781 ('symbol', 'recurse1')
3781 ('symbol', 'recurse1')
3782 hg: parse error: infinite expansion of revset alias "recurse1" detected
3782 hg: parse error: infinite expansion of revset alias "recurse1" detected
3783 [255]
3783 [255]
3784
3784
3785 $ echo 'level1($1, $2) = $1 or $2' >> .hg/hgrc
3785 $ echo 'level1($1, $2) = $1 or $2' >> .hg/hgrc
3786 $ echo 'level2($1, $2) = level1($2, $1)' >> .hg/hgrc
3786 $ echo 'level2($1, $2) = level1($2, $1)' >> .hg/hgrc
3787 $ try "level2(level1(1, 2), 3)"
3787 $ try "level2(level1(1, 2), 3)"
3788 (func
3788 (func
3789 ('symbol', 'level2')
3789 ('symbol', 'level2')
3790 (list
3790 (list
3791 (func
3791 (func
3792 ('symbol', 'level1')
3792 ('symbol', 'level1')
3793 (list
3793 (list
3794 ('symbol', '1')
3794 ('symbol', '1')
3795 ('symbol', '2')))
3795 ('symbol', '2')))
3796 ('symbol', '3')))
3796 ('symbol', '3')))
3797 * expanded:
3797 * expanded:
3798 (or
3798 (or
3799 (list
3799 (list
3800 ('symbol', '3')
3800 ('symbol', '3')
3801 (or
3801 (or
3802 (list
3802 (list
3803 ('symbol', '1')
3803 ('symbol', '1')
3804 ('symbol', '2')))))
3804 ('symbol', '2')))))
3805 * set:
3805 * set:
3806 <addset
3806 <addset
3807 <baseset [3]>,
3807 <baseset [3]>,
3808 <baseset [1, 2]>>
3808 <baseset [1, 2]>>
3809 3
3809 3
3810 1
3810 1
3811 2
3811 2
3812
3812
3813 test nesting and variable passing
3813 test nesting and variable passing
3814
3814
3815 $ echo 'nested($1) = nested2($1)' >> .hg/hgrc
3815 $ echo 'nested($1) = nested2($1)' >> .hg/hgrc
3816 $ echo 'nested2($1) = nested3($1)' >> .hg/hgrc
3816 $ echo 'nested2($1) = nested3($1)' >> .hg/hgrc
3817 $ echo 'nested3($1) = max($1)' >> .hg/hgrc
3817 $ echo 'nested3($1) = max($1)' >> .hg/hgrc
3818 $ try 'nested(2:5)'
3818 $ try 'nested(2:5)'
3819 (func
3819 (func
3820 ('symbol', 'nested')
3820 ('symbol', 'nested')
3821 (range
3821 (range
3822 ('symbol', '2')
3822 ('symbol', '2')
3823 ('symbol', '5')))
3823 ('symbol', '5')))
3824 * expanded:
3824 * expanded:
3825 (func
3825 (func
3826 ('symbol', 'max')
3826 ('symbol', 'max')
3827 (range
3827 (range
3828 ('symbol', '2')
3828 ('symbol', '2')
3829 ('symbol', '5')))
3829 ('symbol', '5')))
3830 * set:
3830 * set:
3831 <baseset
3831 <baseset
3832 <max
3832 <max
3833 <fullreposet+ 0:10>,
3833 <fullreposet+ 0:10>,
3834 <spanset+ 2:6>>>
3834 <spanset+ 2:6>>>
3835 5
3835 5
3836
3836
3837 test chained `or` operations are flattened at parsing phase
3837 test chained `or` operations are flattened at parsing phase
3838
3838
3839 $ echo 'chainedorops($1, $2, $3) = $1|$2|$3' >> .hg/hgrc
3839 $ echo 'chainedorops($1, $2, $3) = $1|$2|$3' >> .hg/hgrc
3840 $ try 'chainedorops(0:1, 1:2, 2:3)'
3840 $ try 'chainedorops(0:1, 1:2, 2:3)'
3841 (func
3841 (func
3842 ('symbol', 'chainedorops')
3842 ('symbol', 'chainedorops')
3843 (list
3843 (list
3844 (range
3844 (range
3845 ('symbol', '0')
3845 ('symbol', '0')
3846 ('symbol', '1'))
3846 ('symbol', '1'))
3847 (range
3847 (range
3848 ('symbol', '1')
3848 ('symbol', '1')
3849 ('symbol', '2'))
3849 ('symbol', '2'))
3850 (range
3850 (range
3851 ('symbol', '2')
3851 ('symbol', '2')
3852 ('symbol', '3'))))
3852 ('symbol', '3'))))
3853 * expanded:
3853 * expanded:
3854 (or
3854 (or
3855 (list
3855 (list
3856 (range
3856 (range
3857 ('symbol', '0')
3857 ('symbol', '0')
3858 ('symbol', '1'))
3858 ('symbol', '1'))
3859 (range
3859 (range
3860 ('symbol', '1')
3860 ('symbol', '1')
3861 ('symbol', '2'))
3861 ('symbol', '2'))
3862 (range
3862 (range
3863 ('symbol', '2')
3863 ('symbol', '2')
3864 ('symbol', '3'))))
3864 ('symbol', '3'))))
3865 * set:
3865 * set:
3866 <addset
3866 <addset
3867 <spanset+ 0:2>,
3867 <spanset+ 0:2>,
3868 <addset
3868 <addset
3869 <spanset+ 1:3>,
3869 <spanset+ 1:3>,
3870 <spanset+ 2:4>>>
3870 <spanset+ 2:4>>>
3871 0
3871 0
3872 1
3872 1
3873 2
3873 2
3874 3
3874 3
3875
3875
3876 test variable isolation, variable placeholders are rewritten as string
3876 test variable isolation, variable placeholders are rewritten as string
3877 then parsed and matched again as string. Check they do not leak too
3877 then parsed and matched again as string. Check they do not leak too
3878 far away.
3878 far away.
3879
3879
3880 $ echo 'injectparamasstring = max("$1")' >> .hg/hgrc
3880 $ echo 'injectparamasstring = max("$1")' >> .hg/hgrc
3881 $ echo 'callinjection($1) = descendants(injectparamasstring)' >> .hg/hgrc
3881 $ echo 'callinjection($1) = descendants(injectparamasstring)' >> .hg/hgrc
3882 $ try 'callinjection(2:5)'
3882 $ try 'callinjection(2:5)'
3883 (func
3883 (func
3884 ('symbol', 'callinjection')
3884 ('symbol', 'callinjection')
3885 (range
3885 (range
3886 ('symbol', '2')
3886 ('symbol', '2')
3887 ('symbol', '5')))
3887 ('symbol', '5')))
3888 * expanded:
3888 * expanded:
3889 (func
3889 (func
3890 ('symbol', 'descendants')
3890 ('symbol', 'descendants')
3891 (func
3891 (func
3892 ('symbol', 'max')
3892 ('symbol', 'max')
3893 ('string', '$1')))
3893 ('string', '$1')))
3894 abort: unknown revision '$1'!
3894 abort: unknown revision '$1'!
3895 [255]
3895 [255]
3896
3896
3897 test scope of alias expansion: 'universe' is expanded prior to 'shadowall(0)',
3897 test scope of alias expansion: 'universe' is expanded prior to 'shadowall(0)',
3898 but 'all()' should never be substituted to '0()'.
3898 but 'all()' should never be substituted to '0()'.
3899
3899
3900 $ echo 'universe = all()' >> .hg/hgrc
3900 $ echo 'universe = all()' >> .hg/hgrc
3901 $ echo 'shadowall(all) = all and universe' >> .hg/hgrc
3901 $ echo 'shadowall(all) = all and universe' >> .hg/hgrc
3902 $ try 'shadowall(0)'
3902 $ try 'shadowall(0)'
3903 (func
3903 (func
3904 ('symbol', 'shadowall')
3904 ('symbol', 'shadowall')
3905 ('symbol', '0'))
3905 ('symbol', '0'))
3906 * expanded:
3906 * expanded:
3907 (and
3907 (and
3908 ('symbol', '0')
3908 ('symbol', '0')
3909 (func
3909 (func
3910 ('symbol', 'all')
3910 ('symbol', 'all')
3911 None))
3911 None))
3912 * set:
3912 * set:
3913 <filteredset
3913 <filteredset
3914 <baseset [0]>,
3914 <baseset [0]>,
3915 <spanset+ 0:10>>
3915 <spanset+ 0:10>>
3916 0
3916 0
3917
3917
3918 test unknown reference:
3918 test unknown reference:
3919
3919
3920 $ try "unknownref(0)" --config 'revsetalias.unknownref($1)=$1:$2'
3920 $ try "unknownref(0)" --config 'revsetalias.unknownref($1)=$1:$2'
3921 (func
3921 (func
3922 ('symbol', 'unknownref')
3922 ('symbol', 'unknownref')
3923 ('symbol', '0'))
3923 ('symbol', '0'))
3924 abort: bad definition of revset alias "unknownref": invalid symbol '$2'
3924 abort: bad definition of revset alias "unknownref": invalid symbol '$2'
3925 [255]
3925 [255]
3926
3926
3927 $ hg debugrevspec --debug --config revsetalias.anotherbadone='branch(' "tip"
3927 $ hg debugrevspec --debug --config revsetalias.anotherbadone='branch(' "tip"
3928 ('symbol', 'tip')
3928 ('symbol', 'tip')
3929 warning: bad definition of revset alias "anotherbadone": at 7: not a prefix: end
3929 warning: bad definition of revset alias "anotherbadone": at 7: not a prefix: end
3930 * set:
3930 * set:
3931 <baseset [9]>
3931 <baseset [9]>
3932 9
3932 9
3933
3933
3934 $ try 'tip'
3934 $ try 'tip'
3935 ('symbol', 'tip')
3935 ('symbol', 'tip')
3936 * set:
3936 * set:
3937 <baseset [9]>
3937 <baseset [9]>
3938 9
3938 9
3939
3939
3940 $ hg debugrevspec --debug --config revsetalias.'bad name'='tip' "tip"
3940 $ hg debugrevspec --debug --config revsetalias.'bad name'='tip' "tip"
3941 ('symbol', 'tip')
3941 ('symbol', 'tip')
3942 warning: bad declaration of revset alias "bad name": at 4: invalid token
3942 warning: bad declaration of revset alias "bad name": at 4: invalid token
3943 * set:
3943 * set:
3944 <baseset [9]>
3944 <baseset [9]>
3945 9
3945 9
3946 $ echo 'strictreplacing($1, $10) = $10 or desc("$1")' >> .hg/hgrc
3946 $ echo 'strictreplacing($1, $10) = $10 or desc("$1")' >> .hg/hgrc
3947 $ try 'strictreplacing("foo", tip)'
3947 $ try 'strictreplacing("foo", tip)'
3948 (func
3948 (func
3949 ('symbol', 'strictreplacing')
3949 ('symbol', 'strictreplacing')
3950 (list
3950 (list
3951 ('string', 'foo')
3951 ('string', 'foo')
3952 ('symbol', 'tip')))
3952 ('symbol', 'tip')))
3953 * expanded:
3953 * expanded:
3954 (or
3954 (or
3955 (list
3955 (list
3956 ('symbol', 'tip')
3956 ('symbol', 'tip')
3957 (func
3957 (func
3958 ('symbol', 'desc')
3958 ('symbol', 'desc')
3959 ('string', '$1'))))
3959 ('string', '$1'))))
3960 * set:
3960 * set:
3961 <addset
3961 <addset
3962 <baseset [9]>,
3962 <baseset [9]>,
3963 <filteredset
3963 <filteredset
3964 <fullreposet+ 0:10>,
3964 <fullreposet+ 0:10>,
3965 <desc '$1'>>>
3965 <desc '$1'>>>
3966 9
3966 9
3967
3967
3968 $ try 'd(2:5)'
3968 $ try 'd(2:5)'
3969 (func
3969 (func
3970 ('symbol', 'd')
3970 ('symbol', 'd')
3971 (range
3971 (range
3972 ('symbol', '2')
3972 ('symbol', '2')
3973 ('symbol', '5')))
3973 ('symbol', '5')))
3974 * expanded:
3974 * expanded:
3975 (func
3975 (func
3976 ('symbol', 'reverse')
3976 ('symbol', 'reverse')
3977 (func
3977 (func
3978 ('symbol', 'sort')
3978 ('symbol', 'sort')
3979 (list
3979 (list
3980 (range
3980 (range
3981 ('symbol', '2')
3981 ('symbol', '2')
3982 ('symbol', '5'))
3982 ('symbol', '5'))
3983 ('symbol', 'date'))))
3983 ('symbol', 'date'))))
3984 * set:
3984 * set:
3985 <baseset [4, 5, 3, 2]>
3985 <baseset [4, 5, 3, 2]>
3986 4
3986 4
3987 5
3987 5
3988 3
3988 3
3989 2
3989 2
3990 $ try 'rs(2 or 3, date)'
3990 $ try 'rs(2 or 3, date)'
3991 (func
3991 (func
3992 ('symbol', 'rs')
3992 ('symbol', 'rs')
3993 (list
3993 (list
3994 (or
3994 (or
3995 (list
3995 (list
3996 ('symbol', '2')
3996 ('symbol', '2')
3997 ('symbol', '3')))
3997 ('symbol', '3')))
3998 ('symbol', 'date')))
3998 ('symbol', 'date')))
3999 * expanded:
3999 * expanded:
4000 (func
4000 (func
4001 ('symbol', 'reverse')
4001 ('symbol', 'reverse')
4002 (func
4002 (func
4003 ('symbol', 'sort')
4003 ('symbol', 'sort')
4004 (list
4004 (list
4005 (or
4005 (or
4006 (list
4006 (list
4007 ('symbol', '2')
4007 ('symbol', '2')
4008 ('symbol', '3')))
4008 ('symbol', '3')))
4009 ('symbol', 'date'))))
4009 ('symbol', 'date'))))
4010 * set:
4010 * set:
4011 <baseset [3, 2]>
4011 <baseset [3, 2]>
4012 3
4012 3
4013 2
4013 2
4014 $ try 'rs()'
4014 $ try 'rs()'
4015 (func
4015 (func
4016 ('symbol', 'rs')
4016 ('symbol', 'rs')
4017 None)
4017 None)
4018 hg: parse error: invalid number of arguments: 0
4018 hg: parse error: invalid number of arguments: 0
4019 [255]
4019 [255]
4020 $ try 'rs(2)'
4020 $ try 'rs(2)'
4021 (func
4021 (func
4022 ('symbol', 'rs')
4022 ('symbol', 'rs')
4023 ('symbol', '2'))
4023 ('symbol', '2'))
4024 hg: parse error: invalid number of arguments: 1
4024 hg: parse error: invalid number of arguments: 1
4025 [255]
4025 [255]
4026 $ try 'rs(2, data, 7)'
4026 $ try 'rs(2, data, 7)'
4027 (func
4027 (func
4028 ('symbol', 'rs')
4028 ('symbol', 'rs')
4029 (list
4029 (list
4030 ('symbol', '2')
4030 ('symbol', '2')
4031 ('symbol', 'data')
4031 ('symbol', 'data')
4032 ('symbol', '7')))
4032 ('symbol', '7')))
4033 hg: parse error: invalid number of arguments: 3
4033 hg: parse error: invalid number of arguments: 3
4034 [255]
4034 [255]
4035 $ try 'rs4(2 or 3, x, x, date)'
4035 $ try 'rs4(2 or 3, x, x, date)'
4036 (func
4036 (func
4037 ('symbol', 'rs4')
4037 ('symbol', 'rs4')
4038 (list
4038 (list
4039 (or
4039 (or
4040 (list
4040 (list
4041 ('symbol', '2')
4041 ('symbol', '2')
4042 ('symbol', '3')))
4042 ('symbol', '3')))
4043 ('symbol', 'x')
4043 ('symbol', 'x')
4044 ('symbol', 'x')
4044 ('symbol', 'x')
4045 ('symbol', 'date')))
4045 ('symbol', 'date')))
4046 * expanded:
4046 * expanded:
4047 (func
4047 (func
4048 ('symbol', 'reverse')
4048 ('symbol', 'reverse')
4049 (func
4049 (func
4050 ('symbol', 'sort')
4050 ('symbol', 'sort')
4051 (list
4051 (list
4052 (or
4052 (or
4053 (list
4053 (list
4054 ('symbol', '2')
4054 ('symbol', '2')
4055 ('symbol', '3')))
4055 ('symbol', '3')))
4056 ('symbol', 'date'))))
4056 ('symbol', 'date'))))
4057 * set:
4057 * set:
4058 <baseset [3, 2]>
4058 <baseset [3, 2]>
4059 3
4059 3
4060 2
4060 2
4061
4061
4062 issue4553: check that revset aliases override existing hash prefix
4062 issue4553: check that revset aliases override existing hash prefix
4063
4063
4064 $ hg log -qr e
4064 $ hg log -qr e
4065 6:e0cc66ef77e8
4065 6:e0cc66ef77e8
4066
4066
4067 $ hg log -qr e --config revsetalias.e="all()"
4067 $ hg log -qr e --config revsetalias.e="all()"
4068 0:2785f51eece5
4068 0:2785f51eece5
4069 1:d75937da8da0
4069 1:d75937da8da0
4070 2:5ed5505e9f1c
4070 2:5ed5505e9f1c
4071 3:8528aa5637f2
4071 3:8528aa5637f2
4072 4:2326846efdab
4072 4:2326846efdab
4073 5:904fa392b941
4073 5:904fa392b941
4074 6:e0cc66ef77e8
4074 6:e0cc66ef77e8
4075 7:013af1973af4
4075 7:013af1973af4
4076 8:d5d0dcbdc4d9
4076 8:d5d0dcbdc4d9
4077 9:24286f4ae135
4077 9:24286f4ae135
4078
4078
4079 $ hg log -qr e: --config revsetalias.e="0"
4079 $ hg log -qr e: --config revsetalias.e="0"
4080 0:2785f51eece5
4080 0:2785f51eece5
4081 1:d75937da8da0
4081 1:d75937da8da0
4082 2:5ed5505e9f1c
4082 2:5ed5505e9f1c
4083 3:8528aa5637f2
4083 3:8528aa5637f2
4084 4:2326846efdab
4084 4:2326846efdab
4085 5:904fa392b941
4085 5:904fa392b941
4086 6:e0cc66ef77e8
4086 6:e0cc66ef77e8
4087 7:013af1973af4
4087 7:013af1973af4
4088 8:d5d0dcbdc4d9
4088 8:d5d0dcbdc4d9
4089 9:24286f4ae135
4089 9:24286f4ae135
4090
4090
4091 $ hg log -qr :e --config revsetalias.e="9"
4091 $ hg log -qr :e --config revsetalias.e="9"
4092 0:2785f51eece5
4092 0:2785f51eece5
4093 1:d75937da8da0
4093 1:d75937da8da0
4094 2:5ed5505e9f1c
4094 2:5ed5505e9f1c
4095 3:8528aa5637f2
4095 3:8528aa5637f2
4096 4:2326846efdab
4096 4:2326846efdab
4097 5:904fa392b941
4097 5:904fa392b941
4098 6:e0cc66ef77e8
4098 6:e0cc66ef77e8
4099 7:013af1973af4
4099 7:013af1973af4
4100 8:d5d0dcbdc4d9
4100 8:d5d0dcbdc4d9
4101 9:24286f4ae135
4101 9:24286f4ae135
4102
4102
4103 $ hg log -qr e:
4103 $ hg log -qr e:
4104 6:e0cc66ef77e8
4104 6:e0cc66ef77e8
4105 7:013af1973af4
4105 7:013af1973af4
4106 8:d5d0dcbdc4d9
4106 8:d5d0dcbdc4d9
4107 9:24286f4ae135
4107 9:24286f4ae135
4108
4108
4109 $ hg log -qr :e
4109 $ hg log -qr :e
4110 0:2785f51eece5
4110 0:2785f51eece5
4111 1:d75937da8da0
4111 1:d75937da8da0
4112 2:5ed5505e9f1c
4112 2:5ed5505e9f1c
4113 3:8528aa5637f2
4113 3:8528aa5637f2
4114 4:2326846efdab
4114 4:2326846efdab
4115 5:904fa392b941
4115 5:904fa392b941
4116 6:e0cc66ef77e8
4116 6:e0cc66ef77e8
4117
4117
4118 issue2549 - correct optimizations
4118 issue2549 - correct optimizations
4119
4119
4120 $ try 'limit(1 or 2 or 3, 2) and not 2'
4120 $ try 'limit(1 or 2 or 3, 2) and not 2'
4121 (and
4121 (and
4122 (func
4122 (func
4123 ('symbol', 'limit')
4123 ('symbol', 'limit')
4124 (list
4124 (list
4125 (or
4125 (or
4126 (list
4126 (list
4127 ('symbol', '1')
4127 ('symbol', '1')
4128 ('symbol', '2')
4128 ('symbol', '2')
4129 ('symbol', '3')))
4129 ('symbol', '3')))
4130 ('symbol', '2')))
4130 ('symbol', '2')))
4131 (not
4131 (not
4132 ('symbol', '2')))
4132 ('symbol', '2')))
4133 * set:
4133 * set:
4134 <filteredset
4134 <filteredset
4135 <baseset [1, 2]>,
4135 <baseset [1, 2]>,
4136 <not
4136 <not
4137 <baseset [2]>>>
4137 <baseset [2]>>>
4138 1
4138 1
4139 $ try 'max(1 or 2) and not 2'
4139 $ try 'max(1 or 2) and not 2'
4140 (and
4140 (and
4141 (func
4141 (func
4142 ('symbol', 'max')
4142 ('symbol', 'max')
4143 (or
4143 (or
4144 (list
4144 (list
4145 ('symbol', '1')
4145 ('symbol', '1')
4146 ('symbol', '2'))))
4146 ('symbol', '2'))))
4147 (not
4147 (not
4148 ('symbol', '2')))
4148 ('symbol', '2')))
4149 * set:
4149 * set:
4150 <filteredset
4150 <filteredset
4151 <baseset
4151 <baseset
4152 <max
4152 <max
4153 <fullreposet+ 0:10>,
4153 <fullreposet+ 0:10>,
4154 <baseset [1, 2]>>>,
4154 <baseset [1, 2]>>>,
4155 <not
4155 <not
4156 <baseset [2]>>>
4156 <baseset [2]>>>
4157 $ try 'min(1 or 2) and not 1'
4157 $ try 'min(1 or 2) and not 1'
4158 (and
4158 (and
4159 (func
4159 (func
4160 ('symbol', 'min')
4160 ('symbol', 'min')
4161 (or
4161 (or
4162 (list
4162 (list
4163 ('symbol', '1')
4163 ('symbol', '1')
4164 ('symbol', '2'))))
4164 ('symbol', '2'))))
4165 (not
4165 (not
4166 ('symbol', '1')))
4166 ('symbol', '1')))
4167 * set:
4167 * set:
4168 <filteredset
4168 <filteredset
4169 <baseset
4169 <baseset
4170 <min
4170 <min
4171 <fullreposet+ 0:10>,
4171 <fullreposet+ 0:10>,
4172 <baseset [1, 2]>>>,
4172 <baseset [1, 2]>>>,
4173 <not
4173 <not
4174 <baseset [1]>>>
4174 <baseset [1]>>>
4175 $ try 'last(1 or 2, 1) and not 2'
4175 $ try 'last(1 or 2, 1) and not 2'
4176 (and
4176 (and
4177 (func
4177 (func
4178 ('symbol', 'last')
4178 ('symbol', 'last')
4179 (list
4179 (list
4180 (or
4180 (or
4181 (list
4181 (list
4182 ('symbol', '1')
4182 ('symbol', '1')
4183 ('symbol', '2')))
4183 ('symbol', '2')))
4184 ('symbol', '1')))
4184 ('symbol', '1')))
4185 (not
4185 (not
4186 ('symbol', '2')))
4186 ('symbol', '2')))
4187 * set:
4187 * set:
4188 <filteredset
4188 <filteredset
4189 <baseset [2]>,
4189 <baseset [2]>,
4190 <not
4190 <not
4191 <baseset [2]>>>
4191 <baseset [2]>>>
4192
4192
4193 issue4289 - ordering of built-ins
4193 issue4289 - ordering of built-ins
4194 $ hg log -M -q -r 3:2
4194 $ hg log -M -q -r 3:2
4195 3:8528aa5637f2
4195 3:8528aa5637f2
4196 2:5ed5505e9f1c
4196 2:5ed5505e9f1c
4197
4197
4198 test revsets started with 40-chars hash (issue3669)
4198 test revsets started with 40-chars hash (issue3669)
4199
4199
4200 $ ISSUE3669_TIP=`hg tip --template '{node}'`
4200 $ ISSUE3669_TIP=`hg tip --template '{node}'`
4201 $ hg log -r "${ISSUE3669_TIP}" --template '{rev}\n'
4201 $ hg log -r "${ISSUE3669_TIP}" --template '{rev}\n'
4202 9
4202 9
4203 $ hg log -r "${ISSUE3669_TIP}^" --template '{rev}\n'
4203 $ hg log -r "${ISSUE3669_TIP}^" --template '{rev}\n'
4204 8
4204 8
4205
4205
4206 test or-ed indirect predicates (issue3775)
4206 test or-ed indirect predicates (issue3775)
4207
4207
4208 $ log '6 or 6^1' | sort
4208 $ log '6 or 6^1' | sort
4209 5
4209 5
4210 6
4210 6
4211 $ log '6^1 or 6' | sort
4211 $ log '6^1 or 6' | sort
4212 5
4212 5
4213 6
4213 6
4214 $ log '4 or 4~1' | sort
4214 $ log '4 or 4~1' | sort
4215 2
4215 2
4216 4
4216 4
4217 $ log '4~1 or 4' | sort
4217 $ log '4~1 or 4' | sort
4218 2
4218 2
4219 4
4219 4
4220 $ log '(0 or 2):(4 or 6) or 0 or 6' | sort
4220 $ log '(0 or 2):(4 or 6) or 0 or 6' | sort
4221 0
4221 0
4222 1
4222 1
4223 2
4223 2
4224 3
4224 3
4225 4
4225 4
4226 5
4226 5
4227 6
4227 6
4228 $ log '0 or 6 or (0 or 2):(4 or 6)' | sort
4228 $ log '0 or 6 or (0 or 2):(4 or 6)' | sort
4229 0
4229 0
4230 1
4230 1
4231 2
4231 2
4232 3
4232 3
4233 4
4233 4
4234 5
4234 5
4235 6
4235 6
4236
4236
4237 tests for 'remote()' predicate:
4237 tests for 'remote()' predicate:
4238 #. (csets in remote) (id) (remote)
4238 #. (csets in remote) (id) (remote)
4239 1. less than local current branch "default"
4239 1. less than local current branch "default"
4240 2. same with local specified "default"
4240 2. same with local specified "default"
4241 3. more than local specified specified
4241 3. more than local specified specified
4242
4242
4243 $ hg clone --quiet -U . ../remote3
4243 $ hg clone --quiet -U . ../remote3
4244 $ cd ../remote3
4244 $ cd ../remote3
4245 $ hg update -q 7
4245 $ hg update -q 7
4246 $ echo r > r
4246 $ echo r > r
4247 $ hg ci -Aqm 10
4247 $ hg ci -Aqm 10
4248 $ log 'remote()'
4248 $ log 'remote()'
4249 7
4249 7
4250 $ log 'remote("a-b-c-")'
4250 $ log 'remote("a-b-c-")'
4251 2
4251 2
4252 $ cd ../repo
4252 $ cd ../repo
4253 $ log 'remote(".a.b.c.", "../remote3")'
4253 $ log 'remote(".a.b.c.", "../remote3")'
4254
4254
4255 tests for concatenation of strings/symbols by "##"
4255 tests for concatenation of strings/symbols by "##"
4256
4256
4257 $ try "278 ## '5f5' ## 1ee ## 'ce5'"
4257 $ try "278 ## '5f5' ## 1ee ## 'ce5'"
4258 (_concat
4258 (_concat
4259 (_concat
4259 (_concat
4260 (_concat
4260 (_concat
4261 ('symbol', '278')
4261 ('symbol', '278')
4262 ('string', '5f5'))
4262 ('string', '5f5'))
4263 ('symbol', '1ee'))
4263 ('symbol', '1ee'))
4264 ('string', 'ce5'))
4264 ('string', 'ce5'))
4265 * concatenated:
4265 * concatenated:
4266 ('string', '2785f51eece5')
4266 ('string', '2785f51eece5')
4267 * set:
4267 * set:
4268 <baseset [0]>
4268 <baseset [0]>
4269 0
4269 0
4270
4270
4271 $ echo 'cat4($1, $2, $3, $4) = $1 ## $2 ## $3 ## $4' >> .hg/hgrc
4271 $ echo 'cat4($1, $2, $3, $4) = $1 ## $2 ## $3 ## $4' >> .hg/hgrc
4272 $ try "cat4(278, '5f5', 1ee, 'ce5')"
4272 $ try "cat4(278, '5f5', 1ee, 'ce5')"
4273 (func
4273 (func
4274 ('symbol', 'cat4')
4274 ('symbol', 'cat4')
4275 (list
4275 (list
4276 ('symbol', '278')
4276 ('symbol', '278')
4277 ('string', '5f5')
4277 ('string', '5f5')
4278 ('symbol', '1ee')
4278 ('symbol', '1ee')
4279 ('string', 'ce5')))
4279 ('string', 'ce5')))
4280 * expanded:
4280 * expanded:
4281 (_concat
4281 (_concat
4282 (_concat
4282 (_concat
4283 (_concat
4283 (_concat
4284 ('symbol', '278')
4284 ('symbol', '278')
4285 ('string', '5f5'))
4285 ('string', '5f5'))
4286 ('symbol', '1ee'))
4286 ('symbol', '1ee'))
4287 ('string', 'ce5'))
4287 ('string', 'ce5'))
4288 * concatenated:
4288 * concatenated:
4289 ('string', '2785f51eece5')
4289 ('string', '2785f51eece5')
4290 * set:
4290 * set:
4291 <baseset [0]>
4291 <baseset [0]>
4292 0
4292 0
4293
4293
4294 (check concatenation in alias nesting)
4294 (check concatenation in alias nesting)
4295
4295
4296 $ echo 'cat2($1, $2) = $1 ## $2' >> .hg/hgrc
4296 $ echo 'cat2($1, $2) = $1 ## $2' >> .hg/hgrc
4297 $ echo 'cat2x2($1, $2, $3, $4) = cat2($1 ## $2, $3 ## $4)' >> .hg/hgrc
4297 $ echo 'cat2x2($1, $2, $3, $4) = cat2($1 ## $2, $3 ## $4)' >> .hg/hgrc
4298 $ log "cat2x2(278, '5f5', 1ee, 'ce5')"
4298 $ log "cat2x2(278, '5f5', 1ee, 'ce5')"
4299 0
4299 0
4300
4300
4301 (check operator priority)
4301 (check operator priority)
4302
4302
4303 $ echo 'cat2n2($1, $2, $3, $4) = $1 ## $2 or $3 ## $4~2' >> .hg/hgrc
4303 $ echo 'cat2n2($1, $2, $3, $4) = $1 ## $2 or $3 ## $4~2' >> .hg/hgrc
4304 $ log "cat2n2(2785f5, 1eece5, 24286f, 4ae135)"
4304 $ log "cat2n2(2785f5, 1eece5, 24286f, 4ae135)"
4305 0
4305 0
4306 4
4306 4
4307
4307
4308 $ cd ..
4308 $ cd ..
4309
4309
4310 prepare repository that has "default" branches of multiple roots
4310 prepare repository that has "default" branches of multiple roots
4311
4311
4312 $ hg init namedbranch
4312 $ hg init namedbranch
4313 $ cd namedbranch
4313 $ cd namedbranch
4314
4314
4315 $ echo default0 >> a
4315 $ echo default0 >> a
4316 $ hg ci -Aqm0
4316 $ hg ci -Aqm0
4317 $ echo default1 >> a
4317 $ echo default1 >> a
4318 $ hg ci -m1
4318 $ hg ci -m1
4319
4319
4320 $ hg branch -q stable
4320 $ hg branch -q stable
4321 $ echo stable2 >> a
4321 $ echo stable2 >> a
4322 $ hg ci -m2
4322 $ hg ci -m2
4323 $ echo stable3 >> a
4323 $ echo stable3 >> a
4324 $ hg ci -m3
4324 $ hg ci -m3
4325
4325
4326 $ hg update -q null
4326 $ hg update -q null
4327 $ echo default4 >> a
4327 $ echo default4 >> a
4328 $ hg ci -Aqm4
4328 $ hg ci -Aqm4
4329 $ echo default5 >> a
4329 $ echo default5 >> a
4330 $ hg ci -m5
4330 $ hg ci -m5
4331
4331
4332 "null" revision belongs to "default" branch (issue4683)
4332 "null" revision belongs to "default" branch (issue4683)
4333
4333
4334 $ log 'branch(null)'
4334 $ log 'branch(null)'
4335 0
4335 0
4336 1
4336 1
4337 4
4337 4
4338 5
4338 5
4339
4339
4340 "null" revision belongs to "default" branch, but it shouldn't appear in set
4340 "null" revision belongs to "default" branch, but it shouldn't appear in set
4341 unless explicitly specified (issue4682)
4341 unless explicitly specified (issue4682)
4342
4342
4343 $ log 'children(branch(default))'
4343 $ log 'children(branch(default))'
4344 1
4344 1
4345 2
4345 2
4346 5
4346 5
4347
4347
4348 $ cd ..
4348 $ cd ..
4349
4349
4350 test author/desc/keyword in problematic encoding
4350 test author/desc/keyword in problematic encoding
4351 # unicode: cp932:
4351 # unicode: cp932:
4352 # u30A2 0x83 0x41(= 'A')
4352 # u30A2 0x83 0x41(= 'A')
4353 # u30C2 0x83 0x61(= 'a')
4353 # u30C2 0x83 0x61(= 'a')
4354
4354
4355 $ hg init problematicencoding
4355 $ hg init problematicencoding
4356 $ cd problematicencoding
4356 $ cd problematicencoding
4357
4357
4358 $ $PYTHON > setup.sh <<EOF
4358 $ $PYTHON > setup.sh <<EOF
4359 > print u'''
4359 > print u'''
4360 > echo a > text
4360 > echo a > text
4361 > hg add text
4361 > hg add text
4362 > hg --encoding utf-8 commit -u '\u30A2' -m none
4362 > hg --encoding utf-8 commit -u '\u30A2' -m none
4363 > echo b > text
4363 > echo b > text
4364 > hg --encoding utf-8 commit -u '\u30C2' -m none
4364 > hg --encoding utf-8 commit -u '\u30C2' -m none
4365 > echo c > text
4365 > echo c > text
4366 > hg --encoding utf-8 commit -u none -m '\u30A2'
4366 > hg --encoding utf-8 commit -u none -m '\u30A2'
4367 > echo d > text
4367 > echo d > text
4368 > hg --encoding utf-8 commit -u none -m '\u30C2'
4368 > hg --encoding utf-8 commit -u none -m '\u30C2'
4369 > '''.encode('utf-8')
4369 > '''.encode('utf-8')
4370 > EOF
4370 > EOF
4371 $ sh < setup.sh
4371 $ sh < setup.sh
4372
4372
4373 test in problematic encoding
4373 test in problematic encoding
4374 $ $PYTHON > test.sh <<EOF
4374 $ $PYTHON > test.sh <<EOF
4375 > print u'''
4375 > print u'''
4376 > hg --encoding cp932 log --template '{rev}\\n' -r 'author(\u30A2)'
4376 > hg --encoding cp932 log --template '{rev}\\n' -r 'author(\u30A2)'
4377 > echo ====
4377 > echo ====
4378 > hg --encoding cp932 log --template '{rev}\\n' -r 'author(\u30C2)'
4378 > hg --encoding cp932 log --template '{rev}\\n' -r 'author(\u30C2)'
4379 > echo ====
4379 > echo ====
4380 > hg --encoding cp932 log --template '{rev}\\n' -r 'desc(\u30A2)'
4380 > hg --encoding cp932 log --template '{rev}\\n' -r 'desc(\u30A2)'
4381 > echo ====
4381 > echo ====
4382 > hg --encoding cp932 log --template '{rev}\\n' -r 'desc(\u30C2)'
4382 > hg --encoding cp932 log --template '{rev}\\n' -r 'desc(\u30C2)'
4383 > echo ====
4383 > echo ====
4384 > hg --encoding cp932 log --template '{rev}\\n' -r 'keyword(\u30A2)'
4384 > hg --encoding cp932 log --template '{rev}\\n' -r 'keyword(\u30A2)'
4385 > echo ====
4385 > echo ====
4386 > hg --encoding cp932 log --template '{rev}\\n' -r 'keyword(\u30C2)'
4386 > hg --encoding cp932 log --template '{rev}\\n' -r 'keyword(\u30C2)'
4387 > '''.encode('cp932')
4387 > '''.encode('cp932')
4388 > EOF
4388 > EOF
4389 $ sh < test.sh
4389 $ sh < test.sh
4390 0
4390 0
4391 ====
4391 ====
4392 1
4392 1
4393 ====
4393 ====
4394 2
4394 2
4395 ====
4395 ====
4396 3
4396 3
4397 ====
4397 ====
4398 0
4398 0
4399 2
4399 2
4400 ====
4400 ====
4401 1
4401 1
4402 3
4402 3
4403
4403
4404 test error message of bad revset
4404 test error message of bad revset
4405 $ hg log -r 'foo\\'
4405 $ hg log -r 'foo\\'
4406 hg: parse error at 3: syntax error in revset 'foo\\'
4406 hg: parse error at 3: syntax error in revset 'foo\\'
4407 [255]
4407 [255]
4408
4408
4409 $ cd ..
4409 $ cd ..
4410
4410
4411 Test that revset predicate of extension isn't loaded at failure of
4411 Test that revset predicate of extension isn't loaded at failure of
4412 loading it
4412 loading it
4413
4413
4414 $ cd repo
4414 $ cd repo
4415
4415
4416 $ cat <<EOF > $TESTTMP/custompredicate.py
4416 $ cat <<EOF > $TESTTMP/custompredicate.py
4417 > from mercurial import error, registrar, revset
4417 > from mercurial import error, registrar, revset
4418 >
4418 >
4419 > revsetpredicate = registrar.revsetpredicate()
4419 > revsetpredicate = registrar.revsetpredicate()
4420 >
4420 >
4421 > @revsetpredicate('custom1()')
4421 > @revsetpredicate('custom1()')
4422 > def custom1(repo, subset, x):
4422 > def custom1(repo, subset, x):
4423 > return revset.baseset([1])
4423 > return revset.baseset([1])
4424 >
4424 >
4425 > raise error.Abort('intentional failure of loading extension')
4425 > raise error.Abort('intentional failure of loading extension')
4426 > EOF
4426 > EOF
4427 $ cat <<EOF > .hg/hgrc
4427 $ cat <<EOF > .hg/hgrc
4428 > [extensions]
4428 > [extensions]
4429 > custompredicate = $TESTTMP/custompredicate.py
4429 > custompredicate = $TESTTMP/custompredicate.py
4430 > EOF
4430 > EOF
4431
4431
4432 $ hg debugrevspec "custom1()"
4432 $ hg debugrevspec "custom1()"
4433 *** failed to import extension custompredicate from $TESTTMP/custompredicate.py: intentional failure of loading extension
4433 *** failed to import extension custompredicate from $TESTTMP/custompredicate.py: intentional failure of loading extension
4434 hg: parse error: unknown identifier: custom1
4434 hg: parse error: unknown identifier: custom1
4435 [255]
4435 [255]
4436
4436
4437 Test repo.anyrevs with customized revset overrides
4437 Test repo.anyrevs with customized revset overrides
4438
4438
4439 $ cat > $TESTTMP/printprevset.py <<EOF
4439 $ cat > $TESTTMP/printprevset.py <<EOF
4440 > from mercurial import encoding
4440 > from mercurial import encoding, registrar
4441 > def reposetup(ui, repo):
4441 > cmdtable = {}
4442 > command = registrar.command(cmdtable)
4443 > @command('printprevset')
4444 > def printprevset(ui, repo):
4442 > alias = {}
4445 > alias = {}
4443 > p = encoding.environ.get('P')
4446 > p = encoding.environ.get('P')
4444 > if p:
4447 > if p:
4445 > alias['P'] = p
4448 > alias['P'] = p
4446 > revs = repo.anyrevs(['P'], user=True, localalias=alias)
4449 > revs = repo.anyrevs(['P'], user=True, localalias=alias)
4447 > ui.write('P=%r' % list(revs))
4450 > ui.write('P=%r\n' % list(revs))
4448 > EOF
4451 > EOF
4449
4452
4450 $ cat >> .hg/hgrc <<EOF
4453 $ cat >> .hg/hgrc <<EOF
4451 > custompredicate = !
4454 > custompredicate = !
4452 > printprevset = $TESTTMP/printprevset.py
4455 > printprevset = $TESTTMP/printprevset.py
4453 > EOF
4456 > EOF
4454
4457
4455 $ hg --config revsetalias.P=1 log -r . -T '\n'
4458 $ hg --config revsetalias.P=1 printprevset
4456 P=[1]
4459 P=[1]
4457 $ P=3 hg --config revsetalias.P=2 log -r . -T '\n'
4460 $ P=3 hg --config revsetalias.P=2 printprevset
4458 P=[3]
4461 P=[3]
4459
4462
4460 $ cd ..
4463 $ cd ..
4461
4464
4462 Test obsstore related revsets
4465 Test obsstore related revsets
4463
4466
4464 $ hg init repo1
4467 $ hg init repo1
4465 $ cd repo1
4468 $ cd repo1
4466 $ cat <<EOF >> .hg/hgrc
4469 $ cat <<EOF >> .hg/hgrc
4467 > [experimental]
4470 > [experimental]
4468 > stabilization = createmarkers
4471 > stabilization = createmarkers
4469 > EOF
4472 > EOF
4470
4473
4471 $ hg debugdrawdag <<'EOS'
4474 $ hg debugdrawdag <<'EOS'
4472 > F G
4475 > F G
4473 > |/ # split: B -> E, F
4476 > |/ # split: B -> E, F
4474 > B C D E # amend: B -> C -> D
4477 > B C D E # amend: B -> C -> D
4475 > \|/ | # amend: F -> G
4478 > \|/ | # amend: F -> G
4476 > A A Z # amend: A -> Z
4479 > A A Z # amend: A -> Z
4477 > EOS
4480 > EOS
4478
4481
4479 $ hg log -r 'successors(Z)' -T '{desc}\n'
4482 $ hg log -r 'successors(Z)' -T '{desc}\n'
4480 Z
4483 Z
4481
4484
4482 $ hg log -r 'successors(F)' -T '{desc}\n'
4485 $ hg log -r 'successors(F)' -T '{desc}\n'
4483 F
4486 F
4484 G
4487 G
4485
4488
4486 $ hg tag --remove --local C D E F G
4489 $ hg tag --remove --local C D E F G
4487
4490
4488 $ hg log -r 'successors(B)' -T '{desc}\n'
4491 $ hg log -r 'successors(B)' -T '{desc}\n'
4489 B
4492 B
4490 D
4493 D
4491 E
4494 E
4492 G
4495 G
4493
4496
4494 $ hg log -r 'successors(B)' -T '{desc}\n' --hidden
4497 $ hg log -r 'successors(B)' -T '{desc}\n' --hidden
4495 B
4498 B
4496 C
4499 C
4497 D
4500 D
4498 E
4501 E
4499 F
4502 F
4500 G
4503 G
4501
4504
4502 $ hg log -r 'successors(B)-obsolete()' -T '{desc}\n' --hidden
4505 $ hg log -r 'successors(B)-obsolete()' -T '{desc}\n' --hidden
4503 D
4506 D
4504 E
4507 E
4505 G
4508 G
4506
4509
4507 $ hg log -r 'successors(B+A)-contentdivergent()' -T '{desc}\n'
4510 $ hg log -r 'successors(B+A)-contentdivergent()' -T '{desc}\n'
4508 A
4511 A
4509 Z
4512 Z
4510 B
4513 B
4511
4514
4512 $ hg log -r 'successors(B+A)-contentdivergent()-obsolete()' -T '{desc}\n'
4515 $ hg log -r 'successors(B+A)-contentdivergent()-obsolete()' -T '{desc}\n'
4513 Z
4516 Z
General Comments 0
You need to be logged in to leave comments. Login now