##// END OF EJS Templates
tests: update test-command-template to pass our import checker
Augie Fackler -
r33952:42361715 default
parent child Browse files
Show More
@@ -1,4570 +1,4571 b''
1 $ hg init a
1 $ hg init a
2 $ cd a
2 $ cd a
3 $ echo a > a
3 $ echo a > a
4 $ hg add a
4 $ hg add a
5 $ echo line 1 > b
5 $ echo line 1 > b
6 $ echo line 2 >> b
6 $ echo line 2 >> b
7 $ hg commit -l b -d '1000000 0' -u 'User Name <user@hostname>'
7 $ hg commit -l b -d '1000000 0' -u 'User Name <user@hostname>'
8
8
9 $ hg add b
9 $ hg add b
10 $ echo other 1 > c
10 $ echo other 1 > c
11 $ echo other 2 >> c
11 $ echo other 2 >> c
12 $ echo >> c
12 $ echo >> c
13 $ echo other 3 >> c
13 $ echo other 3 >> c
14 $ hg commit -l c -d '1100000 0' -u 'A. N. Other <other@place>'
14 $ hg commit -l c -d '1100000 0' -u 'A. N. Other <other@place>'
15
15
16 $ hg add c
16 $ hg add c
17 $ hg commit -m 'no person' -d '1200000 0' -u 'other@place'
17 $ hg commit -m 'no person' -d '1200000 0' -u 'other@place'
18 $ echo c >> c
18 $ echo c >> c
19 $ hg commit -m 'no user, no domain' -d '1300000 0' -u 'person'
19 $ hg commit -m 'no user, no domain' -d '1300000 0' -u 'person'
20
20
21 $ echo foo > .hg/branch
21 $ echo foo > .hg/branch
22 $ hg commit -m 'new branch' -d '1400000 0' -u 'person'
22 $ hg commit -m 'new branch' -d '1400000 0' -u 'person'
23
23
24 $ hg co -q 3
24 $ hg co -q 3
25 $ echo other 4 >> d
25 $ echo other 4 >> d
26 $ hg add d
26 $ hg add d
27 $ hg commit -m 'new head' -d '1500000 0' -u 'person'
27 $ hg commit -m 'new head' -d '1500000 0' -u 'person'
28
28
29 $ hg merge -q foo
29 $ hg merge -q foo
30 $ hg commit -m 'merge' -d '1500001 0' -u 'person'
30 $ hg commit -m 'merge' -d '1500001 0' -u 'person'
31
31
32 Test arithmetic operators have the right precedence:
32 Test arithmetic operators have the right precedence:
33
33
34 $ hg log -l 1 -T '{date(date, "%Y") + 5 * 10} {date(date, "%Y") - 2 * 3}\n'
34 $ hg log -l 1 -T '{date(date, "%Y") + 5 * 10} {date(date, "%Y") - 2 * 3}\n'
35 2020 1964
35 2020 1964
36 $ hg log -l 1 -T '{date(date, "%Y") * 5 + 10} {date(date, "%Y") * 3 - 2}\n'
36 $ hg log -l 1 -T '{date(date, "%Y") * 5 + 10} {date(date, "%Y") * 3 - 2}\n'
37 9860 5908
37 9860 5908
38
38
39 Test division:
39 Test division:
40
40
41 $ hg debugtemplate -r0 -v '{5 / 2} {mod(5, 2)}\n'
41 $ hg debugtemplate -r0 -v '{5 / 2} {mod(5, 2)}\n'
42 (template
42 (template
43 (/
43 (/
44 ('integer', '5')
44 ('integer', '5')
45 ('integer', '2'))
45 ('integer', '2'))
46 ('string', ' ')
46 ('string', ' ')
47 (func
47 (func
48 ('symbol', 'mod')
48 ('symbol', 'mod')
49 (list
49 (list
50 ('integer', '5')
50 ('integer', '5')
51 ('integer', '2')))
51 ('integer', '2')))
52 ('string', '\n'))
52 ('string', '\n'))
53 2 1
53 2 1
54 $ hg debugtemplate -r0 -v '{5 / -2} {mod(5, -2)}\n'
54 $ hg debugtemplate -r0 -v '{5 / -2} {mod(5, -2)}\n'
55 (template
55 (template
56 (/
56 (/
57 ('integer', '5')
57 ('integer', '5')
58 (negate
58 (negate
59 ('integer', '2')))
59 ('integer', '2')))
60 ('string', ' ')
60 ('string', ' ')
61 (func
61 (func
62 ('symbol', 'mod')
62 ('symbol', 'mod')
63 (list
63 (list
64 ('integer', '5')
64 ('integer', '5')
65 (negate
65 (negate
66 ('integer', '2'))))
66 ('integer', '2'))))
67 ('string', '\n'))
67 ('string', '\n'))
68 -3 -1
68 -3 -1
69 $ hg debugtemplate -r0 -v '{-5 / 2} {mod(-5, 2)}\n'
69 $ hg debugtemplate -r0 -v '{-5 / 2} {mod(-5, 2)}\n'
70 (template
70 (template
71 (/
71 (/
72 (negate
72 (negate
73 ('integer', '5'))
73 ('integer', '5'))
74 ('integer', '2'))
74 ('integer', '2'))
75 ('string', ' ')
75 ('string', ' ')
76 (func
76 (func
77 ('symbol', 'mod')
77 ('symbol', 'mod')
78 (list
78 (list
79 (negate
79 (negate
80 ('integer', '5'))
80 ('integer', '5'))
81 ('integer', '2')))
81 ('integer', '2')))
82 ('string', '\n'))
82 ('string', '\n'))
83 -3 1
83 -3 1
84 $ hg debugtemplate -r0 -v '{-5 / -2} {mod(-5, -2)}\n'
84 $ hg debugtemplate -r0 -v '{-5 / -2} {mod(-5, -2)}\n'
85 (template
85 (template
86 (/
86 (/
87 (negate
87 (negate
88 ('integer', '5'))
88 ('integer', '5'))
89 (negate
89 (negate
90 ('integer', '2')))
90 ('integer', '2')))
91 ('string', ' ')
91 ('string', ' ')
92 (func
92 (func
93 ('symbol', 'mod')
93 ('symbol', 'mod')
94 (list
94 (list
95 (negate
95 (negate
96 ('integer', '5'))
96 ('integer', '5'))
97 (negate
97 (negate
98 ('integer', '2'))))
98 ('integer', '2'))))
99 ('string', '\n'))
99 ('string', '\n'))
100 2 -1
100 2 -1
101
101
102 Filters bind closer than arithmetic:
102 Filters bind closer than arithmetic:
103
103
104 $ hg debugtemplate -r0 -v '{revset(".")|count - 1}\n'
104 $ hg debugtemplate -r0 -v '{revset(".")|count - 1}\n'
105 (template
105 (template
106 (-
106 (-
107 (|
107 (|
108 (func
108 (func
109 ('symbol', 'revset')
109 ('symbol', 'revset')
110 ('string', '.'))
110 ('string', '.'))
111 ('symbol', 'count'))
111 ('symbol', 'count'))
112 ('integer', '1'))
112 ('integer', '1'))
113 ('string', '\n'))
113 ('string', '\n'))
114 0
114 0
115
115
116 But negate binds closer still:
116 But negate binds closer still:
117
117
118 $ hg debugtemplate -r0 -v '{1-3|stringify}\n'
118 $ hg debugtemplate -r0 -v '{1-3|stringify}\n'
119 (template
119 (template
120 (-
120 (-
121 ('integer', '1')
121 ('integer', '1')
122 (|
122 (|
123 ('integer', '3')
123 ('integer', '3')
124 ('symbol', 'stringify')))
124 ('symbol', 'stringify')))
125 ('string', '\n'))
125 ('string', '\n'))
126 hg: parse error: arithmetic only defined on integers
126 hg: parse error: arithmetic only defined on integers
127 [255]
127 [255]
128 $ hg debugtemplate -r0 -v '{-3|stringify}\n'
128 $ hg debugtemplate -r0 -v '{-3|stringify}\n'
129 (template
129 (template
130 (|
130 (|
131 (negate
131 (negate
132 ('integer', '3'))
132 ('integer', '3'))
133 ('symbol', 'stringify'))
133 ('symbol', 'stringify'))
134 ('string', '\n'))
134 ('string', '\n'))
135 -3
135 -3
136
136
137 Keyword arguments:
137 Keyword arguments:
138
138
139 $ hg debugtemplate -r0 -v '{foo=bar|baz}'
139 $ hg debugtemplate -r0 -v '{foo=bar|baz}'
140 (template
140 (template
141 (keyvalue
141 (keyvalue
142 ('symbol', 'foo')
142 ('symbol', 'foo')
143 (|
143 (|
144 ('symbol', 'bar')
144 ('symbol', 'bar')
145 ('symbol', 'baz'))))
145 ('symbol', 'baz'))))
146 hg: parse error: can't use a key-value pair in this context
146 hg: parse error: can't use a key-value pair in this context
147 [255]
147 [255]
148
148
149 $ hg debugtemplate '{pad("foo", width=10, left=true)}\n'
149 $ hg debugtemplate '{pad("foo", width=10, left=true)}\n'
150 foo
150 foo
151
151
152 Call function which takes named arguments by filter syntax:
152 Call function which takes named arguments by filter syntax:
153
153
154 $ hg debugtemplate '{" "|separate}'
154 $ hg debugtemplate '{" "|separate}'
155 $ hg debugtemplate '{("not", "an", "argument", "list")|separate}'
155 $ hg debugtemplate '{("not", "an", "argument", "list")|separate}'
156 hg: parse error: unknown method 'list'
156 hg: parse error: unknown method 'list'
157 [255]
157 [255]
158
158
159 Second branch starting at nullrev:
159 Second branch starting at nullrev:
160
160
161 $ hg update null
161 $ hg update null
162 0 files updated, 0 files merged, 4 files removed, 0 files unresolved
162 0 files updated, 0 files merged, 4 files removed, 0 files unresolved
163 $ echo second > second
163 $ echo second > second
164 $ hg add second
164 $ hg add second
165 $ hg commit -m second -d '1000000 0' -u 'User Name <user@hostname>'
165 $ hg commit -m second -d '1000000 0' -u 'User Name <user@hostname>'
166 created new head
166 created new head
167
167
168 $ echo third > third
168 $ echo third > third
169 $ hg add third
169 $ hg add third
170 $ hg mv second fourth
170 $ hg mv second fourth
171 $ hg commit -m third -d "2020-01-01 10:01"
171 $ hg commit -m third -d "2020-01-01 10:01"
172
172
173 $ hg log --template '{join(file_copies, ",\n")}\n' -r .
173 $ hg log --template '{join(file_copies, ",\n")}\n' -r .
174 fourth (second)
174 fourth (second)
175 $ hg log -T '{file_copies % "{source} -> {name}\n"}' -r .
175 $ hg log -T '{file_copies % "{source} -> {name}\n"}' -r .
176 second -> fourth
176 second -> fourth
177 $ hg log -T '{rev} {ifcontains("fourth", file_copies, "t", "f")}\n' -r .:7
177 $ hg log -T '{rev} {ifcontains("fourth", file_copies, "t", "f")}\n' -r .:7
178 8 t
178 8 t
179 7 f
179 7 f
180
180
181 Working-directory revision has special identifiers, though they are still
181 Working-directory revision has special identifiers, though they are still
182 experimental:
182 experimental:
183
183
184 $ hg log -r 'wdir()' -T '{rev}:{node}\n'
184 $ hg log -r 'wdir()' -T '{rev}:{node}\n'
185 2147483647:ffffffffffffffffffffffffffffffffffffffff
185 2147483647:ffffffffffffffffffffffffffffffffffffffff
186
186
187 Some keywords are invalid for working-directory revision, but they should
187 Some keywords are invalid for working-directory revision, but they should
188 never cause crash:
188 never cause crash:
189
189
190 $ hg log -r 'wdir()' -T '{manifest}\n'
190 $ hg log -r 'wdir()' -T '{manifest}\n'
191
191
192
192
193 Quoting for ui.logtemplate
193 Quoting for ui.logtemplate
194
194
195 $ hg tip --config "ui.logtemplate={rev}\n"
195 $ hg tip --config "ui.logtemplate={rev}\n"
196 8
196 8
197 $ hg tip --config "ui.logtemplate='{rev}\n'"
197 $ hg tip --config "ui.logtemplate='{rev}\n'"
198 8
198 8
199 $ hg tip --config 'ui.logtemplate="{rev}\n"'
199 $ hg tip --config 'ui.logtemplate="{rev}\n"'
200 8
200 8
201 $ hg tip --config 'ui.logtemplate=n{rev}\n'
201 $ hg tip --config 'ui.logtemplate=n{rev}\n'
202 n8
202 n8
203
203
204 Make sure user/global hgrc does not affect tests
204 Make sure user/global hgrc does not affect tests
205
205
206 $ echo '[ui]' > .hg/hgrc
206 $ echo '[ui]' > .hg/hgrc
207 $ echo 'logtemplate =' >> .hg/hgrc
207 $ echo 'logtemplate =' >> .hg/hgrc
208 $ echo 'style =' >> .hg/hgrc
208 $ echo 'style =' >> .hg/hgrc
209
209
210 Add some simple styles to settings
210 Add some simple styles to settings
211
211
212 $ cat <<'EOF' >> .hg/hgrc
212 $ cat <<'EOF' >> .hg/hgrc
213 > [templates]
213 > [templates]
214 > simple = "{rev}\n"
214 > simple = "{rev}\n"
215 > simple2 = {rev}\n
215 > simple2 = {rev}\n
216 > rev = "should not precede {rev} keyword\n"
216 > rev = "should not precede {rev} keyword\n"
217 > EOF
217 > EOF
218
218
219 $ hg log -l1 -Tsimple
219 $ hg log -l1 -Tsimple
220 8
220 8
221 $ hg log -l1 -Tsimple2
221 $ hg log -l1 -Tsimple2
222 8
222 8
223 $ hg log -l1 -Trev
223 $ hg log -l1 -Trev
224 should not precede 8 keyword
224 should not precede 8 keyword
225 $ hg log -l1 -T '{simple}'
225 $ hg log -l1 -T '{simple}'
226 8
226 8
227
227
228 Map file shouldn't see user templates:
228 Map file shouldn't see user templates:
229
229
230 $ cat <<EOF > tmpl
230 $ cat <<EOF > tmpl
231 > changeset = 'nothing expanded:{simple}\n'
231 > changeset = 'nothing expanded:{simple}\n'
232 > EOF
232 > EOF
233 $ hg log -l1 --style ./tmpl
233 $ hg log -l1 --style ./tmpl
234 nothing expanded:
234 nothing expanded:
235
235
236 Test templates and style maps in files:
236 Test templates and style maps in files:
237
237
238 $ echo "{rev}" > tmpl
238 $ echo "{rev}" > tmpl
239 $ hg log -l1 -T./tmpl
239 $ hg log -l1 -T./tmpl
240 8
240 8
241 $ hg log -l1 -Tblah/blah
241 $ hg log -l1 -Tblah/blah
242 blah/blah (no-eol)
242 blah/blah (no-eol)
243
243
244 $ printf 'changeset = "{rev}\\n"\n' > map-simple
244 $ printf 'changeset = "{rev}\\n"\n' > map-simple
245 $ hg log -l1 -T./map-simple
245 $ hg log -l1 -T./map-simple
246 8
246 8
247
247
248 Test template map inheritance
248 Test template map inheritance
249
249
250 $ echo "__base__ = map-cmdline.default" > map-simple
250 $ echo "__base__ = map-cmdline.default" > map-simple
251 $ printf 'cset = "changeset: ***{rev}***\\n"\n' >> map-simple
251 $ printf 'cset = "changeset: ***{rev}***\\n"\n' >> map-simple
252 $ hg log -l1 -T./map-simple
252 $ hg log -l1 -T./map-simple
253 changeset: ***8***
253 changeset: ***8***
254 tag: tip
254 tag: tip
255 user: test
255 user: test
256 date: Wed Jan 01 10:01:00 2020 +0000
256 date: Wed Jan 01 10:01:00 2020 +0000
257 summary: third
257 summary: third
258
258
259
259
260 Test docheader, docfooter and separator in template map
260 Test docheader, docfooter and separator in template map
261
261
262 $ cat <<'EOF' > map-myjson
262 $ cat <<'EOF' > map-myjson
263 > docheader = '\{\n'
263 > docheader = '\{\n'
264 > docfooter = '\n}\n'
264 > docfooter = '\n}\n'
265 > separator = ',\n'
265 > separator = ',\n'
266 > changeset = ' {dict(rev, node|short)|json}'
266 > changeset = ' {dict(rev, node|short)|json}'
267 > EOF
267 > EOF
268 $ hg log -l2 -T./map-myjson
268 $ hg log -l2 -T./map-myjson
269 {
269 {
270 {"node": "95c24699272e", "rev": 8},
270 {"node": "95c24699272e", "rev": 8},
271 {"node": "29114dbae42b", "rev": 7}
271 {"node": "29114dbae42b", "rev": 7}
272 }
272 }
273
273
274 Test docheader, docfooter and separator in [templates] section
274 Test docheader, docfooter and separator in [templates] section
275
275
276 $ cat <<'EOF' >> .hg/hgrc
276 $ cat <<'EOF' >> .hg/hgrc
277 > [templates]
277 > [templates]
278 > myjson = ' {dict(rev, node|short)|json}'
278 > myjson = ' {dict(rev, node|short)|json}'
279 > myjson:docheader = '\{\n'
279 > myjson:docheader = '\{\n'
280 > myjson:docfooter = '\n}\n'
280 > myjson:docfooter = '\n}\n'
281 > myjson:separator = ',\n'
281 > myjson:separator = ',\n'
282 > :docheader = 'should not be selected as a docheader for literal templates\n'
282 > :docheader = 'should not be selected as a docheader for literal templates\n'
283 > EOF
283 > EOF
284 $ hg log -l2 -Tmyjson
284 $ hg log -l2 -Tmyjson
285 {
285 {
286 {"node": "95c24699272e", "rev": 8},
286 {"node": "95c24699272e", "rev": 8},
287 {"node": "29114dbae42b", "rev": 7}
287 {"node": "29114dbae42b", "rev": 7}
288 }
288 }
289 $ hg log -l1 -T'{rev}\n'
289 $ hg log -l1 -T'{rev}\n'
290 8
290 8
291
291
292 Template should precede style option
292 Template should precede style option
293
293
294 $ hg log -l1 --style default -T '{rev}\n'
294 $ hg log -l1 --style default -T '{rev}\n'
295 8
295 8
296
296
297 Add a commit with empty description, to ensure that the templates
297 Add a commit with empty description, to ensure that the templates
298 below will omit the description line.
298 below will omit the description line.
299
299
300 $ echo c >> c
300 $ echo c >> c
301 $ hg add c
301 $ hg add c
302 $ hg commit -qm ' '
302 $ hg commit -qm ' '
303
303
304 Default style is like normal output. Phases style should be the same
304 Default style is like normal output. Phases style should be the same
305 as default style, except for extra phase lines.
305 as default style, except for extra phase lines.
306
306
307 $ hg log > log.out
307 $ hg log > log.out
308 $ hg log --style default > style.out
308 $ hg log --style default > style.out
309 $ cmp log.out style.out || diff -u log.out style.out
309 $ cmp log.out style.out || diff -u log.out style.out
310 $ hg log -T phases > phases.out
310 $ hg log -T phases > phases.out
311 $ diff -U 0 log.out phases.out | egrep -v '^---|^\+\+\+|^@@'
311 $ diff -U 0 log.out phases.out | egrep -v '^---|^\+\+\+|^@@'
312 +phase: draft
312 +phase: draft
313 +phase: draft
313 +phase: draft
314 +phase: draft
314 +phase: draft
315 +phase: draft
315 +phase: draft
316 +phase: draft
316 +phase: draft
317 +phase: draft
317 +phase: draft
318 +phase: draft
318 +phase: draft
319 +phase: draft
319 +phase: draft
320 +phase: draft
320 +phase: draft
321 +phase: draft
321 +phase: draft
322
322
323 $ hg log -v > log.out
323 $ hg log -v > log.out
324 $ hg log -v --style default > style.out
324 $ hg log -v --style default > style.out
325 $ cmp log.out style.out || diff -u log.out style.out
325 $ cmp log.out style.out || diff -u log.out style.out
326 $ hg log -v -T phases > phases.out
326 $ hg log -v -T phases > phases.out
327 $ diff -U 0 log.out phases.out | egrep -v '^---|^\+\+\+|^@@'
327 $ diff -U 0 log.out phases.out | egrep -v '^---|^\+\+\+|^@@'
328 +phase: draft
328 +phase: draft
329 +phase: draft
329 +phase: draft
330 +phase: draft
330 +phase: draft
331 +phase: draft
331 +phase: draft
332 +phase: draft
332 +phase: draft
333 +phase: draft
333 +phase: draft
334 +phase: draft
334 +phase: draft
335 +phase: draft
335 +phase: draft
336 +phase: draft
336 +phase: draft
337 +phase: draft
337 +phase: draft
338
338
339 $ hg log -q > log.out
339 $ hg log -q > log.out
340 $ hg log -q --style default > style.out
340 $ hg log -q --style default > style.out
341 $ cmp log.out style.out || diff -u log.out style.out
341 $ cmp log.out style.out || diff -u log.out style.out
342 $ hg log -q -T phases > phases.out
342 $ hg log -q -T phases > phases.out
343 $ cmp log.out phases.out || diff -u log.out phases.out
343 $ cmp log.out phases.out || diff -u log.out phases.out
344
344
345 $ hg log --debug > log.out
345 $ hg log --debug > log.out
346 $ hg log --debug --style default > style.out
346 $ hg log --debug --style default > style.out
347 $ cmp log.out style.out || diff -u log.out style.out
347 $ cmp log.out style.out || diff -u log.out style.out
348 $ hg log --debug -T phases > phases.out
348 $ hg log --debug -T phases > phases.out
349 $ cmp log.out phases.out || diff -u log.out phases.out
349 $ cmp log.out phases.out || diff -u log.out phases.out
350
350
351 Default style of working-directory revision should also be the same (but
351 Default style of working-directory revision should also be the same (but
352 date may change while running tests):
352 date may change while running tests):
353
353
354 $ hg log -r 'wdir()' | sed 's|^date:.*|date:|' > log.out
354 $ hg log -r 'wdir()' | sed 's|^date:.*|date:|' > log.out
355 $ hg log -r 'wdir()' --style default | sed 's|^date:.*|date:|' > style.out
355 $ hg log -r 'wdir()' --style default | sed 's|^date:.*|date:|' > style.out
356 $ cmp log.out style.out || diff -u log.out style.out
356 $ cmp log.out style.out || diff -u log.out style.out
357
357
358 $ hg log -r 'wdir()' -v | sed 's|^date:.*|date:|' > log.out
358 $ hg log -r 'wdir()' -v | sed 's|^date:.*|date:|' > log.out
359 $ hg log -r 'wdir()' -v --style default | sed 's|^date:.*|date:|' > style.out
359 $ hg log -r 'wdir()' -v --style default | sed 's|^date:.*|date:|' > style.out
360 $ cmp log.out style.out || diff -u log.out style.out
360 $ cmp log.out style.out || diff -u log.out style.out
361
361
362 $ hg log -r 'wdir()' -q > log.out
362 $ hg log -r 'wdir()' -q > log.out
363 $ hg log -r 'wdir()' -q --style default > style.out
363 $ hg log -r 'wdir()' -q --style default > style.out
364 $ cmp log.out style.out || diff -u log.out style.out
364 $ cmp log.out style.out || diff -u log.out style.out
365
365
366 $ hg log -r 'wdir()' --debug | sed 's|^date:.*|date:|' > log.out
366 $ hg log -r 'wdir()' --debug | sed 's|^date:.*|date:|' > log.out
367 $ hg log -r 'wdir()' --debug --style default \
367 $ hg log -r 'wdir()' --debug --style default \
368 > | sed 's|^date:.*|date:|' > style.out
368 > | sed 's|^date:.*|date:|' > style.out
369 $ cmp log.out style.out || diff -u log.out style.out
369 $ cmp log.out style.out || diff -u log.out style.out
370
370
371 Default style should also preserve color information (issue2866):
371 Default style should also preserve color information (issue2866):
372
372
373 $ cp $HGRCPATH $HGRCPATH-bak
373 $ cp $HGRCPATH $HGRCPATH-bak
374 $ cat <<EOF >> $HGRCPATH
374 $ cat <<EOF >> $HGRCPATH
375 > [extensions]
375 > [extensions]
376 > color=
376 > color=
377 > EOF
377 > EOF
378
378
379 $ hg --color=debug log > log.out
379 $ hg --color=debug log > log.out
380 $ hg --color=debug log --style default > style.out
380 $ hg --color=debug log --style default > style.out
381 $ cmp log.out style.out || diff -u log.out style.out
381 $ cmp log.out style.out || diff -u log.out style.out
382 $ hg --color=debug log -T phases > phases.out
382 $ hg --color=debug log -T phases > phases.out
383 $ diff -U 0 log.out phases.out | egrep -v '^---|^\+\+\+|^@@'
383 $ diff -U 0 log.out phases.out | egrep -v '^---|^\+\+\+|^@@'
384 +[log.phase|phase: draft]
384 +[log.phase|phase: draft]
385 +[log.phase|phase: draft]
385 +[log.phase|phase: draft]
386 +[log.phase|phase: draft]
386 +[log.phase|phase: draft]
387 +[log.phase|phase: draft]
387 +[log.phase|phase: draft]
388 +[log.phase|phase: draft]
388 +[log.phase|phase: draft]
389 +[log.phase|phase: draft]
389 +[log.phase|phase: draft]
390 +[log.phase|phase: draft]
390 +[log.phase|phase: draft]
391 +[log.phase|phase: draft]
391 +[log.phase|phase: draft]
392 +[log.phase|phase: draft]
392 +[log.phase|phase: draft]
393 +[log.phase|phase: draft]
393 +[log.phase|phase: draft]
394
394
395 $ hg --color=debug -v log > log.out
395 $ hg --color=debug -v log > log.out
396 $ hg --color=debug -v log --style default > style.out
396 $ hg --color=debug -v log --style default > style.out
397 $ cmp log.out style.out || diff -u log.out style.out
397 $ cmp log.out style.out || diff -u log.out style.out
398 $ hg --color=debug -v log -T phases > phases.out
398 $ hg --color=debug -v log -T phases > phases.out
399 $ diff -U 0 log.out phases.out | egrep -v '^---|^\+\+\+|^@@'
399 $ diff -U 0 log.out phases.out | egrep -v '^---|^\+\+\+|^@@'
400 +[log.phase|phase: draft]
400 +[log.phase|phase: draft]
401 +[log.phase|phase: draft]
401 +[log.phase|phase: draft]
402 +[log.phase|phase: draft]
402 +[log.phase|phase: draft]
403 +[log.phase|phase: draft]
403 +[log.phase|phase: draft]
404 +[log.phase|phase: draft]
404 +[log.phase|phase: draft]
405 +[log.phase|phase: draft]
405 +[log.phase|phase: draft]
406 +[log.phase|phase: draft]
406 +[log.phase|phase: draft]
407 +[log.phase|phase: draft]
407 +[log.phase|phase: draft]
408 +[log.phase|phase: draft]
408 +[log.phase|phase: draft]
409 +[log.phase|phase: draft]
409 +[log.phase|phase: draft]
410
410
411 $ hg --color=debug -q log > log.out
411 $ hg --color=debug -q log > log.out
412 $ hg --color=debug -q log --style default > style.out
412 $ hg --color=debug -q log --style default > style.out
413 $ cmp log.out style.out || diff -u log.out style.out
413 $ cmp log.out style.out || diff -u log.out style.out
414 $ hg --color=debug -q log -T phases > phases.out
414 $ hg --color=debug -q log -T phases > phases.out
415 $ cmp log.out phases.out || diff -u log.out phases.out
415 $ cmp log.out phases.out || diff -u log.out phases.out
416
416
417 $ hg --color=debug --debug log > log.out
417 $ hg --color=debug --debug log > log.out
418 $ hg --color=debug --debug log --style default > style.out
418 $ hg --color=debug --debug log --style default > style.out
419 $ cmp log.out style.out || diff -u log.out style.out
419 $ cmp log.out style.out || diff -u log.out style.out
420 $ hg --color=debug --debug log -T phases > phases.out
420 $ hg --color=debug --debug log -T phases > phases.out
421 $ cmp log.out phases.out || diff -u log.out phases.out
421 $ cmp log.out phases.out || diff -u log.out phases.out
422
422
423 $ mv $HGRCPATH-bak $HGRCPATH
423 $ mv $HGRCPATH-bak $HGRCPATH
424
424
425 Remove commit with empty commit message, so as to not pollute further
425 Remove commit with empty commit message, so as to not pollute further
426 tests.
426 tests.
427
427
428 $ hg --config extensions.strip= strip -q .
428 $ hg --config extensions.strip= strip -q .
429
429
430 Revision with no copies (used to print a traceback):
430 Revision with no copies (used to print a traceback):
431
431
432 $ hg tip -v --template '\n'
432 $ hg tip -v --template '\n'
433
433
434
434
435 Compact style works:
435 Compact style works:
436
436
437 $ hg log -Tcompact
437 $ hg log -Tcompact
438 8[tip] 95c24699272e 2020-01-01 10:01 +0000 test
438 8[tip] 95c24699272e 2020-01-01 10:01 +0000 test
439 third
439 third
440
440
441 7:-1 29114dbae42b 1970-01-12 13:46 +0000 user
441 7:-1 29114dbae42b 1970-01-12 13:46 +0000 user
442 second
442 second
443
443
444 6:5,4 d41e714fe50d 1970-01-18 08:40 +0000 person
444 6:5,4 d41e714fe50d 1970-01-18 08:40 +0000 person
445 merge
445 merge
446
446
447 5:3 13207e5a10d9 1970-01-18 08:40 +0000 person
447 5:3 13207e5a10d9 1970-01-18 08:40 +0000 person
448 new head
448 new head
449
449
450 4 bbe44766e73d 1970-01-17 04:53 +0000 person
450 4 bbe44766e73d 1970-01-17 04:53 +0000 person
451 new branch
451 new branch
452
452
453 3 10e46f2dcbf4 1970-01-16 01:06 +0000 person
453 3 10e46f2dcbf4 1970-01-16 01:06 +0000 person
454 no user, no domain
454 no user, no domain
455
455
456 2 97054abb4ab8 1970-01-14 21:20 +0000 other
456 2 97054abb4ab8 1970-01-14 21:20 +0000 other
457 no person
457 no person
458
458
459 1 b608e9d1a3f0 1970-01-13 17:33 +0000 other
459 1 b608e9d1a3f0 1970-01-13 17:33 +0000 other
460 other 1
460 other 1
461
461
462 0 1e4e1b8f71e0 1970-01-12 13:46 +0000 user
462 0 1e4e1b8f71e0 1970-01-12 13:46 +0000 user
463 line 1
463 line 1
464
464
465
465
466 $ hg log -v --style compact
466 $ hg log -v --style compact
467 8[tip] 95c24699272e 2020-01-01 10:01 +0000 test
467 8[tip] 95c24699272e 2020-01-01 10:01 +0000 test
468 third
468 third
469
469
470 7:-1 29114dbae42b 1970-01-12 13:46 +0000 User Name <user@hostname>
470 7:-1 29114dbae42b 1970-01-12 13:46 +0000 User Name <user@hostname>
471 second
471 second
472
472
473 6:5,4 d41e714fe50d 1970-01-18 08:40 +0000 person
473 6:5,4 d41e714fe50d 1970-01-18 08:40 +0000 person
474 merge
474 merge
475
475
476 5:3 13207e5a10d9 1970-01-18 08:40 +0000 person
476 5:3 13207e5a10d9 1970-01-18 08:40 +0000 person
477 new head
477 new head
478
478
479 4 bbe44766e73d 1970-01-17 04:53 +0000 person
479 4 bbe44766e73d 1970-01-17 04:53 +0000 person
480 new branch
480 new branch
481
481
482 3 10e46f2dcbf4 1970-01-16 01:06 +0000 person
482 3 10e46f2dcbf4 1970-01-16 01:06 +0000 person
483 no user, no domain
483 no user, no domain
484
484
485 2 97054abb4ab8 1970-01-14 21:20 +0000 other@place
485 2 97054abb4ab8 1970-01-14 21:20 +0000 other@place
486 no person
486 no person
487
487
488 1 b608e9d1a3f0 1970-01-13 17:33 +0000 A. N. Other <other@place>
488 1 b608e9d1a3f0 1970-01-13 17:33 +0000 A. N. Other <other@place>
489 other 1
489 other 1
490 other 2
490 other 2
491
491
492 other 3
492 other 3
493
493
494 0 1e4e1b8f71e0 1970-01-12 13:46 +0000 User Name <user@hostname>
494 0 1e4e1b8f71e0 1970-01-12 13:46 +0000 User Name <user@hostname>
495 line 1
495 line 1
496 line 2
496 line 2
497
497
498
498
499 $ hg log --debug --style compact
499 $ hg log --debug --style compact
500 8[tip]:7,-1 95c24699272e 2020-01-01 10:01 +0000 test
500 8[tip]:7,-1 95c24699272e 2020-01-01 10:01 +0000 test
501 third
501 third
502
502
503 7:-1,-1 29114dbae42b 1970-01-12 13:46 +0000 User Name <user@hostname>
503 7:-1,-1 29114dbae42b 1970-01-12 13:46 +0000 User Name <user@hostname>
504 second
504 second
505
505
506 6:5,4 d41e714fe50d 1970-01-18 08:40 +0000 person
506 6:5,4 d41e714fe50d 1970-01-18 08:40 +0000 person
507 merge
507 merge
508
508
509 5:3,-1 13207e5a10d9 1970-01-18 08:40 +0000 person
509 5:3,-1 13207e5a10d9 1970-01-18 08:40 +0000 person
510 new head
510 new head
511
511
512 4:3,-1 bbe44766e73d 1970-01-17 04:53 +0000 person
512 4:3,-1 bbe44766e73d 1970-01-17 04:53 +0000 person
513 new branch
513 new branch
514
514
515 3:2,-1 10e46f2dcbf4 1970-01-16 01:06 +0000 person
515 3:2,-1 10e46f2dcbf4 1970-01-16 01:06 +0000 person
516 no user, no domain
516 no user, no domain
517
517
518 2:1,-1 97054abb4ab8 1970-01-14 21:20 +0000 other@place
518 2:1,-1 97054abb4ab8 1970-01-14 21:20 +0000 other@place
519 no person
519 no person
520
520
521 1:0,-1 b608e9d1a3f0 1970-01-13 17:33 +0000 A. N. Other <other@place>
521 1:0,-1 b608e9d1a3f0 1970-01-13 17:33 +0000 A. N. Other <other@place>
522 other 1
522 other 1
523 other 2
523 other 2
524
524
525 other 3
525 other 3
526
526
527 0:-1,-1 1e4e1b8f71e0 1970-01-12 13:46 +0000 User Name <user@hostname>
527 0:-1,-1 1e4e1b8f71e0 1970-01-12 13:46 +0000 User Name <user@hostname>
528 line 1
528 line 1
529 line 2
529 line 2
530
530
531
531
532 Test xml styles:
532 Test xml styles:
533
533
534 $ hg log --style xml -r 'not all()'
534 $ hg log --style xml -r 'not all()'
535 <?xml version="1.0"?>
535 <?xml version="1.0"?>
536 <log>
536 <log>
537 </log>
537 </log>
538
538
539 $ hg log --style xml
539 $ hg log --style xml
540 <?xml version="1.0"?>
540 <?xml version="1.0"?>
541 <log>
541 <log>
542 <logentry revision="8" node="95c24699272ef57d062b8bccc32c878bf841784a">
542 <logentry revision="8" node="95c24699272ef57d062b8bccc32c878bf841784a">
543 <tag>tip</tag>
543 <tag>tip</tag>
544 <author email="test">test</author>
544 <author email="test">test</author>
545 <date>2020-01-01T10:01:00+00:00</date>
545 <date>2020-01-01T10:01:00+00:00</date>
546 <msg xml:space="preserve">third</msg>
546 <msg xml:space="preserve">third</msg>
547 </logentry>
547 </logentry>
548 <logentry revision="7" node="29114dbae42b9f078cf2714dbe3a86bba8ec7453">
548 <logentry revision="7" node="29114dbae42b9f078cf2714dbe3a86bba8ec7453">
549 <parent revision="-1" node="0000000000000000000000000000000000000000" />
549 <parent revision="-1" node="0000000000000000000000000000000000000000" />
550 <author email="user@hostname">User Name</author>
550 <author email="user@hostname">User Name</author>
551 <date>1970-01-12T13:46:40+00:00</date>
551 <date>1970-01-12T13:46:40+00:00</date>
552 <msg xml:space="preserve">second</msg>
552 <msg xml:space="preserve">second</msg>
553 </logentry>
553 </logentry>
554 <logentry revision="6" node="d41e714fe50d9e4a5f11b4d595d543481b5f980b">
554 <logentry revision="6" node="d41e714fe50d9e4a5f11b4d595d543481b5f980b">
555 <parent revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f" />
555 <parent revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f" />
556 <parent revision="4" node="bbe44766e73d5f11ed2177f1838de10c53ef3e74" />
556 <parent revision="4" node="bbe44766e73d5f11ed2177f1838de10c53ef3e74" />
557 <author email="person">person</author>
557 <author email="person">person</author>
558 <date>1970-01-18T08:40:01+00:00</date>
558 <date>1970-01-18T08:40:01+00:00</date>
559 <msg xml:space="preserve">merge</msg>
559 <msg xml:space="preserve">merge</msg>
560 </logentry>
560 </logentry>
561 <logentry revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f">
561 <logentry revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f">
562 <parent revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47" />
562 <parent revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47" />
563 <author email="person">person</author>
563 <author email="person">person</author>
564 <date>1970-01-18T08:40:00+00:00</date>
564 <date>1970-01-18T08:40:00+00:00</date>
565 <msg xml:space="preserve">new head</msg>
565 <msg xml:space="preserve">new head</msg>
566 </logentry>
566 </logentry>
567 <logentry revision="4" node="bbe44766e73d5f11ed2177f1838de10c53ef3e74">
567 <logentry revision="4" node="bbe44766e73d5f11ed2177f1838de10c53ef3e74">
568 <branch>foo</branch>
568 <branch>foo</branch>
569 <author email="person">person</author>
569 <author email="person">person</author>
570 <date>1970-01-17T04:53:20+00:00</date>
570 <date>1970-01-17T04:53:20+00:00</date>
571 <msg xml:space="preserve">new branch</msg>
571 <msg xml:space="preserve">new branch</msg>
572 </logentry>
572 </logentry>
573 <logentry revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47">
573 <logentry revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47">
574 <author email="person">person</author>
574 <author email="person">person</author>
575 <date>1970-01-16T01:06:40+00:00</date>
575 <date>1970-01-16T01:06:40+00:00</date>
576 <msg xml:space="preserve">no user, no domain</msg>
576 <msg xml:space="preserve">no user, no domain</msg>
577 </logentry>
577 </logentry>
578 <logentry revision="2" node="97054abb4ab824450e9164180baf491ae0078465">
578 <logentry revision="2" node="97054abb4ab824450e9164180baf491ae0078465">
579 <author email="other@place">other</author>
579 <author email="other@place">other</author>
580 <date>1970-01-14T21:20:00+00:00</date>
580 <date>1970-01-14T21:20:00+00:00</date>
581 <msg xml:space="preserve">no person</msg>
581 <msg xml:space="preserve">no person</msg>
582 </logentry>
582 </logentry>
583 <logentry revision="1" node="b608e9d1a3f0273ccf70fb85fd6866b3482bf965">
583 <logentry revision="1" node="b608e9d1a3f0273ccf70fb85fd6866b3482bf965">
584 <author email="other@place">A. N. Other</author>
584 <author email="other@place">A. N. Other</author>
585 <date>1970-01-13T17:33:20+00:00</date>
585 <date>1970-01-13T17:33:20+00:00</date>
586 <msg xml:space="preserve">other 1
586 <msg xml:space="preserve">other 1
587 other 2
587 other 2
588
588
589 other 3</msg>
589 other 3</msg>
590 </logentry>
590 </logentry>
591 <logentry revision="0" node="1e4e1b8f71e05681d422154f5421e385fec3454f">
591 <logentry revision="0" node="1e4e1b8f71e05681d422154f5421e385fec3454f">
592 <author email="user@hostname">User Name</author>
592 <author email="user@hostname">User Name</author>
593 <date>1970-01-12T13:46:40+00:00</date>
593 <date>1970-01-12T13:46:40+00:00</date>
594 <msg xml:space="preserve">line 1
594 <msg xml:space="preserve">line 1
595 line 2</msg>
595 line 2</msg>
596 </logentry>
596 </logentry>
597 </log>
597 </log>
598
598
599 $ hg log -v --style xml
599 $ hg log -v --style xml
600 <?xml version="1.0"?>
600 <?xml version="1.0"?>
601 <log>
601 <log>
602 <logentry revision="8" node="95c24699272ef57d062b8bccc32c878bf841784a">
602 <logentry revision="8" node="95c24699272ef57d062b8bccc32c878bf841784a">
603 <tag>tip</tag>
603 <tag>tip</tag>
604 <author email="test">test</author>
604 <author email="test">test</author>
605 <date>2020-01-01T10:01:00+00:00</date>
605 <date>2020-01-01T10:01:00+00:00</date>
606 <msg xml:space="preserve">third</msg>
606 <msg xml:space="preserve">third</msg>
607 <paths>
607 <paths>
608 <path action="A">fourth</path>
608 <path action="A">fourth</path>
609 <path action="A">third</path>
609 <path action="A">third</path>
610 <path action="R">second</path>
610 <path action="R">second</path>
611 </paths>
611 </paths>
612 <copies>
612 <copies>
613 <copy source="second">fourth</copy>
613 <copy source="second">fourth</copy>
614 </copies>
614 </copies>
615 </logentry>
615 </logentry>
616 <logentry revision="7" node="29114dbae42b9f078cf2714dbe3a86bba8ec7453">
616 <logentry revision="7" node="29114dbae42b9f078cf2714dbe3a86bba8ec7453">
617 <parent revision="-1" node="0000000000000000000000000000000000000000" />
617 <parent revision="-1" node="0000000000000000000000000000000000000000" />
618 <author email="user@hostname">User Name</author>
618 <author email="user@hostname">User Name</author>
619 <date>1970-01-12T13:46:40+00:00</date>
619 <date>1970-01-12T13:46:40+00:00</date>
620 <msg xml:space="preserve">second</msg>
620 <msg xml:space="preserve">second</msg>
621 <paths>
621 <paths>
622 <path action="A">second</path>
622 <path action="A">second</path>
623 </paths>
623 </paths>
624 </logentry>
624 </logentry>
625 <logentry revision="6" node="d41e714fe50d9e4a5f11b4d595d543481b5f980b">
625 <logentry revision="6" node="d41e714fe50d9e4a5f11b4d595d543481b5f980b">
626 <parent revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f" />
626 <parent revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f" />
627 <parent revision="4" node="bbe44766e73d5f11ed2177f1838de10c53ef3e74" />
627 <parent revision="4" node="bbe44766e73d5f11ed2177f1838de10c53ef3e74" />
628 <author email="person">person</author>
628 <author email="person">person</author>
629 <date>1970-01-18T08:40:01+00:00</date>
629 <date>1970-01-18T08:40:01+00:00</date>
630 <msg xml:space="preserve">merge</msg>
630 <msg xml:space="preserve">merge</msg>
631 <paths>
631 <paths>
632 </paths>
632 </paths>
633 </logentry>
633 </logentry>
634 <logentry revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f">
634 <logentry revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f">
635 <parent revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47" />
635 <parent revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47" />
636 <author email="person">person</author>
636 <author email="person">person</author>
637 <date>1970-01-18T08:40:00+00:00</date>
637 <date>1970-01-18T08:40:00+00:00</date>
638 <msg xml:space="preserve">new head</msg>
638 <msg xml:space="preserve">new head</msg>
639 <paths>
639 <paths>
640 <path action="A">d</path>
640 <path action="A">d</path>
641 </paths>
641 </paths>
642 </logentry>
642 </logentry>
643 <logentry revision="4" node="bbe44766e73d5f11ed2177f1838de10c53ef3e74">
643 <logentry revision="4" node="bbe44766e73d5f11ed2177f1838de10c53ef3e74">
644 <branch>foo</branch>
644 <branch>foo</branch>
645 <author email="person">person</author>
645 <author email="person">person</author>
646 <date>1970-01-17T04:53:20+00:00</date>
646 <date>1970-01-17T04:53:20+00:00</date>
647 <msg xml:space="preserve">new branch</msg>
647 <msg xml:space="preserve">new branch</msg>
648 <paths>
648 <paths>
649 </paths>
649 </paths>
650 </logentry>
650 </logentry>
651 <logentry revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47">
651 <logentry revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47">
652 <author email="person">person</author>
652 <author email="person">person</author>
653 <date>1970-01-16T01:06:40+00:00</date>
653 <date>1970-01-16T01:06:40+00:00</date>
654 <msg xml:space="preserve">no user, no domain</msg>
654 <msg xml:space="preserve">no user, no domain</msg>
655 <paths>
655 <paths>
656 <path action="M">c</path>
656 <path action="M">c</path>
657 </paths>
657 </paths>
658 </logentry>
658 </logentry>
659 <logentry revision="2" node="97054abb4ab824450e9164180baf491ae0078465">
659 <logentry revision="2" node="97054abb4ab824450e9164180baf491ae0078465">
660 <author email="other@place">other</author>
660 <author email="other@place">other</author>
661 <date>1970-01-14T21:20:00+00:00</date>
661 <date>1970-01-14T21:20:00+00:00</date>
662 <msg xml:space="preserve">no person</msg>
662 <msg xml:space="preserve">no person</msg>
663 <paths>
663 <paths>
664 <path action="A">c</path>
664 <path action="A">c</path>
665 </paths>
665 </paths>
666 </logentry>
666 </logentry>
667 <logentry revision="1" node="b608e9d1a3f0273ccf70fb85fd6866b3482bf965">
667 <logentry revision="1" node="b608e9d1a3f0273ccf70fb85fd6866b3482bf965">
668 <author email="other@place">A. N. Other</author>
668 <author email="other@place">A. N. Other</author>
669 <date>1970-01-13T17:33:20+00:00</date>
669 <date>1970-01-13T17:33:20+00:00</date>
670 <msg xml:space="preserve">other 1
670 <msg xml:space="preserve">other 1
671 other 2
671 other 2
672
672
673 other 3</msg>
673 other 3</msg>
674 <paths>
674 <paths>
675 <path action="A">b</path>
675 <path action="A">b</path>
676 </paths>
676 </paths>
677 </logentry>
677 </logentry>
678 <logentry revision="0" node="1e4e1b8f71e05681d422154f5421e385fec3454f">
678 <logentry revision="0" node="1e4e1b8f71e05681d422154f5421e385fec3454f">
679 <author email="user@hostname">User Name</author>
679 <author email="user@hostname">User Name</author>
680 <date>1970-01-12T13:46:40+00:00</date>
680 <date>1970-01-12T13:46:40+00:00</date>
681 <msg xml:space="preserve">line 1
681 <msg xml:space="preserve">line 1
682 line 2</msg>
682 line 2</msg>
683 <paths>
683 <paths>
684 <path action="A">a</path>
684 <path action="A">a</path>
685 </paths>
685 </paths>
686 </logentry>
686 </logentry>
687 </log>
687 </log>
688
688
689 $ hg log --debug --style xml
689 $ hg log --debug --style xml
690 <?xml version="1.0"?>
690 <?xml version="1.0"?>
691 <log>
691 <log>
692 <logentry revision="8" node="95c24699272ef57d062b8bccc32c878bf841784a">
692 <logentry revision="8" node="95c24699272ef57d062b8bccc32c878bf841784a">
693 <tag>tip</tag>
693 <tag>tip</tag>
694 <parent revision="7" node="29114dbae42b9f078cf2714dbe3a86bba8ec7453" />
694 <parent revision="7" node="29114dbae42b9f078cf2714dbe3a86bba8ec7453" />
695 <parent revision="-1" node="0000000000000000000000000000000000000000" />
695 <parent revision="-1" node="0000000000000000000000000000000000000000" />
696 <author email="test">test</author>
696 <author email="test">test</author>
697 <date>2020-01-01T10:01:00+00:00</date>
697 <date>2020-01-01T10:01:00+00:00</date>
698 <msg xml:space="preserve">third</msg>
698 <msg xml:space="preserve">third</msg>
699 <paths>
699 <paths>
700 <path action="A">fourth</path>
700 <path action="A">fourth</path>
701 <path action="A">third</path>
701 <path action="A">third</path>
702 <path action="R">second</path>
702 <path action="R">second</path>
703 </paths>
703 </paths>
704 <copies>
704 <copies>
705 <copy source="second">fourth</copy>
705 <copy source="second">fourth</copy>
706 </copies>
706 </copies>
707 <extra key="branch">default</extra>
707 <extra key="branch">default</extra>
708 </logentry>
708 </logentry>
709 <logentry revision="7" node="29114dbae42b9f078cf2714dbe3a86bba8ec7453">
709 <logentry revision="7" node="29114dbae42b9f078cf2714dbe3a86bba8ec7453">
710 <parent revision="-1" node="0000000000000000000000000000000000000000" />
710 <parent revision="-1" node="0000000000000000000000000000000000000000" />
711 <parent revision="-1" node="0000000000000000000000000000000000000000" />
711 <parent revision="-1" node="0000000000000000000000000000000000000000" />
712 <author email="user@hostname">User Name</author>
712 <author email="user@hostname">User Name</author>
713 <date>1970-01-12T13:46:40+00:00</date>
713 <date>1970-01-12T13:46:40+00:00</date>
714 <msg xml:space="preserve">second</msg>
714 <msg xml:space="preserve">second</msg>
715 <paths>
715 <paths>
716 <path action="A">second</path>
716 <path action="A">second</path>
717 </paths>
717 </paths>
718 <extra key="branch">default</extra>
718 <extra key="branch">default</extra>
719 </logentry>
719 </logentry>
720 <logentry revision="6" node="d41e714fe50d9e4a5f11b4d595d543481b5f980b">
720 <logentry revision="6" node="d41e714fe50d9e4a5f11b4d595d543481b5f980b">
721 <parent revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f" />
721 <parent revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f" />
722 <parent revision="4" node="bbe44766e73d5f11ed2177f1838de10c53ef3e74" />
722 <parent revision="4" node="bbe44766e73d5f11ed2177f1838de10c53ef3e74" />
723 <author email="person">person</author>
723 <author email="person">person</author>
724 <date>1970-01-18T08:40:01+00:00</date>
724 <date>1970-01-18T08:40:01+00:00</date>
725 <msg xml:space="preserve">merge</msg>
725 <msg xml:space="preserve">merge</msg>
726 <paths>
726 <paths>
727 </paths>
727 </paths>
728 <extra key="branch">default</extra>
728 <extra key="branch">default</extra>
729 </logentry>
729 </logentry>
730 <logentry revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f">
730 <logentry revision="5" node="13207e5a10d9fd28ec424934298e176197f2c67f">
731 <parent revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47" />
731 <parent revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47" />
732 <parent revision="-1" node="0000000000000000000000000000000000000000" />
732 <parent revision="-1" node="0000000000000000000000000000000000000000" />
733 <author email="person">person</author>
733 <author email="person">person</author>
734 <date>1970-01-18T08:40:00+00:00</date>
734 <date>1970-01-18T08:40:00+00:00</date>
735 <msg xml:space="preserve">new head</msg>
735 <msg xml:space="preserve">new head</msg>
736 <paths>
736 <paths>
737 <path action="A">d</path>
737 <path action="A">d</path>
738 </paths>
738 </paths>
739 <extra key="branch">default</extra>
739 <extra key="branch">default</extra>
740 </logentry>
740 </logentry>
741 <logentry revision="4" node="bbe44766e73d5f11ed2177f1838de10c53ef3e74">
741 <logentry revision="4" node="bbe44766e73d5f11ed2177f1838de10c53ef3e74">
742 <branch>foo</branch>
742 <branch>foo</branch>
743 <parent revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47" />
743 <parent revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47" />
744 <parent revision="-1" node="0000000000000000000000000000000000000000" />
744 <parent revision="-1" node="0000000000000000000000000000000000000000" />
745 <author email="person">person</author>
745 <author email="person">person</author>
746 <date>1970-01-17T04:53:20+00:00</date>
746 <date>1970-01-17T04:53:20+00:00</date>
747 <msg xml:space="preserve">new branch</msg>
747 <msg xml:space="preserve">new branch</msg>
748 <paths>
748 <paths>
749 </paths>
749 </paths>
750 <extra key="branch">foo</extra>
750 <extra key="branch">foo</extra>
751 </logentry>
751 </logentry>
752 <logentry revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47">
752 <logentry revision="3" node="10e46f2dcbf4823578cf180f33ecf0b957964c47">
753 <parent revision="2" node="97054abb4ab824450e9164180baf491ae0078465" />
753 <parent revision="2" node="97054abb4ab824450e9164180baf491ae0078465" />
754 <parent revision="-1" node="0000000000000000000000000000000000000000" />
754 <parent revision="-1" node="0000000000000000000000000000000000000000" />
755 <author email="person">person</author>
755 <author email="person">person</author>
756 <date>1970-01-16T01:06:40+00:00</date>
756 <date>1970-01-16T01:06:40+00:00</date>
757 <msg xml:space="preserve">no user, no domain</msg>
757 <msg xml:space="preserve">no user, no domain</msg>
758 <paths>
758 <paths>
759 <path action="M">c</path>
759 <path action="M">c</path>
760 </paths>
760 </paths>
761 <extra key="branch">default</extra>
761 <extra key="branch">default</extra>
762 </logentry>
762 </logentry>
763 <logentry revision="2" node="97054abb4ab824450e9164180baf491ae0078465">
763 <logentry revision="2" node="97054abb4ab824450e9164180baf491ae0078465">
764 <parent revision="1" node="b608e9d1a3f0273ccf70fb85fd6866b3482bf965" />
764 <parent revision="1" node="b608e9d1a3f0273ccf70fb85fd6866b3482bf965" />
765 <parent revision="-1" node="0000000000000000000000000000000000000000" />
765 <parent revision="-1" node="0000000000000000000000000000000000000000" />
766 <author email="other@place">other</author>
766 <author email="other@place">other</author>
767 <date>1970-01-14T21:20:00+00:00</date>
767 <date>1970-01-14T21:20:00+00:00</date>
768 <msg xml:space="preserve">no person</msg>
768 <msg xml:space="preserve">no person</msg>
769 <paths>
769 <paths>
770 <path action="A">c</path>
770 <path action="A">c</path>
771 </paths>
771 </paths>
772 <extra key="branch">default</extra>
772 <extra key="branch">default</extra>
773 </logentry>
773 </logentry>
774 <logentry revision="1" node="b608e9d1a3f0273ccf70fb85fd6866b3482bf965">
774 <logentry revision="1" node="b608e9d1a3f0273ccf70fb85fd6866b3482bf965">
775 <parent revision="0" node="1e4e1b8f71e05681d422154f5421e385fec3454f" />
775 <parent revision="0" node="1e4e1b8f71e05681d422154f5421e385fec3454f" />
776 <parent revision="-1" node="0000000000000000000000000000000000000000" />
776 <parent revision="-1" node="0000000000000000000000000000000000000000" />
777 <author email="other@place">A. N. Other</author>
777 <author email="other@place">A. N. Other</author>
778 <date>1970-01-13T17:33:20+00:00</date>
778 <date>1970-01-13T17:33:20+00:00</date>
779 <msg xml:space="preserve">other 1
779 <msg xml:space="preserve">other 1
780 other 2
780 other 2
781
781
782 other 3</msg>
782 other 3</msg>
783 <paths>
783 <paths>
784 <path action="A">b</path>
784 <path action="A">b</path>
785 </paths>
785 </paths>
786 <extra key="branch">default</extra>
786 <extra key="branch">default</extra>
787 </logentry>
787 </logentry>
788 <logentry revision="0" node="1e4e1b8f71e05681d422154f5421e385fec3454f">
788 <logentry revision="0" node="1e4e1b8f71e05681d422154f5421e385fec3454f">
789 <parent revision="-1" node="0000000000000000000000000000000000000000" />
789 <parent revision="-1" node="0000000000000000000000000000000000000000" />
790 <parent revision="-1" node="0000000000000000000000000000000000000000" />
790 <parent revision="-1" node="0000000000000000000000000000000000000000" />
791 <author email="user@hostname">User Name</author>
791 <author email="user@hostname">User Name</author>
792 <date>1970-01-12T13:46:40+00:00</date>
792 <date>1970-01-12T13:46:40+00:00</date>
793 <msg xml:space="preserve">line 1
793 <msg xml:space="preserve">line 1
794 line 2</msg>
794 line 2</msg>
795 <paths>
795 <paths>
796 <path action="A">a</path>
796 <path action="A">a</path>
797 </paths>
797 </paths>
798 <extra key="branch">default</extra>
798 <extra key="branch">default</extra>
799 </logentry>
799 </logentry>
800 </log>
800 </log>
801
801
802
802
803 Test JSON style:
803 Test JSON style:
804
804
805 $ hg log -k nosuch -Tjson
805 $ hg log -k nosuch -Tjson
806 []
806 []
807
807
808 $ hg log -qr . -Tjson
808 $ hg log -qr . -Tjson
809 [
809 [
810 {
810 {
811 "rev": 8,
811 "rev": 8,
812 "node": "95c24699272ef57d062b8bccc32c878bf841784a"
812 "node": "95c24699272ef57d062b8bccc32c878bf841784a"
813 }
813 }
814 ]
814 ]
815
815
816 $ hg log -vpr . -Tjson --stat
816 $ hg log -vpr . -Tjson --stat
817 [
817 [
818 {
818 {
819 "rev": 8,
819 "rev": 8,
820 "node": "95c24699272ef57d062b8bccc32c878bf841784a",
820 "node": "95c24699272ef57d062b8bccc32c878bf841784a",
821 "branch": "default",
821 "branch": "default",
822 "phase": "draft",
822 "phase": "draft",
823 "user": "test",
823 "user": "test",
824 "date": [1577872860, 0],
824 "date": [1577872860, 0],
825 "desc": "third",
825 "desc": "third",
826 "bookmarks": [],
826 "bookmarks": [],
827 "tags": ["tip"],
827 "tags": ["tip"],
828 "parents": ["29114dbae42b9f078cf2714dbe3a86bba8ec7453"],
828 "parents": ["29114dbae42b9f078cf2714dbe3a86bba8ec7453"],
829 "files": ["fourth", "second", "third"],
829 "files": ["fourth", "second", "third"],
830 "diffstat": " fourth | 1 +\n second | 1 -\n third | 1 +\n 3 files changed, 2 insertions(+), 1 deletions(-)\n",
830 "diffstat": " fourth | 1 +\n second | 1 -\n third | 1 +\n 3 files changed, 2 insertions(+), 1 deletions(-)\n",
831 "diff": "diff -r 29114dbae42b -r 95c24699272e fourth\n--- /dev/null\tThu Jan 01 00:00:00 1970 +0000\n+++ b/fourth\tWed Jan 01 10:01:00 2020 +0000\n@@ -0,0 +1,1 @@\n+second\ndiff -r 29114dbae42b -r 95c24699272e second\n--- a/second\tMon Jan 12 13:46:40 1970 +0000\n+++ /dev/null\tThu Jan 01 00:00:00 1970 +0000\n@@ -1,1 +0,0 @@\n-second\ndiff -r 29114dbae42b -r 95c24699272e third\n--- /dev/null\tThu Jan 01 00:00:00 1970 +0000\n+++ b/third\tWed Jan 01 10:01:00 2020 +0000\n@@ -0,0 +1,1 @@\n+third\n"
831 "diff": "diff -r 29114dbae42b -r 95c24699272e fourth\n--- /dev/null\tThu Jan 01 00:00:00 1970 +0000\n+++ b/fourth\tWed Jan 01 10:01:00 2020 +0000\n@@ -0,0 +1,1 @@\n+second\ndiff -r 29114dbae42b -r 95c24699272e second\n--- a/second\tMon Jan 12 13:46:40 1970 +0000\n+++ /dev/null\tThu Jan 01 00:00:00 1970 +0000\n@@ -1,1 +0,0 @@\n-second\ndiff -r 29114dbae42b -r 95c24699272e third\n--- /dev/null\tThu Jan 01 00:00:00 1970 +0000\n+++ b/third\tWed Jan 01 10:01:00 2020 +0000\n@@ -0,0 +1,1 @@\n+third\n"
832 }
832 }
833 ]
833 ]
834
834
835 honor --git but not format-breaking diffopts
835 honor --git but not format-breaking diffopts
836 $ hg --config diff.noprefix=True log --git -vpr . -Tjson
836 $ hg --config diff.noprefix=True log --git -vpr . -Tjson
837 [
837 [
838 {
838 {
839 "rev": 8,
839 "rev": 8,
840 "node": "95c24699272ef57d062b8bccc32c878bf841784a",
840 "node": "95c24699272ef57d062b8bccc32c878bf841784a",
841 "branch": "default",
841 "branch": "default",
842 "phase": "draft",
842 "phase": "draft",
843 "user": "test",
843 "user": "test",
844 "date": [1577872860, 0],
844 "date": [1577872860, 0],
845 "desc": "third",
845 "desc": "third",
846 "bookmarks": [],
846 "bookmarks": [],
847 "tags": ["tip"],
847 "tags": ["tip"],
848 "parents": ["29114dbae42b9f078cf2714dbe3a86bba8ec7453"],
848 "parents": ["29114dbae42b9f078cf2714dbe3a86bba8ec7453"],
849 "files": ["fourth", "second", "third"],
849 "files": ["fourth", "second", "third"],
850 "diff": "diff --git a/second b/fourth\nrename from second\nrename to fourth\ndiff --git a/third b/third\nnew file mode 100644\n--- /dev/null\n+++ b/third\n@@ -0,0 +1,1 @@\n+third\n"
850 "diff": "diff --git a/second b/fourth\nrename from second\nrename to fourth\ndiff --git a/third b/third\nnew file mode 100644\n--- /dev/null\n+++ b/third\n@@ -0,0 +1,1 @@\n+third\n"
851 }
851 }
852 ]
852 ]
853
853
854 $ hg log -T json
854 $ hg log -T json
855 [
855 [
856 {
856 {
857 "rev": 8,
857 "rev": 8,
858 "node": "95c24699272ef57d062b8bccc32c878bf841784a",
858 "node": "95c24699272ef57d062b8bccc32c878bf841784a",
859 "branch": "default",
859 "branch": "default",
860 "phase": "draft",
860 "phase": "draft",
861 "user": "test",
861 "user": "test",
862 "date": [1577872860, 0],
862 "date": [1577872860, 0],
863 "desc": "third",
863 "desc": "third",
864 "bookmarks": [],
864 "bookmarks": [],
865 "tags": ["tip"],
865 "tags": ["tip"],
866 "parents": ["29114dbae42b9f078cf2714dbe3a86bba8ec7453"]
866 "parents": ["29114dbae42b9f078cf2714dbe3a86bba8ec7453"]
867 },
867 },
868 {
868 {
869 "rev": 7,
869 "rev": 7,
870 "node": "29114dbae42b9f078cf2714dbe3a86bba8ec7453",
870 "node": "29114dbae42b9f078cf2714dbe3a86bba8ec7453",
871 "branch": "default",
871 "branch": "default",
872 "phase": "draft",
872 "phase": "draft",
873 "user": "User Name <user@hostname>",
873 "user": "User Name <user@hostname>",
874 "date": [1000000, 0],
874 "date": [1000000, 0],
875 "desc": "second",
875 "desc": "second",
876 "bookmarks": [],
876 "bookmarks": [],
877 "tags": [],
877 "tags": [],
878 "parents": ["0000000000000000000000000000000000000000"]
878 "parents": ["0000000000000000000000000000000000000000"]
879 },
879 },
880 {
880 {
881 "rev": 6,
881 "rev": 6,
882 "node": "d41e714fe50d9e4a5f11b4d595d543481b5f980b",
882 "node": "d41e714fe50d9e4a5f11b4d595d543481b5f980b",
883 "branch": "default",
883 "branch": "default",
884 "phase": "draft",
884 "phase": "draft",
885 "user": "person",
885 "user": "person",
886 "date": [1500001, 0],
886 "date": [1500001, 0],
887 "desc": "merge",
887 "desc": "merge",
888 "bookmarks": [],
888 "bookmarks": [],
889 "tags": [],
889 "tags": [],
890 "parents": ["13207e5a10d9fd28ec424934298e176197f2c67f", "bbe44766e73d5f11ed2177f1838de10c53ef3e74"]
890 "parents": ["13207e5a10d9fd28ec424934298e176197f2c67f", "bbe44766e73d5f11ed2177f1838de10c53ef3e74"]
891 },
891 },
892 {
892 {
893 "rev": 5,
893 "rev": 5,
894 "node": "13207e5a10d9fd28ec424934298e176197f2c67f",
894 "node": "13207e5a10d9fd28ec424934298e176197f2c67f",
895 "branch": "default",
895 "branch": "default",
896 "phase": "draft",
896 "phase": "draft",
897 "user": "person",
897 "user": "person",
898 "date": [1500000, 0],
898 "date": [1500000, 0],
899 "desc": "new head",
899 "desc": "new head",
900 "bookmarks": [],
900 "bookmarks": [],
901 "tags": [],
901 "tags": [],
902 "parents": ["10e46f2dcbf4823578cf180f33ecf0b957964c47"]
902 "parents": ["10e46f2dcbf4823578cf180f33ecf0b957964c47"]
903 },
903 },
904 {
904 {
905 "rev": 4,
905 "rev": 4,
906 "node": "bbe44766e73d5f11ed2177f1838de10c53ef3e74",
906 "node": "bbe44766e73d5f11ed2177f1838de10c53ef3e74",
907 "branch": "foo",
907 "branch": "foo",
908 "phase": "draft",
908 "phase": "draft",
909 "user": "person",
909 "user": "person",
910 "date": [1400000, 0],
910 "date": [1400000, 0],
911 "desc": "new branch",
911 "desc": "new branch",
912 "bookmarks": [],
912 "bookmarks": [],
913 "tags": [],
913 "tags": [],
914 "parents": ["10e46f2dcbf4823578cf180f33ecf0b957964c47"]
914 "parents": ["10e46f2dcbf4823578cf180f33ecf0b957964c47"]
915 },
915 },
916 {
916 {
917 "rev": 3,
917 "rev": 3,
918 "node": "10e46f2dcbf4823578cf180f33ecf0b957964c47",
918 "node": "10e46f2dcbf4823578cf180f33ecf0b957964c47",
919 "branch": "default",
919 "branch": "default",
920 "phase": "draft",
920 "phase": "draft",
921 "user": "person",
921 "user": "person",
922 "date": [1300000, 0],
922 "date": [1300000, 0],
923 "desc": "no user, no domain",
923 "desc": "no user, no domain",
924 "bookmarks": [],
924 "bookmarks": [],
925 "tags": [],
925 "tags": [],
926 "parents": ["97054abb4ab824450e9164180baf491ae0078465"]
926 "parents": ["97054abb4ab824450e9164180baf491ae0078465"]
927 },
927 },
928 {
928 {
929 "rev": 2,
929 "rev": 2,
930 "node": "97054abb4ab824450e9164180baf491ae0078465",
930 "node": "97054abb4ab824450e9164180baf491ae0078465",
931 "branch": "default",
931 "branch": "default",
932 "phase": "draft",
932 "phase": "draft",
933 "user": "other@place",
933 "user": "other@place",
934 "date": [1200000, 0],
934 "date": [1200000, 0],
935 "desc": "no person",
935 "desc": "no person",
936 "bookmarks": [],
936 "bookmarks": [],
937 "tags": [],
937 "tags": [],
938 "parents": ["b608e9d1a3f0273ccf70fb85fd6866b3482bf965"]
938 "parents": ["b608e9d1a3f0273ccf70fb85fd6866b3482bf965"]
939 },
939 },
940 {
940 {
941 "rev": 1,
941 "rev": 1,
942 "node": "b608e9d1a3f0273ccf70fb85fd6866b3482bf965",
942 "node": "b608e9d1a3f0273ccf70fb85fd6866b3482bf965",
943 "branch": "default",
943 "branch": "default",
944 "phase": "draft",
944 "phase": "draft",
945 "user": "A. N. Other <other@place>",
945 "user": "A. N. Other <other@place>",
946 "date": [1100000, 0],
946 "date": [1100000, 0],
947 "desc": "other 1\nother 2\n\nother 3",
947 "desc": "other 1\nother 2\n\nother 3",
948 "bookmarks": [],
948 "bookmarks": [],
949 "tags": [],
949 "tags": [],
950 "parents": ["1e4e1b8f71e05681d422154f5421e385fec3454f"]
950 "parents": ["1e4e1b8f71e05681d422154f5421e385fec3454f"]
951 },
951 },
952 {
952 {
953 "rev": 0,
953 "rev": 0,
954 "node": "1e4e1b8f71e05681d422154f5421e385fec3454f",
954 "node": "1e4e1b8f71e05681d422154f5421e385fec3454f",
955 "branch": "default",
955 "branch": "default",
956 "phase": "draft",
956 "phase": "draft",
957 "user": "User Name <user@hostname>",
957 "user": "User Name <user@hostname>",
958 "date": [1000000, 0],
958 "date": [1000000, 0],
959 "desc": "line 1\nline 2",
959 "desc": "line 1\nline 2",
960 "bookmarks": [],
960 "bookmarks": [],
961 "tags": [],
961 "tags": [],
962 "parents": ["0000000000000000000000000000000000000000"]
962 "parents": ["0000000000000000000000000000000000000000"]
963 }
963 }
964 ]
964 ]
965
965
966 $ hg heads -v -Tjson
966 $ hg heads -v -Tjson
967 [
967 [
968 {
968 {
969 "rev": 8,
969 "rev": 8,
970 "node": "95c24699272ef57d062b8bccc32c878bf841784a",
970 "node": "95c24699272ef57d062b8bccc32c878bf841784a",
971 "branch": "default",
971 "branch": "default",
972 "phase": "draft",
972 "phase": "draft",
973 "user": "test",
973 "user": "test",
974 "date": [1577872860, 0],
974 "date": [1577872860, 0],
975 "desc": "third",
975 "desc": "third",
976 "bookmarks": [],
976 "bookmarks": [],
977 "tags": ["tip"],
977 "tags": ["tip"],
978 "parents": ["29114dbae42b9f078cf2714dbe3a86bba8ec7453"],
978 "parents": ["29114dbae42b9f078cf2714dbe3a86bba8ec7453"],
979 "files": ["fourth", "second", "third"]
979 "files": ["fourth", "second", "third"]
980 },
980 },
981 {
981 {
982 "rev": 6,
982 "rev": 6,
983 "node": "d41e714fe50d9e4a5f11b4d595d543481b5f980b",
983 "node": "d41e714fe50d9e4a5f11b4d595d543481b5f980b",
984 "branch": "default",
984 "branch": "default",
985 "phase": "draft",
985 "phase": "draft",
986 "user": "person",
986 "user": "person",
987 "date": [1500001, 0],
987 "date": [1500001, 0],
988 "desc": "merge",
988 "desc": "merge",
989 "bookmarks": [],
989 "bookmarks": [],
990 "tags": [],
990 "tags": [],
991 "parents": ["13207e5a10d9fd28ec424934298e176197f2c67f", "bbe44766e73d5f11ed2177f1838de10c53ef3e74"],
991 "parents": ["13207e5a10d9fd28ec424934298e176197f2c67f", "bbe44766e73d5f11ed2177f1838de10c53ef3e74"],
992 "files": []
992 "files": []
993 },
993 },
994 {
994 {
995 "rev": 4,
995 "rev": 4,
996 "node": "bbe44766e73d5f11ed2177f1838de10c53ef3e74",
996 "node": "bbe44766e73d5f11ed2177f1838de10c53ef3e74",
997 "branch": "foo",
997 "branch": "foo",
998 "phase": "draft",
998 "phase": "draft",
999 "user": "person",
999 "user": "person",
1000 "date": [1400000, 0],
1000 "date": [1400000, 0],
1001 "desc": "new branch",
1001 "desc": "new branch",
1002 "bookmarks": [],
1002 "bookmarks": [],
1003 "tags": [],
1003 "tags": [],
1004 "parents": ["10e46f2dcbf4823578cf180f33ecf0b957964c47"],
1004 "parents": ["10e46f2dcbf4823578cf180f33ecf0b957964c47"],
1005 "files": []
1005 "files": []
1006 }
1006 }
1007 ]
1007 ]
1008
1008
1009 $ hg log --debug -Tjson
1009 $ hg log --debug -Tjson
1010 [
1010 [
1011 {
1011 {
1012 "rev": 8,
1012 "rev": 8,
1013 "node": "95c24699272ef57d062b8bccc32c878bf841784a",
1013 "node": "95c24699272ef57d062b8bccc32c878bf841784a",
1014 "branch": "default",
1014 "branch": "default",
1015 "phase": "draft",
1015 "phase": "draft",
1016 "user": "test",
1016 "user": "test",
1017 "date": [1577872860, 0],
1017 "date": [1577872860, 0],
1018 "desc": "third",
1018 "desc": "third",
1019 "bookmarks": [],
1019 "bookmarks": [],
1020 "tags": ["tip"],
1020 "tags": ["tip"],
1021 "parents": ["29114dbae42b9f078cf2714dbe3a86bba8ec7453"],
1021 "parents": ["29114dbae42b9f078cf2714dbe3a86bba8ec7453"],
1022 "manifest": "94961b75a2da554b4df6fb599e5bfc7d48de0c64",
1022 "manifest": "94961b75a2da554b4df6fb599e5bfc7d48de0c64",
1023 "extra": {"branch": "default"},
1023 "extra": {"branch": "default"},
1024 "modified": [],
1024 "modified": [],
1025 "added": ["fourth", "third"],
1025 "added": ["fourth", "third"],
1026 "removed": ["second"]
1026 "removed": ["second"]
1027 },
1027 },
1028 {
1028 {
1029 "rev": 7,
1029 "rev": 7,
1030 "node": "29114dbae42b9f078cf2714dbe3a86bba8ec7453",
1030 "node": "29114dbae42b9f078cf2714dbe3a86bba8ec7453",
1031 "branch": "default",
1031 "branch": "default",
1032 "phase": "draft",
1032 "phase": "draft",
1033 "user": "User Name <user@hostname>",
1033 "user": "User Name <user@hostname>",
1034 "date": [1000000, 0],
1034 "date": [1000000, 0],
1035 "desc": "second",
1035 "desc": "second",
1036 "bookmarks": [],
1036 "bookmarks": [],
1037 "tags": [],
1037 "tags": [],
1038 "parents": ["0000000000000000000000000000000000000000"],
1038 "parents": ["0000000000000000000000000000000000000000"],
1039 "manifest": "f2dbc354b94e5ec0b4f10680ee0cee816101d0bf",
1039 "manifest": "f2dbc354b94e5ec0b4f10680ee0cee816101d0bf",
1040 "extra": {"branch": "default"},
1040 "extra": {"branch": "default"},
1041 "modified": [],
1041 "modified": [],
1042 "added": ["second"],
1042 "added": ["second"],
1043 "removed": []
1043 "removed": []
1044 },
1044 },
1045 {
1045 {
1046 "rev": 6,
1046 "rev": 6,
1047 "node": "d41e714fe50d9e4a5f11b4d595d543481b5f980b",
1047 "node": "d41e714fe50d9e4a5f11b4d595d543481b5f980b",
1048 "branch": "default",
1048 "branch": "default",
1049 "phase": "draft",
1049 "phase": "draft",
1050 "user": "person",
1050 "user": "person",
1051 "date": [1500001, 0],
1051 "date": [1500001, 0],
1052 "desc": "merge",
1052 "desc": "merge",
1053 "bookmarks": [],
1053 "bookmarks": [],
1054 "tags": [],
1054 "tags": [],
1055 "parents": ["13207e5a10d9fd28ec424934298e176197f2c67f", "bbe44766e73d5f11ed2177f1838de10c53ef3e74"],
1055 "parents": ["13207e5a10d9fd28ec424934298e176197f2c67f", "bbe44766e73d5f11ed2177f1838de10c53ef3e74"],
1056 "manifest": "4dc3def4f9b4c6e8de820f6ee74737f91e96a216",
1056 "manifest": "4dc3def4f9b4c6e8de820f6ee74737f91e96a216",
1057 "extra": {"branch": "default"},
1057 "extra": {"branch": "default"},
1058 "modified": [],
1058 "modified": [],
1059 "added": [],
1059 "added": [],
1060 "removed": []
1060 "removed": []
1061 },
1061 },
1062 {
1062 {
1063 "rev": 5,
1063 "rev": 5,
1064 "node": "13207e5a10d9fd28ec424934298e176197f2c67f",
1064 "node": "13207e5a10d9fd28ec424934298e176197f2c67f",
1065 "branch": "default",
1065 "branch": "default",
1066 "phase": "draft",
1066 "phase": "draft",
1067 "user": "person",
1067 "user": "person",
1068 "date": [1500000, 0],
1068 "date": [1500000, 0],
1069 "desc": "new head",
1069 "desc": "new head",
1070 "bookmarks": [],
1070 "bookmarks": [],
1071 "tags": [],
1071 "tags": [],
1072 "parents": ["10e46f2dcbf4823578cf180f33ecf0b957964c47"],
1072 "parents": ["10e46f2dcbf4823578cf180f33ecf0b957964c47"],
1073 "manifest": "4dc3def4f9b4c6e8de820f6ee74737f91e96a216",
1073 "manifest": "4dc3def4f9b4c6e8de820f6ee74737f91e96a216",
1074 "extra": {"branch": "default"},
1074 "extra": {"branch": "default"},
1075 "modified": [],
1075 "modified": [],
1076 "added": ["d"],
1076 "added": ["d"],
1077 "removed": []
1077 "removed": []
1078 },
1078 },
1079 {
1079 {
1080 "rev": 4,
1080 "rev": 4,
1081 "node": "bbe44766e73d5f11ed2177f1838de10c53ef3e74",
1081 "node": "bbe44766e73d5f11ed2177f1838de10c53ef3e74",
1082 "branch": "foo",
1082 "branch": "foo",
1083 "phase": "draft",
1083 "phase": "draft",
1084 "user": "person",
1084 "user": "person",
1085 "date": [1400000, 0],
1085 "date": [1400000, 0],
1086 "desc": "new branch",
1086 "desc": "new branch",
1087 "bookmarks": [],
1087 "bookmarks": [],
1088 "tags": [],
1088 "tags": [],
1089 "parents": ["10e46f2dcbf4823578cf180f33ecf0b957964c47"],
1089 "parents": ["10e46f2dcbf4823578cf180f33ecf0b957964c47"],
1090 "manifest": "cb5a1327723bada42f117e4c55a303246eaf9ccc",
1090 "manifest": "cb5a1327723bada42f117e4c55a303246eaf9ccc",
1091 "extra": {"branch": "foo"},
1091 "extra": {"branch": "foo"},
1092 "modified": [],
1092 "modified": [],
1093 "added": [],
1093 "added": [],
1094 "removed": []
1094 "removed": []
1095 },
1095 },
1096 {
1096 {
1097 "rev": 3,
1097 "rev": 3,
1098 "node": "10e46f2dcbf4823578cf180f33ecf0b957964c47",
1098 "node": "10e46f2dcbf4823578cf180f33ecf0b957964c47",
1099 "branch": "default",
1099 "branch": "default",
1100 "phase": "draft",
1100 "phase": "draft",
1101 "user": "person",
1101 "user": "person",
1102 "date": [1300000, 0],
1102 "date": [1300000, 0],
1103 "desc": "no user, no domain",
1103 "desc": "no user, no domain",
1104 "bookmarks": [],
1104 "bookmarks": [],
1105 "tags": [],
1105 "tags": [],
1106 "parents": ["97054abb4ab824450e9164180baf491ae0078465"],
1106 "parents": ["97054abb4ab824450e9164180baf491ae0078465"],
1107 "manifest": "cb5a1327723bada42f117e4c55a303246eaf9ccc",
1107 "manifest": "cb5a1327723bada42f117e4c55a303246eaf9ccc",
1108 "extra": {"branch": "default"},
1108 "extra": {"branch": "default"},
1109 "modified": ["c"],
1109 "modified": ["c"],
1110 "added": [],
1110 "added": [],
1111 "removed": []
1111 "removed": []
1112 },
1112 },
1113 {
1113 {
1114 "rev": 2,
1114 "rev": 2,
1115 "node": "97054abb4ab824450e9164180baf491ae0078465",
1115 "node": "97054abb4ab824450e9164180baf491ae0078465",
1116 "branch": "default",
1116 "branch": "default",
1117 "phase": "draft",
1117 "phase": "draft",
1118 "user": "other@place",
1118 "user": "other@place",
1119 "date": [1200000, 0],
1119 "date": [1200000, 0],
1120 "desc": "no person",
1120 "desc": "no person",
1121 "bookmarks": [],
1121 "bookmarks": [],
1122 "tags": [],
1122 "tags": [],
1123 "parents": ["b608e9d1a3f0273ccf70fb85fd6866b3482bf965"],
1123 "parents": ["b608e9d1a3f0273ccf70fb85fd6866b3482bf965"],
1124 "manifest": "6e0e82995c35d0d57a52aca8da4e56139e06b4b1",
1124 "manifest": "6e0e82995c35d0d57a52aca8da4e56139e06b4b1",
1125 "extra": {"branch": "default"},
1125 "extra": {"branch": "default"},
1126 "modified": [],
1126 "modified": [],
1127 "added": ["c"],
1127 "added": ["c"],
1128 "removed": []
1128 "removed": []
1129 },
1129 },
1130 {
1130 {
1131 "rev": 1,
1131 "rev": 1,
1132 "node": "b608e9d1a3f0273ccf70fb85fd6866b3482bf965",
1132 "node": "b608e9d1a3f0273ccf70fb85fd6866b3482bf965",
1133 "branch": "default",
1133 "branch": "default",
1134 "phase": "draft",
1134 "phase": "draft",
1135 "user": "A. N. Other <other@place>",
1135 "user": "A. N. Other <other@place>",
1136 "date": [1100000, 0],
1136 "date": [1100000, 0],
1137 "desc": "other 1\nother 2\n\nother 3",
1137 "desc": "other 1\nother 2\n\nother 3",
1138 "bookmarks": [],
1138 "bookmarks": [],
1139 "tags": [],
1139 "tags": [],
1140 "parents": ["1e4e1b8f71e05681d422154f5421e385fec3454f"],
1140 "parents": ["1e4e1b8f71e05681d422154f5421e385fec3454f"],
1141 "manifest": "4e8d705b1e53e3f9375e0e60dc7b525d8211fe55",
1141 "manifest": "4e8d705b1e53e3f9375e0e60dc7b525d8211fe55",
1142 "extra": {"branch": "default"},
1142 "extra": {"branch": "default"},
1143 "modified": [],
1143 "modified": [],
1144 "added": ["b"],
1144 "added": ["b"],
1145 "removed": []
1145 "removed": []
1146 },
1146 },
1147 {
1147 {
1148 "rev": 0,
1148 "rev": 0,
1149 "node": "1e4e1b8f71e05681d422154f5421e385fec3454f",
1149 "node": "1e4e1b8f71e05681d422154f5421e385fec3454f",
1150 "branch": "default",
1150 "branch": "default",
1151 "phase": "draft",
1151 "phase": "draft",
1152 "user": "User Name <user@hostname>",
1152 "user": "User Name <user@hostname>",
1153 "date": [1000000, 0],
1153 "date": [1000000, 0],
1154 "desc": "line 1\nline 2",
1154 "desc": "line 1\nline 2",
1155 "bookmarks": [],
1155 "bookmarks": [],
1156 "tags": [],
1156 "tags": [],
1157 "parents": ["0000000000000000000000000000000000000000"],
1157 "parents": ["0000000000000000000000000000000000000000"],
1158 "manifest": "a0c8bcbbb45c63b90b70ad007bf38961f64f2af0",
1158 "manifest": "a0c8bcbbb45c63b90b70ad007bf38961f64f2af0",
1159 "extra": {"branch": "default"},
1159 "extra": {"branch": "default"},
1160 "modified": [],
1160 "modified": [],
1161 "added": ["a"],
1161 "added": ["a"],
1162 "removed": []
1162 "removed": []
1163 }
1163 }
1164 ]
1164 ]
1165
1165
1166 Error if style not readable:
1166 Error if style not readable:
1167
1167
1168 #if unix-permissions no-root
1168 #if unix-permissions no-root
1169 $ touch q
1169 $ touch q
1170 $ chmod 0 q
1170 $ chmod 0 q
1171 $ hg log --style ./q
1171 $ hg log --style ./q
1172 abort: Permission denied: ./q
1172 abort: Permission denied: ./q
1173 [255]
1173 [255]
1174 #endif
1174 #endif
1175
1175
1176 Error if no style:
1176 Error if no style:
1177
1177
1178 $ hg log --style notexist
1178 $ hg log --style notexist
1179 abort: style 'notexist' not found
1179 abort: style 'notexist' not found
1180 (available styles: bisect, changelog, compact, default, phases, show, status, xml)
1180 (available styles: bisect, changelog, compact, default, phases, show, status, xml)
1181 [255]
1181 [255]
1182
1182
1183 $ hg log -T list
1183 $ hg log -T list
1184 available styles: bisect, changelog, compact, default, phases, show, status, xml
1184 available styles: bisect, changelog, compact, default, phases, show, status, xml
1185 abort: specify a template
1185 abort: specify a template
1186 [255]
1186 [255]
1187
1187
1188 Error if style missing key:
1188 Error if style missing key:
1189
1189
1190 $ echo 'q = q' > t
1190 $ echo 'q = q' > t
1191 $ hg log --style ./t
1191 $ hg log --style ./t
1192 abort: "changeset" not in template map
1192 abort: "changeset" not in template map
1193 [255]
1193 [255]
1194
1194
1195 Error if style missing value:
1195 Error if style missing value:
1196
1196
1197 $ echo 'changeset =' > t
1197 $ echo 'changeset =' > t
1198 $ hg log --style t
1198 $ hg log --style t
1199 hg: parse error at t:1: missing value
1199 hg: parse error at t:1: missing value
1200 [255]
1200 [255]
1201
1201
1202 Error if include fails:
1202 Error if include fails:
1203
1203
1204 $ echo 'changeset = q' >> t
1204 $ echo 'changeset = q' >> t
1205 #if unix-permissions no-root
1205 #if unix-permissions no-root
1206 $ hg log --style ./t
1206 $ hg log --style ./t
1207 abort: template file ./q: Permission denied
1207 abort: template file ./q: Permission denied
1208 [255]
1208 [255]
1209 $ rm -f q
1209 $ rm -f q
1210 #endif
1210 #endif
1211
1211
1212 Include works:
1212 Include works:
1213
1213
1214 $ echo '{rev}' > q
1214 $ echo '{rev}' > q
1215 $ hg log --style ./t
1215 $ hg log --style ./t
1216 8
1216 8
1217 7
1217 7
1218 6
1218 6
1219 5
1219 5
1220 4
1220 4
1221 3
1221 3
1222 2
1222 2
1223 1
1223 1
1224 0
1224 0
1225
1225
1226 Check that recursive reference does not fall into RuntimeError (issue4758):
1226 Check that recursive reference does not fall into RuntimeError (issue4758):
1227
1227
1228 common mistake:
1228 common mistake:
1229
1229
1230 $ cat << EOF > issue4758
1230 $ cat << EOF > issue4758
1231 > changeset = '{changeset}\n'
1231 > changeset = '{changeset}\n'
1232 > EOF
1232 > EOF
1233 $ hg log --style ./issue4758
1233 $ hg log --style ./issue4758
1234 abort: recursive reference 'changeset' in template
1234 abort: recursive reference 'changeset' in template
1235 [255]
1235 [255]
1236
1236
1237 circular reference:
1237 circular reference:
1238
1238
1239 $ cat << EOF > issue4758
1239 $ cat << EOF > issue4758
1240 > changeset = '{foo}'
1240 > changeset = '{foo}'
1241 > foo = '{changeset}'
1241 > foo = '{changeset}'
1242 > EOF
1242 > EOF
1243 $ hg log --style ./issue4758
1243 $ hg log --style ./issue4758
1244 abort: recursive reference 'foo' in template
1244 abort: recursive reference 'foo' in template
1245 [255]
1245 [255]
1246
1246
1247 buildmap() -> gettemplate(), where no thunk was made:
1247 buildmap() -> gettemplate(), where no thunk was made:
1248
1248
1249 $ cat << EOF > issue4758
1249 $ cat << EOF > issue4758
1250 > changeset = '{files % changeset}\n'
1250 > changeset = '{files % changeset}\n'
1251 > EOF
1251 > EOF
1252 $ hg log --style ./issue4758
1252 $ hg log --style ./issue4758
1253 abort: recursive reference 'changeset' in template
1253 abort: recursive reference 'changeset' in template
1254 [255]
1254 [255]
1255
1255
1256 not a recursion if a keyword of the same name exists:
1256 not a recursion if a keyword of the same name exists:
1257
1257
1258 $ cat << EOF > issue4758
1258 $ cat << EOF > issue4758
1259 > changeset = '{tags % rev}'
1259 > changeset = '{tags % rev}'
1260 > rev = '{rev} {tag}\n'
1260 > rev = '{rev} {tag}\n'
1261 > EOF
1261 > EOF
1262 $ hg log --style ./issue4758 -r tip
1262 $ hg log --style ./issue4758 -r tip
1263 8 tip
1263 8 tip
1264
1264
1265 Check that {phase} works correctly on parents:
1265 Check that {phase} works correctly on parents:
1266
1266
1267 $ cat << EOF > parentphase
1267 $ cat << EOF > parentphase
1268 > changeset_debug = '{rev} ({phase}):{parents}\n'
1268 > changeset_debug = '{rev} ({phase}):{parents}\n'
1269 > parent = ' {rev} ({phase})'
1269 > parent = ' {rev} ({phase})'
1270 > EOF
1270 > EOF
1271 $ hg phase -r 5 --public
1271 $ hg phase -r 5 --public
1272 $ hg phase -r 7 --secret --force
1272 $ hg phase -r 7 --secret --force
1273 $ hg log --debug -G --style ./parentphase
1273 $ hg log --debug -G --style ./parentphase
1274 @ 8 (secret): 7 (secret) -1 (public)
1274 @ 8 (secret): 7 (secret) -1 (public)
1275 |
1275 |
1276 o 7 (secret): -1 (public) -1 (public)
1276 o 7 (secret): -1 (public) -1 (public)
1277
1277
1278 o 6 (draft): 5 (public) 4 (draft)
1278 o 6 (draft): 5 (public) 4 (draft)
1279 |\
1279 |\
1280 | o 5 (public): 3 (public) -1 (public)
1280 | o 5 (public): 3 (public) -1 (public)
1281 | |
1281 | |
1282 o | 4 (draft): 3 (public) -1 (public)
1282 o | 4 (draft): 3 (public) -1 (public)
1283 |/
1283 |/
1284 o 3 (public): 2 (public) -1 (public)
1284 o 3 (public): 2 (public) -1 (public)
1285 |
1285 |
1286 o 2 (public): 1 (public) -1 (public)
1286 o 2 (public): 1 (public) -1 (public)
1287 |
1287 |
1288 o 1 (public): 0 (public) -1 (public)
1288 o 1 (public): 0 (public) -1 (public)
1289 |
1289 |
1290 o 0 (public): -1 (public) -1 (public)
1290 o 0 (public): -1 (public) -1 (public)
1291
1291
1292
1292
1293 Missing non-standard names give no error (backward compatibility):
1293 Missing non-standard names give no error (backward compatibility):
1294
1294
1295 $ echo "changeset = '{c}'" > t
1295 $ echo "changeset = '{c}'" > t
1296 $ hg log --style ./t
1296 $ hg log --style ./t
1297
1297
1298 Defining non-standard name works:
1298 Defining non-standard name works:
1299
1299
1300 $ cat <<EOF > t
1300 $ cat <<EOF > t
1301 > changeset = '{c}'
1301 > changeset = '{c}'
1302 > c = q
1302 > c = q
1303 > EOF
1303 > EOF
1304 $ hg log --style ./t
1304 $ hg log --style ./t
1305 8
1305 8
1306 7
1306 7
1307 6
1307 6
1308 5
1308 5
1309 4
1309 4
1310 3
1310 3
1311 2
1311 2
1312 1
1312 1
1313 0
1313 0
1314
1314
1315 ui.style works:
1315 ui.style works:
1316
1316
1317 $ echo '[ui]' > .hg/hgrc
1317 $ echo '[ui]' > .hg/hgrc
1318 $ echo 'style = t' >> .hg/hgrc
1318 $ echo 'style = t' >> .hg/hgrc
1319 $ hg log
1319 $ hg log
1320 8
1320 8
1321 7
1321 7
1322 6
1322 6
1323 5
1323 5
1324 4
1324 4
1325 3
1325 3
1326 2
1326 2
1327 1
1327 1
1328 0
1328 0
1329
1329
1330
1330
1331 Issue338:
1331 Issue338:
1332
1332
1333 $ hg log --style=changelog > changelog
1333 $ hg log --style=changelog > changelog
1334
1334
1335 $ cat changelog
1335 $ cat changelog
1336 2020-01-01 test <test>
1336 2020-01-01 test <test>
1337
1337
1338 * fourth, second, third:
1338 * fourth, second, third:
1339 third
1339 third
1340 [95c24699272e] [tip]
1340 [95c24699272e] [tip]
1341
1341
1342 1970-01-12 User Name <user@hostname>
1342 1970-01-12 User Name <user@hostname>
1343
1343
1344 * second:
1344 * second:
1345 second
1345 second
1346 [29114dbae42b]
1346 [29114dbae42b]
1347
1347
1348 1970-01-18 person <person>
1348 1970-01-18 person <person>
1349
1349
1350 * merge
1350 * merge
1351 [d41e714fe50d]
1351 [d41e714fe50d]
1352
1352
1353 * d:
1353 * d:
1354 new head
1354 new head
1355 [13207e5a10d9]
1355 [13207e5a10d9]
1356
1356
1357 1970-01-17 person <person>
1357 1970-01-17 person <person>
1358
1358
1359 * new branch
1359 * new branch
1360 [bbe44766e73d] <foo>
1360 [bbe44766e73d] <foo>
1361
1361
1362 1970-01-16 person <person>
1362 1970-01-16 person <person>
1363
1363
1364 * c:
1364 * c:
1365 no user, no domain
1365 no user, no domain
1366 [10e46f2dcbf4]
1366 [10e46f2dcbf4]
1367
1367
1368 1970-01-14 other <other@place>
1368 1970-01-14 other <other@place>
1369
1369
1370 * c:
1370 * c:
1371 no person
1371 no person
1372 [97054abb4ab8]
1372 [97054abb4ab8]
1373
1373
1374 1970-01-13 A. N. Other <other@place>
1374 1970-01-13 A. N. Other <other@place>
1375
1375
1376 * b:
1376 * b:
1377 other 1 other 2
1377 other 1 other 2
1378
1378
1379 other 3
1379 other 3
1380 [b608e9d1a3f0]
1380 [b608e9d1a3f0]
1381
1381
1382 1970-01-12 User Name <user@hostname>
1382 1970-01-12 User Name <user@hostname>
1383
1383
1384 * a:
1384 * a:
1385 line 1 line 2
1385 line 1 line 2
1386 [1e4e1b8f71e0]
1386 [1e4e1b8f71e0]
1387
1387
1388
1388
1389 Issue2130: xml output for 'hg heads' is malformed
1389 Issue2130: xml output for 'hg heads' is malformed
1390
1390
1391 $ hg heads --style changelog
1391 $ hg heads --style changelog
1392 2020-01-01 test <test>
1392 2020-01-01 test <test>
1393
1393
1394 * fourth, second, third:
1394 * fourth, second, third:
1395 third
1395 third
1396 [95c24699272e] [tip]
1396 [95c24699272e] [tip]
1397
1397
1398 1970-01-18 person <person>
1398 1970-01-18 person <person>
1399
1399
1400 * merge
1400 * merge
1401 [d41e714fe50d]
1401 [d41e714fe50d]
1402
1402
1403 1970-01-17 person <person>
1403 1970-01-17 person <person>
1404
1404
1405 * new branch
1405 * new branch
1406 [bbe44766e73d] <foo>
1406 [bbe44766e73d] <foo>
1407
1407
1408
1408
1409 Keys work:
1409 Keys work:
1410
1410
1411 $ for key in author branch branches date desc file_adds file_dels file_mods \
1411 $ for key in author branch branches date desc file_adds file_dels file_mods \
1412 > file_copies file_copies_switch files \
1412 > file_copies file_copies_switch files \
1413 > manifest node parents rev tags diffstat extras \
1413 > manifest node parents rev tags diffstat extras \
1414 > p1rev p2rev p1node p2node; do
1414 > p1rev p2rev p1node p2node; do
1415 > for mode in '' --verbose --debug; do
1415 > for mode in '' --verbose --debug; do
1416 > hg log $mode --template "$key$mode: {$key}\n"
1416 > hg log $mode --template "$key$mode: {$key}\n"
1417 > done
1417 > done
1418 > done
1418 > done
1419 author: test
1419 author: test
1420 author: User Name <user@hostname>
1420 author: User Name <user@hostname>
1421 author: person
1421 author: person
1422 author: person
1422 author: person
1423 author: person
1423 author: person
1424 author: person
1424 author: person
1425 author: other@place
1425 author: other@place
1426 author: A. N. Other <other@place>
1426 author: A. N. Other <other@place>
1427 author: User Name <user@hostname>
1427 author: User Name <user@hostname>
1428 author--verbose: test
1428 author--verbose: test
1429 author--verbose: User Name <user@hostname>
1429 author--verbose: User Name <user@hostname>
1430 author--verbose: person
1430 author--verbose: person
1431 author--verbose: person
1431 author--verbose: person
1432 author--verbose: person
1432 author--verbose: person
1433 author--verbose: person
1433 author--verbose: person
1434 author--verbose: other@place
1434 author--verbose: other@place
1435 author--verbose: A. N. Other <other@place>
1435 author--verbose: A. N. Other <other@place>
1436 author--verbose: User Name <user@hostname>
1436 author--verbose: User Name <user@hostname>
1437 author--debug: test
1437 author--debug: test
1438 author--debug: User Name <user@hostname>
1438 author--debug: User Name <user@hostname>
1439 author--debug: person
1439 author--debug: person
1440 author--debug: person
1440 author--debug: person
1441 author--debug: person
1441 author--debug: person
1442 author--debug: person
1442 author--debug: person
1443 author--debug: other@place
1443 author--debug: other@place
1444 author--debug: A. N. Other <other@place>
1444 author--debug: A. N. Other <other@place>
1445 author--debug: User Name <user@hostname>
1445 author--debug: User Name <user@hostname>
1446 branch: default
1446 branch: default
1447 branch: default
1447 branch: default
1448 branch: default
1448 branch: default
1449 branch: default
1449 branch: default
1450 branch: foo
1450 branch: foo
1451 branch: default
1451 branch: default
1452 branch: default
1452 branch: default
1453 branch: default
1453 branch: default
1454 branch: default
1454 branch: default
1455 branch--verbose: default
1455 branch--verbose: default
1456 branch--verbose: default
1456 branch--verbose: default
1457 branch--verbose: default
1457 branch--verbose: default
1458 branch--verbose: default
1458 branch--verbose: default
1459 branch--verbose: foo
1459 branch--verbose: foo
1460 branch--verbose: default
1460 branch--verbose: default
1461 branch--verbose: default
1461 branch--verbose: default
1462 branch--verbose: default
1462 branch--verbose: default
1463 branch--verbose: default
1463 branch--verbose: default
1464 branch--debug: default
1464 branch--debug: default
1465 branch--debug: default
1465 branch--debug: default
1466 branch--debug: default
1466 branch--debug: default
1467 branch--debug: default
1467 branch--debug: default
1468 branch--debug: foo
1468 branch--debug: foo
1469 branch--debug: default
1469 branch--debug: default
1470 branch--debug: default
1470 branch--debug: default
1471 branch--debug: default
1471 branch--debug: default
1472 branch--debug: default
1472 branch--debug: default
1473 branches:
1473 branches:
1474 branches:
1474 branches:
1475 branches:
1475 branches:
1476 branches:
1476 branches:
1477 branches: foo
1477 branches: foo
1478 branches:
1478 branches:
1479 branches:
1479 branches:
1480 branches:
1480 branches:
1481 branches:
1481 branches:
1482 branches--verbose:
1482 branches--verbose:
1483 branches--verbose:
1483 branches--verbose:
1484 branches--verbose:
1484 branches--verbose:
1485 branches--verbose:
1485 branches--verbose:
1486 branches--verbose: foo
1486 branches--verbose: foo
1487 branches--verbose:
1487 branches--verbose:
1488 branches--verbose:
1488 branches--verbose:
1489 branches--verbose:
1489 branches--verbose:
1490 branches--verbose:
1490 branches--verbose:
1491 branches--debug:
1491 branches--debug:
1492 branches--debug:
1492 branches--debug:
1493 branches--debug:
1493 branches--debug:
1494 branches--debug:
1494 branches--debug:
1495 branches--debug: foo
1495 branches--debug: foo
1496 branches--debug:
1496 branches--debug:
1497 branches--debug:
1497 branches--debug:
1498 branches--debug:
1498 branches--debug:
1499 branches--debug:
1499 branches--debug:
1500 date: 1577872860.00
1500 date: 1577872860.00
1501 date: 1000000.00
1501 date: 1000000.00
1502 date: 1500001.00
1502 date: 1500001.00
1503 date: 1500000.00
1503 date: 1500000.00
1504 date: 1400000.00
1504 date: 1400000.00
1505 date: 1300000.00
1505 date: 1300000.00
1506 date: 1200000.00
1506 date: 1200000.00
1507 date: 1100000.00
1507 date: 1100000.00
1508 date: 1000000.00
1508 date: 1000000.00
1509 date--verbose: 1577872860.00
1509 date--verbose: 1577872860.00
1510 date--verbose: 1000000.00
1510 date--verbose: 1000000.00
1511 date--verbose: 1500001.00
1511 date--verbose: 1500001.00
1512 date--verbose: 1500000.00
1512 date--verbose: 1500000.00
1513 date--verbose: 1400000.00
1513 date--verbose: 1400000.00
1514 date--verbose: 1300000.00
1514 date--verbose: 1300000.00
1515 date--verbose: 1200000.00
1515 date--verbose: 1200000.00
1516 date--verbose: 1100000.00
1516 date--verbose: 1100000.00
1517 date--verbose: 1000000.00
1517 date--verbose: 1000000.00
1518 date--debug: 1577872860.00
1518 date--debug: 1577872860.00
1519 date--debug: 1000000.00
1519 date--debug: 1000000.00
1520 date--debug: 1500001.00
1520 date--debug: 1500001.00
1521 date--debug: 1500000.00
1521 date--debug: 1500000.00
1522 date--debug: 1400000.00
1522 date--debug: 1400000.00
1523 date--debug: 1300000.00
1523 date--debug: 1300000.00
1524 date--debug: 1200000.00
1524 date--debug: 1200000.00
1525 date--debug: 1100000.00
1525 date--debug: 1100000.00
1526 date--debug: 1000000.00
1526 date--debug: 1000000.00
1527 desc: third
1527 desc: third
1528 desc: second
1528 desc: second
1529 desc: merge
1529 desc: merge
1530 desc: new head
1530 desc: new head
1531 desc: new branch
1531 desc: new branch
1532 desc: no user, no domain
1532 desc: no user, no domain
1533 desc: no person
1533 desc: no person
1534 desc: other 1
1534 desc: other 1
1535 other 2
1535 other 2
1536
1536
1537 other 3
1537 other 3
1538 desc: line 1
1538 desc: line 1
1539 line 2
1539 line 2
1540 desc--verbose: third
1540 desc--verbose: third
1541 desc--verbose: second
1541 desc--verbose: second
1542 desc--verbose: merge
1542 desc--verbose: merge
1543 desc--verbose: new head
1543 desc--verbose: new head
1544 desc--verbose: new branch
1544 desc--verbose: new branch
1545 desc--verbose: no user, no domain
1545 desc--verbose: no user, no domain
1546 desc--verbose: no person
1546 desc--verbose: no person
1547 desc--verbose: other 1
1547 desc--verbose: other 1
1548 other 2
1548 other 2
1549
1549
1550 other 3
1550 other 3
1551 desc--verbose: line 1
1551 desc--verbose: line 1
1552 line 2
1552 line 2
1553 desc--debug: third
1553 desc--debug: third
1554 desc--debug: second
1554 desc--debug: second
1555 desc--debug: merge
1555 desc--debug: merge
1556 desc--debug: new head
1556 desc--debug: new head
1557 desc--debug: new branch
1557 desc--debug: new branch
1558 desc--debug: no user, no domain
1558 desc--debug: no user, no domain
1559 desc--debug: no person
1559 desc--debug: no person
1560 desc--debug: other 1
1560 desc--debug: other 1
1561 other 2
1561 other 2
1562
1562
1563 other 3
1563 other 3
1564 desc--debug: line 1
1564 desc--debug: line 1
1565 line 2
1565 line 2
1566 file_adds: fourth third
1566 file_adds: fourth third
1567 file_adds: second
1567 file_adds: second
1568 file_adds:
1568 file_adds:
1569 file_adds: d
1569 file_adds: d
1570 file_adds:
1570 file_adds:
1571 file_adds:
1571 file_adds:
1572 file_adds: c
1572 file_adds: c
1573 file_adds: b
1573 file_adds: b
1574 file_adds: a
1574 file_adds: a
1575 file_adds--verbose: fourth third
1575 file_adds--verbose: fourth third
1576 file_adds--verbose: second
1576 file_adds--verbose: second
1577 file_adds--verbose:
1577 file_adds--verbose:
1578 file_adds--verbose: d
1578 file_adds--verbose: d
1579 file_adds--verbose:
1579 file_adds--verbose:
1580 file_adds--verbose:
1580 file_adds--verbose:
1581 file_adds--verbose: c
1581 file_adds--verbose: c
1582 file_adds--verbose: b
1582 file_adds--verbose: b
1583 file_adds--verbose: a
1583 file_adds--verbose: a
1584 file_adds--debug: fourth third
1584 file_adds--debug: fourth third
1585 file_adds--debug: second
1585 file_adds--debug: second
1586 file_adds--debug:
1586 file_adds--debug:
1587 file_adds--debug: d
1587 file_adds--debug: d
1588 file_adds--debug:
1588 file_adds--debug:
1589 file_adds--debug:
1589 file_adds--debug:
1590 file_adds--debug: c
1590 file_adds--debug: c
1591 file_adds--debug: b
1591 file_adds--debug: b
1592 file_adds--debug: a
1592 file_adds--debug: a
1593 file_dels: second
1593 file_dels: second
1594 file_dels:
1594 file_dels:
1595 file_dels:
1595 file_dels:
1596 file_dels:
1596 file_dels:
1597 file_dels:
1597 file_dels:
1598 file_dels:
1598 file_dels:
1599 file_dels:
1599 file_dels:
1600 file_dels:
1600 file_dels:
1601 file_dels:
1601 file_dels:
1602 file_dels--verbose: second
1602 file_dels--verbose: second
1603 file_dels--verbose:
1603 file_dels--verbose:
1604 file_dels--verbose:
1604 file_dels--verbose:
1605 file_dels--verbose:
1605 file_dels--verbose:
1606 file_dels--verbose:
1606 file_dels--verbose:
1607 file_dels--verbose:
1607 file_dels--verbose:
1608 file_dels--verbose:
1608 file_dels--verbose:
1609 file_dels--verbose:
1609 file_dels--verbose:
1610 file_dels--verbose:
1610 file_dels--verbose:
1611 file_dels--debug: second
1611 file_dels--debug: second
1612 file_dels--debug:
1612 file_dels--debug:
1613 file_dels--debug:
1613 file_dels--debug:
1614 file_dels--debug:
1614 file_dels--debug:
1615 file_dels--debug:
1615 file_dels--debug:
1616 file_dels--debug:
1616 file_dels--debug:
1617 file_dels--debug:
1617 file_dels--debug:
1618 file_dels--debug:
1618 file_dels--debug:
1619 file_dels--debug:
1619 file_dels--debug:
1620 file_mods:
1620 file_mods:
1621 file_mods:
1621 file_mods:
1622 file_mods:
1622 file_mods:
1623 file_mods:
1623 file_mods:
1624 file_mods:
1624 file_mods:
1625 file_mods: c
1625 file_mods: c
1626 file_mods:
1626 file_mods:
1627 file_mods:
1627 file_mods:
1628 file_mods:
1628 file_mods:
1629 file_mods--verbose:
1629 file_mods--verbose:
1630 file_mods--verbose:
1630 file_mods--verbose:
1631 file_mods--verbose:
1631 file_mods--verbose:
1632 file_mods--verbose:
1632 file_mods--verbose:
1633 file_mods--verbose:
1633 file_mods--verbose:
1634 file_mods--verbose: c
1634 file_mods--verbose: c
1635 file_mods--verbose:
1635 file_mods--verbose:
1636 file_mods--verbose:
1636 file_mods--verbose:
1637 file_mods--verbose:
1637 file_mods--verbose:
1638 file_mods--debug:
1638 file_mods--debug:
1639 file_mods--debug:
1639 file_mods--debug:
1640 file_mods--debug:
1640 file_mods--debug:
1641 file_mods--debug:
1641 file_mods--debug:
1642 file_mods--debug:
1642 file_mods--debug:
1643 file_mods--debug: c
1643 file_mods--debug: c
1644 file_mods--debug:
1644 file_mods--debug:
1645 file_mods--debug:
1645 file_mods--debug:
1646 file_mods--debug:
1646 file_mods--debug:
1647 file_copies: fourth (second)
1647 file_copies: fourth (second)
1648 file_copies:
1648 file_copies:
1649 file_copies:
1649 file_copies:
1650 file_copies:
1650 file_copies:
1651 file_copies:
1651 file_copies:
1652 file_copies:
1652 file_copies:
1653 file_copies:
1653 file_copies:
1654 file_copies:
1654 file_copies:
1655 file_copies:
1655 file_copies:
1656 file_copies--verbose: fourth (second)
1656 file_copies--verbose: fourth (second)
1657 file_copies--verbose:
1657 file_copies--verbose:
1658 file_copies--verbose:
1658 file_copies--verbose:
1659 file_copies--verbose:
1659 file_copies--verbose:
1660 file_copies--verbose:
1660 file_copies--verbose:
1661 file_copies--verbose:
1661 file_copies--verbose:
1662 file_copies--verbose:
1662 file_copies--verbose:
1663 file_copies--verbose:
1663 file_copies--verbose:
1664 file_copies--verbose:
1664 file_copies--verbose:
1665 file_copies--debug: fourth (second)
1665 file_copies--debug: fourth (second)
1666 file_copies--debug:
1666 file_copies--debug:
1667 file_copies--debug:
1667 file_copies--debug:
1668 file_copies--debug:
1668 file_copies--debug:
1669 file_copies--debug:
1669 file_copies--debug:
1670 file_copies--debug:
1670 file_copies--debug:
1671 file_copies--debug:
1671 file_copies--debug:
1672 file_copies--debug:
1672 file_copies--debug:
1673 file_copies--debug:
1673 file_copies--debug:
1674 file_copies_switch:
1674 file_copies_switch:
1675 file_copies_switch:
1675 file_copies_switch:
1676 file_copies_switch:
1676 file_copies_switch:
1677 file_copies_switch:
1677 file_copies_switch:
1678 file_copies_switch:
1678 file_copies_switch:
1679 file_copies_switch:
1679 file_copies_switch:
1680 file_copies_switch:
1680 file_copies_switch:
1681 file_copies_switch:
1681 file_copies_switch:
1682 file_copies_switch:
1682 file_copies_switch:
1683 file_copies_switch--verbose:
1683 file_copies_switch--verbose:
1684 file_copies_switch--verbose:
1684 file_copies_switch--verbose:
1685 file_copies_switch--verbose:
1685 file_copies_switch--verbose:
1686 file_copies_switch--verbose:
1686 file_copies_switch--verbose:
1687 file_copies_switch--verbose:
1687 file_copies_switch--verbose:
1688 file_copies_switch--verbose:
1688 file_copies_switch--verbose:
1689 file_copies_switch--verbose:
1689 file_copies_switch--verbose:
1690 file_copies_switch--verbose:
1690 file_copies_switch--verbose:
1691 file_copies_switch--verbose:
1691 file_copies_switch--verbose:
1692 file_copies_switch--debug:
1692 file_copies_switch--debug:
1693 file_copies_switch--debug:
1693 file_copies_switch--debug:
1694 file_copies_switch--debug:
1694 file_copies_switch--debug:
1695 file_copies_switch--debug:
1695 file_copies_switch--debug:
1696 file_copies_switch--debug:
1696 file_copies_switch--debug:
1697 file_copies_switch--debug:
1697 file_copies_switch--debug:
1698 file_copies_switch--debug:
1698 file_copies_switch--debug:
1699 file_copies_switch--debug:
1699 file_copies_switch--debug:
1700 file_copies_switch--debug:
1700 file_copies_switch--debug:
1701 files: fourth second third
1701 files: fourth second third
1702 files: second
1702 files: second
1703 files:
1703 files:
1704 files: d
1704 files: d
1705 files:
1705 files:
1706 files: c
1706 files: c
1707 files: c
1707 files: c
1708 files: b
1708 files: b
1709 files: a
1709 files: a
1710 files--verbose: fourth second third
1710 files--verbose: fourth second third
1711 files--verbose: second
1711 files--verbose: second
1712 files--verbose:
1712 files--verbose:
1713 files--verbose: d
1713 files--verbose: d
1714 files--verbose:
1714 files--verbose:
1715 files--verbose: c
1715 files--verbose: c
1716 files--verbose: c
1716 files--verbose: c
1717 files--verbose: b
1717 files--verbose: b
1718 files--verbose: a
1718 files--verbose: a
1719 files--debug: fourth second third
1719 files--debug: fourth second third
1720 files--debug: second
1720 files--debug: second
1721 files--debug:
1721 files--debug:
1722 files--debug: d
1722 files--debug: d
1723 files--debug:
1723 files--debug:
1724 files--debug: c
1724 files--debug: c
1725 files--debug: c
1725 files--debug: c
1726 files--debug: b
1726 files--debug: b
1727 files--debug: a
1727 files--debug: a
1728 manifest: 6:94961b75a2da
1728 manifest: 6:94961b75a2da
1729 manifest: 5:f2dbc354b94e
1729 manifest: 5:f2dbc354b94e
1730 manifest: 4:4dc3def4f9b4
1730 manifest: 4:4dc3def4f9b4
1731 manifest: 4:4dc3def4f9b4
1731 manifest: 4:4dc3def4f9b4
1732 manifest: 3:cb5a1327723b
1732 manifest: 3:cb5a1327723b
1733 manifest: 3:cb5a1327723b
1733 manifest: 3:cb5a1327723b
1734 manifest: 2:6e0e82995c35
1734 manifest: 2:6e0e82995c35
1735 manifest: 1:4e8d705b1e53
1735 manifest: 1:4e8d705b1e53
1736 manifest: 0:a0c8bcbbb45c
1736 manifest: 0:a0c8bcbbb45c
1737 manifest--verbose: 6:94961b75a2da
1737 manifest--verbose: 6:94961b75a2da
1738 manifest--verbose: 5:f2dbc354b94e
1738 manifest--verbose: 5:f2dbc354b94e
1739 manifest--verbose: 4:4dc3def4f9b4
1739 manifest--verbose: 4:4dc3def4f9b4
1740 manifest--verbose: 4:4dc3def4f9b4
1740 manifest--verbose: 4:4dc3def4f9b4
1741 manifest--verbose: 3:cb5a1327723b
1741 manifest--verbose: 3:cb5a1327723b
1742 manifest--verbose: 3:cb5a1327723b
1742 manifest--verbose: 3:cb5a1327723b
1743 manifest--verbose: 2:6e0e82995c35
1743 manifest--verbose: 2:6e0e82995c35
1744 manifest--verbose: 1:4e8d705b1e53
1744 manifest--verbose: 1:4e8d705b1e53
1745 manifest--verbose: 0:a0c8bcbbb45c
1745 manifest--verbose: 0:a0c8bcbbb45c
1746 manifest--debug: 6:94961b75a2da554b4df6fb599e5bfc7d48de0c64
1746 manifest--debug: 6:94961b75a2da554b4df6fb599e5bfc7d48de0c64
1747 manifest--debug: 5:f2dbc354b94e5ec0b4f10680ee0cee816101d0bf
1747 manifest--debug: 5:f2dbc354b94e5ec0b4f10680ee0cee816101d0bf
1748 manifest--debug: 4:4dc3def4f9b4c6e8de820f6ee74737f91e96a216
1748 manifest--debug: 4:4dc3def4f9b4c6e8de820f6ee74737f91e96a216
1749 manifest--debug: 4:4dc3def4f9b4c6e8de820f6ee74737f91e96a216
1749 manifest--debug: 4:4dc3def4f9b4c6e8de820f6ee74737f91e96a216
1750 manifest--debug: 3:cb5a1327723bada42f117e4c55a303246eaf9ccc
1750 manifest--debug: 3:cb5a1327723bada42f117e4c55a303246eaf9ccc
1751 manifest--debug: 3:cb5a1327723bada42f117e4c55a303246eaf9ccc
1751 manifest--debug: 3:cb5a1327723bada42f117e4c55a303246eaf9ccc
1752 manifest--debug: 2:6e0e82995c35d0d57a52aca8da4e56139e06b4b1
1752 manifest--debug: 2:6e0e82995c35d0d57a52aca8da4e56139e06b4b1
1753 manifest--debug: 1:4e8d705b1e53e3f9375e0e60dc7b525d8211fe55
1753 manifest--debug: 1:4e8d705b1e53e3f9375e0e60dc7b525d8211fe55
1754 manifest--debug: 0:a0c8bcbbb45c63b90b70ad007bf38961f64f2af0
1754 manifest--debug: 0:a0c8bcbbb45c63b90b70ad007bf38961f64f2af0
1755 node: 95c24699272ef57d062b8bccc32c878bf841784a
1755 node: 95c24699272ef57d062b8bccc32c878bf841784a
1756 node: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
1756 node: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
1757 node: d41e714fe50d9e4a5f11b4d595d543481b5f980b
1757 node: d41e714fe50d9e4a5f11b4d595d543481b5f980b
1758 node: 13207e5a10d9fd28ec424934298e176197f2c67f
1758 node: 13207e5a10d9fd28ec424934298e176197f2c67f
1759 node: bbe44766e73d5f11ed2177f1838de10c53ef3e74
1759 node: bbe44766e73d5f11ed2177f1838de10c53ef3e74
1760 node: 10e46f2dcbf4823578cf180f33ecf0b957964c47
1760 node: 10e46f2dcbf4823578cf180f33ecf0b957964c47
1761 node: 97054abb4ab824450e9164180baf491ae0078465
1761 node: 97054abb4ab824450e9164180baf491ae0078465
1762 node: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
1762 node: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
1763 node: 1e4e1b8f71e05681d422154f5421e385fec3454f
1763 node: 1e4e1b8f71e05681d422154f5421e385fec3454f
1764 node--verbose: 95c24699272ef57d062b8bccc32c878bf841784a
1764 node--verbose: 95c24699272ef57d062b8bccc32c878bf841784a
1765 node--verbose: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
1765 node--verbose: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
1766 node--verbose: d41e714fe50d9e4a5f11b4d595d543481b5f980b
1766 node--verbose: d41e714fe50d9e4a5f11b4d595d543481b5f980b
1767 node--verbose: 13207e5a10d9fd28ec424934298e176197f2c67f
1767 node--verbose: 13207e5a10d9fd28ec424934298e176197f2c67f
1768 node--verbose: bbe44766e73d5f11ed2177f1838de10c53ef3e74
1768 node--verbose: bbe44766e73d5f11ed2177f1838de10c53ef3e74
1769 node--verbose: 10e46f2dcbf4823578cf180f33ecf0b957964c47
1769 node--verbose: 10e46f2dcbf4823578cf180f33ecf0b957964c47
1770 node--verbose: 97054abb4ab824450e9164180baf491ae0078465
1770 node--verbose: 97054abb4ab824450e9164180baf491ae0078465
1771 node--verbose: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
1771 node--verbose: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
1772 node--verbose: 1e4e1b8f71e05681d422154f5421e385fec3454f
1772 node--verbose: 1e4e1b8f71e05681d422154f5421e385fec3454f
1773 node--debug: 95c24699272ef57d062b8bccc32c878bf841784a
1773 node--debug: 95c24699272ef57d062b8bccc32c878bf841784a
1774 node--debug: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
1774 node--debug: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
1775 node--debug: d41e714fe50d9e4a5f11b4d595d543481b5f980b
1775 node--debug: d41e714fe50d9e4a5f11b4d595d543481b5f980b
1776 node--debug: 13207e5a10d9fd28ec424934298e176197f2c67f
1776 node--debug: 13207e5a10d9fd28ec424934298e176197f2c67f
1777 node--debug: bbe44766e73d5f11ed2177f1838de10c53ef3e74
1777 node--debug: bbe44766e73d5f11ed2177f1838de10c53ef3e74
1778 node--debug: 10e46f2dcbf4823578cf180f33ecf0b957964c47
1778 node--debug: 10e46f2dcbf4823578cf180f33ecf0b957964c47
1779 node--debug: 97054abb4ab824450e9164180baf491ae0078465
1779 node--debug: 97054abb4ab824450e9164180baf491ae0078465
1780 node--debug: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
1780 node--debug: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
1781 node--debug: 1e4e1b8f71e05681d422154f5421e385fec3454f
1781 node--debug: 1e4e1b8f71e05681d422154f5421e385fec3454f
1782 parents:
1782 parents:
1783 parents: -1:000000000000
1783 parents: -1:000000000000
1784 parents: 5:13207e5a10d9 4:bbe44766e73d
1784 parents: 5:13207e5a10d9 4:bbe44766e73d
1785 parents: 3:10e46f2dcbf4
1785 parents: 3:10e46f2dcbf4
1786 parents:
1786 parents:
1787 parents:
1787 parents:
1788 parents:
1788 parents:
1789 parents:
1789 parents:
1790 parents:
1790 parents:
1791 parents--verbose:
1791 parents--verbose:
1792 parents--verbose: -1:000000000000
1792 parents--verbose: -1:000000000000
1793 parents--verbose: 5:13207e5a10d9 4:bbe44766e73d
1793 parents--verbose: 5:13207e5a10d9 4:bbe44766e73d
1794 parents--verbose: 3:10e46f2dcbf4
1794 parents--verbose: 3:10e46f2dcbf4
1795 parents--verbose:
1795 parents--verbose:
1796 parents--verbose:
1796 parents--verbose:
1797 parents--verbose:
1797 parents--verbose:
1798 parents--verbose:
1798 parents--verbose:
1799 parents--verbose:
1799 parents--verbose:
1800 parents--debug: 7:29114dbae42b9f078cf2714dbe3a86bba8ec7453 -1:0000000000000000000000000000000000000000
1800 parents--debug: 7:29114dbae42b9f078cf2714dbe3a86bba8ec7453 -1:0000000000000000000000000000000000000000
1801 parents--debug: -1:0000000000000000000000000000000000000000 -1:0000000000000000000000000000000000000000
1801 parents--debug: -1:0000000000000000000000000000000000000000 -1:0000000000000000000000000000000000000000
1802 parents--debug: 5:13207e5a10d9fd28ec424934298e176197f2c67f 4:bbe44766e73d5f11ed2177f1838de10c53ef3e74
1802 parents--debug: 5:13207e5a10d9fd28ec424934298e176197f2c67f 4:bbe44766e73d5f11ed2177f1838de10c53ef3e74
1803 parents--debug: 3:10e46f2dcbf4823578cf180f33ecf0b957964c47 -1:0000000000000000000000000000000000000000
1803 parents--debug: 3:10e46f2dcbf4823578cf180f33ecf0b957964c47 -1:0000000000000000000000000000000000000000
1804 parents--debug: 3:10e46f2dcbf4823578cf180f33ecf0b957964c47 -1:0000000000000000000000000000000000000000
1804 parents--debug: 3:10e46f2dcbf4823578cf180f33ecf0b957964c47 -1:0000000000000000000000000000000000000000
1805 parents--debug: 2:97054abb4ab824450e9164180baf491ae0078465 -1:0000000000000000000000000000000000000000
1805 parents--debug: 2:97054abb4ab824450e9164180baf491ae0078465 -1:0000000000000000000000000000000000000000
1806 parents--debug: 1:b608e9d1a3f0273ccf70fb85fd6866b3482bf965 -1:0000000000000000000000000000000000000000
1806 parents--debug: 1:b608e9d1a3f0273ccf70fb85fd6866b3482bf965 -1:0000000000000000000000000000000000000000
1807 parents--debug: 0:1e4e1b8f71e05681d422154f5421e385fec3454f -1:0000000000000000000000000000000000000000
1807 parents--debug: 0:1e4e1b8f71e05681d422154f5421e385fec3454f -1:0000000000000000000000000000000000000000
1808 parents--debug: -1:0000000000000000000000000000000000000000 -1:0000000000000000000000000000000000000000
1808 parents--debug: -1:0000000000000000000000000000000000000000 -1:0000000000000000000000000000000000000000
1809 rev: 8
1809 rev: 8
1810 rev: 7
1810 rev: 7
1811 rev: 6
1811 rev: 6
1812 rev: 5
1812 rev: 5
1813 rev: 4
1813 rev: 4
1814 rev: 3
1814 rev: 3
1815 rev: 2
1815 rev: 2
1816 rev: 1
1816 rev: 1
1817 rev: 0
1817 rev: 0
1818 rev--verbose: 8
1818 rev--verbose: 8
1819 rev--verbose: 7
1819 rev--verbose: 7
1820 rev--verbose: 6
1820 rev--verbose: 6
1821 rev--verbose: 5
1821 rev--verbose: 5
1822 rev--verbose: 4
1822 rev--verbose: 4
1823 rev--verbose: 3
1823 rev--verbose: 3
1824 rev--verbose: 2
1824 rev--verbose: 2
1825 rev--verbose: 1
1825 rev--verbose: 1
1826 rev--verbose: 0
1826 rev--verbose: 0
1827 rev--debug: 8
1827 rev--debug: 8
1828 rev--debug: 7
1828 rev--debug: 7
1829 rev--debug: 6
1829 rev--debug: 6
1830 rev--debug: 5
1830 rev--debug: 5
1831 rev--debug: 4
1831 rev--debug: 4
1832 rev--debug: 3
1832 rev--debug: 3
1833 rev--debug: 2
1833 rev--debug: 2
1834 rev--debug: 1
1834 rev--debug: 1
1835 rev--debug: 0
1835 rev--debug: 0
1836 tags: tip
1836 tags: tip
1837 tags:
1837 tags:
1838 tags:
1838 tags:
1839 tags:
1839 tags:
1840 tags:
1840 tags:
1841 tags:
1841 tags:
1842 tags:
1842 tags:
1843 tags:
1843 tags:
1844 tags:
1844 tags:
1845 tags--verbose: tip
1845 tags--verbose: tip
1846 tags--verbose:
1846 tags--verbose:
1847 tags--verbose:
1847 tags--verbose:
1848 tags--verbose:
1848 tags--verbose:
1849 tags--verbose:
1849 tags--verbose:
1850 tags--verbose:
1850 tags--verbose:
1851 tags--verbose:
1851 tags--verbose:
1852 tags--verbose:
1852 tags--verbose:
1853 tags--verbose:
1853 tags--verbose:
1854 tags--debug: tip
1854 tags--debug: tip
1855 tags--debug:
1855 tags--debug:
1856 tags--debug:
1856 tags--debug:
1857 tags--debug:
1857 tags--debug:
1858 tags--debug:
1858 tags--debug:
1859 tags--debug:
1859 tags--debug:
1860 tags--debug:
1860 tags--debug:
1861 tags--debug:
1861 tags--debug:
1862 tags--debug:
1862 tags--debug:
1863 diffstat: 3: +2/-1
1863 diffstat: 3: +2/-1
1864 diffstat: 1: +1/-0
1864 diffstat: 1: +1/-0
1865 diffstat: 0: +0/-0
1865 diffstat: 0: +0/-0
1866 diffstat: 1: +1/-0
1866 diffstat: 1: +1/-0
1867 diffstat: 0: +0/-0
1867 diffstat: 0: +0/-0
1868 diffstat: 1: +1/-0
1868 diffstat: 1: +1/-0
1869 diffstat: 1: +4/-0
1869 diffstat: 1: +4/-0
1870 diffstat: 1: +2/-0
1870 diffstat: 1: +2/-0
1871 diffstat: 1: +1/-0
1871 diffstat: 1: +1/-0
1872 diffstat--verbose: 3: +2/-1
1872 diffstat--verbose: 3: +2/-1
1873 diffstat--verbose: 1: +1/-0
1873 diffstat--verbose: 1: +1/-0
1874 diffstat--verbose: 0: +0/-0
1874 diffstat--verbose: 0: +0/-0
1875 diffstat--verbose: 1: +1/-0
1875 diffstat--verbose: 1: +1/-0
1876 diffstat--verbose: 0: +0/-0
1876 diffstat--verbose: 0: +0/-0
1877 diffstat--verbose: 1: +1/-0
1877 diffstat--verbose: 1: +1/-0
1878 diffstat--verbose: 1: +4/-0
1878 diffstat--verbose: 1: +4/-0
1879 diffstat--verbose: 1: +2/-0
1879 diffstat--verbose: 1: +2/-0
1880 diffstat--verbose: 1: +1/-0
1880 diffstat--verbose: 1: +1/-0
1881 diffstat--debug: 3: +2/-1
1881 diffstat--debug: 3: +2/-1
1882 diffstat--debug: 1: +1/-0
1882 diffstat--debug: 1: +1/-0
1883 diffstat--debug: 0: +0/-0
1883 diffstat--debug: 0: +0/-0
1884 diffstat--debug: 1: +1/-0
1884 diffstat--debug: 1: +1/-0
1885 diffstat--debug: 0: +0/-0
1885 diffstat--debug: 0: +0/-0
1886 diffstat--debug: 1: +1/-0
1886 diffstat--debug: 1: +1/-0
1887 diffstat--debug: 1: +4/-0
1887 diffstat--debug: 1: +4/-0
1888 diffstat--debug: 1: +2/-0
1888 diffstat--debug: 1: +2/-0
1889 diffstat--debug: 1: +1/-0
1889 diffstat--debug: 1: +1/-0
1890 extras: branch=default
1890 extras: branch=default
1891 extras: branch=default
1891 extras: branch=default
1892 extras: branch=default
1892 extras: branch=default
1893 extras: branch=default
1893 extras: branch=default
1894 extras: branch=foo
1894 extras: branch=foo
1895 extras: branch=default
1895 extras: branch=default
1896 extras: branch=default
1896 extras: branch=default
1897 extras: branch=default
1897 extras: branch=default
1898 extras: branch=default
1898 extras: branch=default
1899 extras--verbose: branch=default
1899 extras--verbose: branch=default
1900 extras--verbose: branch=default
1900 extras--verbose: branch=default
1901 extras--verbose: branch=default
1901 extras--verbose: branch=default
1902 extras--verbose: branch=default
1902 extras--verbose: branch=default
1903 extras--verbose: branch=foo
1903 extras--verbose: branch=foo
1904 extras--verbose: branch=default
1904 extras--verbose: branch=default
1905 extras--verbose: branch=default
1905 extras--verbose: branch=default
1906 extras--verbose: branch=default
1906 extras--verbose: branch=default
1907 extras--verbose: branch=default
1907 extras--verbose: branch=default
1908 extras--debug: branch=default
1908 extras--debug: branch=default
1909 extras--debug: branch=default
1909 extras--debug: branch=default
1910 extras--debug: branch=default
1910 extras--debug: branch=default
1911 extras--debug: branch=default
1911 extras--debug: branch=default
1912 extras--debug: branch=foo
1912 extras--debug: branch=foo
1913 extras--debug: branch=default
1913 extras--debug: branch=default
1914 extras--debug: branch=default
1914 extras--debug: branch=default
1915 extras--debug: branch=default
1915 extras--debug: branch=default
1916 extras--debug: branch=default
1916 extras--debug: branch=default
1917 p1rev: 7
1917 p1rev: 7
1918 p1rev: -1
1918 p1rev: -1
1919 p1rev: 5
1919 p1rev: 5
1920 p1rev: 3
1920 p1rev: 3
1921 p1rev: 3
1921 p1rev: 3
1922 p1rev: 2
1922 p1rev: 2
1923 p1rev: 1
1923 p1rev: 1
1924 p1rev: 0
1924 p1rev: 0
1925 p1rev: -1
1925 p1rev: -1
1926 p1rev--verbose: 7
1926 p1rev--verbose: 7
1927 p1rev--verbose: -1
1927 p1rev--verbose: -1
1928 p1rev--verbose: 5
1928 p1rev--verbose: 5
1929 p1rev--verbose: 3
1929 p1rev--verbose: 3
1930 p1rev--verbose: 3
1930 p1rev--verbose: 3
1931 p1rev--verbose: 2
1931 p1rev--verbose: 2
1932 p1rev--verbose: 1
1932 p1rev--verbose: 1
1933 p1rev--verbose: 0
1933 p1rev--verbose: 0
1934 p1rev--verbose: -1
1934 p1rev--verbose: -1
1935 p1rev--debug: 7
1935 p1rev--debug: 7
1936 p1rev--debug: -1
1936 p1rev--debug: -1
1937 p1rev--debug: 5
1937 p1rev--debug: 5
1938 p1rev--debug: 3
1938 p1rev--debug: 3
1939 p1rev--debug: 3
1939 p1rev--debug: 3
1940 p1rev--debug: 2
1940 p1rev--debug: 2
1941 p1rev--debug: 1
1941 p1rev--debug: 1
1942 p1rev--debug: 0
1942 p1rev--debug: 0
1943 p1rev--debug: -1
1943 p1rev--debug: -1
1944 p2rev: -1
1944 p2rev: -1
1945 p2rev: -1
1945 p2rev: -1
1946 p2rev: 4
1946 p2rev: 4
1947 p2rev: -1
1947 p2rev: -1
1948 p2rev: -1
1948 p2rev: -1
1949 p2rev: -1
1949 p2rev: -1
1950 p2rev: -1
1950 p2rev: -1
1951 p2rev: -1
1951 p2rev: -1
1952 p2rev: -1
1952 p2rev: -1
1953 p2rev--verbose: -1
1953 p2rev--verbose: -1
1954 p2rev--verbose: -1
1954 p2rev--verbose: -1
1955 p2rev--verbose: 4
1955 p2rev--verbose: 4
1956 p2rev--verbose: -1
1956 p2rev--verbose: -1
1957 p2rev--verbose: -1
1957 p2rev--verbose: -1
1958 p2rev--verbose: -1
1958 p2rev--verbose: -1
1959 p2rev--verbose: -1
1959 p2rev--verbose: -1
1960 p2rev--verbose: -1
1960 p2rev--verbose: -1
1961 p2rev--verbose: -1
1961 p2rev--verbose: -1
1962 p2rev--debug: -1
1962 p2rev--debug: -1
1963 p2rev--debug: -1
1963 p2rev--debug: -1
1964 p2rev--debug: 4
1964 p2rev--debug: 4
1965 p2rev--debug: -1
1965 p2rev--debug: -1
1966 p2rev--debug: -1
1966 p2rev--debug: -1
1967 p2rev--debug: -1
1967 p2rev--debug: -1
1968 p2rev--debug: -1
1968 p2rev--debug: -1
1969 p2rev--debug: -1
1969 p2rev--debug: -1
1970 p2rev--debug: -1
1970 p2rev--debug: -1
1971 p1node: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
1971 p1node: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
1972 p1node: 0000000000000000000000000000000000000000
1972 p1node: 0000000000000000000000000000000000000000
1973 p1node: 13207e5a10d9fd28ec424934298e176197f2c67f
1973 p1node: 13207e5a10d9fd28ec424934298e176197f2c67f
1974 p1node: 10e46f2dcbf4823578cf180f33ecf0b957964c47
1974 p1node: 10e46f2dcbf4823578cf180f33ecf0b957964c47
1975 p1node: 10e46f2dcbf4823578cf180f33ecf0b957964c47
1975 p1node: 10e46f2dcbf4823578cf180f33ecf0b957964c47
1976 p1node: 97054abb4ab824450e9164180baf491ae0078465
1976 p1node: 97054abb4ab824450e9164180baf491ae0078465
1977 p1node: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
1977 p1node: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
1978 p1node: 1e4e1b8f71e05681d422154f5421e385fec3454f
1978 p1node: 1e4e1b8f71e05681d422154f5421e385fec3454f
1979 p1node: 0000000000000000000000000000000000000000
1979 p1node: 0000000000000000000000000000000000000000
1980 p1node--verbose: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
1980 p1node--verbose: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
1981 p1node--verbose: 0000000000000000000000000000000000000000
1981 p1node--verbose: 0000000000000000000000000000000000000000
1982 p1node--verbose: 13207e5a10d9fd28ec424934298e176197f2c67f
1982 p1node--verbose: 13207e5a10d9fd28ec424934298e176197f2c67f
1983 p1node--verbose: 10e46f2dcbf4823578cf180f33ecf0b957964c47
1983 p1node--verbose: 10e46f2dcbf4823578cf180f33ecf0b957964c47
1984 p1node--verbose: 10e46f2dcbf4823578cf180f33ecf0b957964c47
1984 p1node--verbose: 10e46f2dcbf4823578cf180f33ecf0b957964c47
1985 p1node--verbose: 97054abb4ab824450e9164180baf491ae0078465
1985 p1node--verbose: 97054abb4ab824450e9164180baf491ae0078465
1986 p1node--verbose: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
1986 p1node--verbose: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
1987 p1node--verbose: 1e4e1b8f71e05681d422154f5421e385fec3454f
1987 p1node--verbose: 1e4e1b8f71e05681d422154f5421e385fec3454f
1988 p1node--verbose: 0000000000000000000000000000000000000000
1988 p1node--verbose: 0000000000000000000000000000000000000000
1989 p1node--debug: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
1989 p1node--debug: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
1990 p1node--debug: 0000000000000000000000000000000000000000
1990 p1node--debug: 0000000000000000000000000000000000000000
1991 p1node--debug: 13207e5a10d9fd28ec424934298e176197f2c67f
1991 p1node--debug: 13207e5a10d9fd28ec424934298e176197f2c67f
1992 p1node--debug: 10e46f2dcbf4823578cf180f33ecf0b957964c47
1992 p1node--debug: 10e46f2dcbf4823578cf180f33ecf0b957964c47
1993 p1node--debug: 10e46f2dcbf4823578cf180f33ecf0b957964c47
1993 p1node--debug: 10e46f2dcbf4823578cf180f33ecf0b957964c47
1994 p1node--debug: 97054abb4ab824450e9164180baf491ae0078465
1994 p1node--debug: 97054abb4ab824450e9164180baf491ae0078465
1995 p1node--debug: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
1995 p1node--debug: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
1996 p1node--debug: 1e4e1b8f71e05681d422154f5421e385fec3454f
1996 p1node--debug: 1e4e1b8f71e05681d422154f5421e385fec3454f
1997 p1node--debug: 0000000000000000000000000000000000000000
1997 p1node--debug: 0000000000000000000000000000000000000000
1998 p2node: 0000000000000000000000000000000000000000
1998 p2node: 0000000000000000000000000000000000000000
1999 p2node: 0000000000000000000000000000000000000000
1999 p2node: 0000000000000000000000000000000000000000
2000 p2node: bbe44766e73d5f11ed2177f1838de10c53ef3e74
2000 p2node: bbe44766e73d5f11ed2177f1838de10c53ef3e74
2001 p2node: 0000000000000000000000000000000000000000
2001 p2node: 0000000000000000000000000000000000000000
2002 p2node: 0000000000000000000000000000000000000000
2002 p2node: 0000000000000000000000000000000000000000
2003 p2node: 0000000000000000000000000000000000000000
2003 p2node: 0000000000000000000000000000000000000000
2004 p2node: 0000000000000000000000000000000000000000
2004 p2node: 0000000000000000000000000000000000000000
2005 p2node: 0000000000000000000000000000000000000000
2005 p2node: 0000000000000000000000000000000000000000
2006 p2node: 0000000000000000000000000000000000000000
2006 p2node: 0000000000000000000000000000000000000000
2007 p2node--verbose: 0000000000000000000000000000000000000000
2007 p2node--verbose: 0000000000000000000000000000000000000000
2008 p2node--verbose: 0000000000000000000000000000000000000000
2008 p2node--verbose: 0000000000000000000000000000000000000000
2009 p2node--verbose: bbe44766e73d5f11ed2177f1838de10c53ef3e74
2009 p2node--verbose: bbe44766e73d5f11ed2177f1838de10c53ef3e74
2010 p2node--verbose: 0000000000000000000000000000000000000000
2010 p2node--verbose: 0000000000000000000000000000000000000000
2011 p2node--verbose: 0000000000000000000000000000000000000000
2011 p2node--verbose: 0000000000000000000000000000000000000000
2012 p2node--verbose: 0000000000000000000000000000000000000000
2012 p2node--verbose: 0000000000000000000000000000000000000000
2013 p2node--verbose: 0000000000000000000000000000000000000000
2013 p2node--verbose: 0000000000000000000000000000000000000000
2014 p2node--verbose: 0000000000000000000000000000000000000000
2014 p2node--verbose: 0000000000000000000000000000000000000000
2015 p2node--verbose: 0000000000000000000000000000000000000000
2015 p2node--verbose: 0000000000000000000000000000000000000000
2016 p2node--debug: 0000000000000000000000000000000000000000
2016 p2node--debug: 0000000000000000000000000000000000000000
2017 p2node--debug: 0000000000000000000000000000000000000000
2017 p2node--debug: 0000000000000000000000000000000000000000
2018 p2node--debug: bbe44766e73d5f11ed2177f1838de10c53ef3e74
2018 p2node--debug: bbe44766e73d5f11ed2177f1838de10c53ef3e74
2019 p2node--debug: 0000000000000000000000000000000000000000
2019 p2node--debug: 0000000000000000000000000000000000000000
2020 p2node--debug: 0000000000000000000000000000000000000000
2020 p2node--debug: 0000000000000000000000000000000000000000
2021 p2node--debug: 0000000000000000000000000000000000000000
2021 p2node--debug: 0000000000000000000000000000000000000000
2022 p2node--debug: 0000000000000000000000000000000000000000
2022 p2node--debug: 0000000000000000000000000000000000000000
2023 p2node--debug: 0000000000000000000000000000000000000000
2023 p2node--debug: 0000000000000000000000000000000000000000
2024 p2node--debug: 0000000000000000000000000000000000000000
2024 p2node--debug: 0000000000000000000000000000000000000000
2025
2025
2026 Filters work:
2026 Filters work:
2027
2027
2028 $ hg log --template '{author|domain}\n'
2028 $ hg log --template '{author|domain}\n'
2029
2029
2030 hostname
2030 hostname
2031
2031
2032
2032
2033
2033
2034
2034
2035 place
2035 place
2036 place
2036 place
2037 hostname
2037 hostname
2038
2038
2039 $ hg log --template '{author|person}\n'
2039 $ hg log --template '{author|person}\n'
2040 test
2040 test
2041 User Name
2041 User Name
2042 person
2042 person
2043 person
2043 person
2044 person
2044 person
2045 person
2045 person
2046 other
2046 other
2047 A. N. Other
2047 A. N. Other
2048 User Name
2048 User Name
2049
2049
2050 $ hg log --template '{author|user}\n'
2050 $ hg log --template '{author|user}\n'
2051 test
2051 test
2052 user
2052 user
2053 person
2053 person
2054 person
2054 person
2055 person
2055 person
2056 person
2056 person
2057 other
2057 other
2058 other
2058 other
2059 user
2059 user
2060
2060
2061 $ hg log --template '{date|date}\n'
2061 $ hg log --template '{date|date}\n'
2062 Wed Jan 01 10:01:00 2020 +0000
2062 Wed Jan 01 10:01:00 2020 +0000
2063 Mon Jan 12 13:46:40 1970 +0000
2063 Mon Jan 12 13:46:40 1970 +0000
2064 Sun Jan 18 08:40:01 1970 +0000
2064 Sun Jan 18 08:40:01 1970 +0000
2065 Sun Jan 18 08:40:00 1970 +0000
2065 Sun Jan 18 08:40:00 1970 +0000
2066 Sat Jan 17 04:53:20 1970 +0000
2066 Sat Jan 17 04:53:20 1970 +0000
2067 Fri Jan 16 01:06:40 1970 +0000
2067 Fri Jan 16 01:06:40 1970 +0000
2068 Wed Jan 14 21:20:00 1970 +0000
2068 Wed Jan 14 21:20:00 1970 +0000
2069 Tue Jan 13 17:33:20 1970 +0000
2069 Tue Jan 13 17:33:20 1970 +0000
2070 Mon Jan 12 13:46:40 1970 +0000
2070 Mon Jan 12 13:46:40 1970 +0000
2071
2071
2072 $ hg log --template '{date|isodate}\n'
2072 $ hg log --template '{date|isodate}\n'
2073 2020-01-01 10:01 +0000
2073 2020-01-01 10:01 +0000
2074 1970-01-12 13:46 +0000
2074 1970-01-12 13:46 +0000
2075 1970-01-18 08:40 +0000
2075 1970-01-18 08:40 +0000
2076 1970-01-18 08:40 +0000
2076 1970-01-18 08:40 +0000
2077 1970-01-17 04:53 +0000
2077 1970-01-17 04:53 +0000
2078 1970-01-16 01:06 +0000
2078 1970-01-16 01:06 +0000
2079 1970-01-14 21:20 +0000
2079 1970-01-14 21:20 +0000
2080 1970-01-13 17:33 +0000
2080 1970-01-13 17:33 +0000
2081 1970-01-12 13:46 +0000
2081 1970-01-12 13:46 +0000
2082
2082
2083 $ hg log --template '{date|isodatesec}\n'
2083 $ hg log --template '{date|isodatesec}\n'
2084 2020-01-01 10:01:00 +0000
2084 2020-01-01 10:01:00 +0000
2085 1970-01-12 13:46:40 +0000
2085 1970-01-12 13:46:40 +0000
2086 1970-01-18 08:40:01 +0000
2086 1970-01-18 08:40:01 +0000
2087 1970-01-18 08:40:00 +0000
2087 1970-01-18 08:40:00 +0000
2088 1970-01-17 04:53:20 +0000
2088 1970-01-17 04:53:20 +0000
2089 1970-01-16 01:06:40 +0000
2089 1970-01-16 01:06:40 +0000
2090 1970-01-14 21:20:00 +0000
2090 1970-01-14 21:20:00 +0000
2091 1970-01-13 17:33:20 +0000
2091 1970-01-13 17:33:20 +0000
2092 1970-01-12 13:46:40 +0000
2092 1970-01-12 13:46:40 +0000
2093
2093
2094 $ hg log --template '{date|rfc822date}\n'
2094 $ hg log --template '{date|rfc822date}\n'
2095 Wed, 01 Jan 2020 10:01:00 +0000
2095 Wed, 01 Jan 2020 10:01:00 +0000
2096 Mon, 12 Jan 1970 13:46:40 +0000
2096 Mon, 12 Jan 1970 13:46:40 +0000
2097 Sun, 18 Jan 1970 08:40:01 +0000
2097 Sun, 18 Jan 1970 08:40:01 +0000
2098 Sun, 18 Jan 1970 08:40:00 +0000
2098 Sun, 18 Jan 1970 08:40:00 +0000
2099 Sat, 17 Jan 1970 04:53:20 +0000
2099 Sat, 17 Jan 1970 04:53:20 +0000
2100 Fri, 16 Jan 1970 01:06:40 +0000
2100 Fri, 16 Jan 1970 01:06:40 +0000
2101 Wed, 14 Jan 1970 21:20:00 +0000
2101 Wed, 14 Jan 1970 21:20:00 +0000
2102 Tue, 13 Jan 1970 17:33:20 +0000
2102 Tue, 13 Jan 1970 17:33:20 +0000
2103 Mon, 12 Jan 1970 13:46:40 +0000
2103 Mon, 12 Jan 1970 13:46:40 +0000
2104
2104
2105 $ hg log --template '{desc|firstline}\n'
2105 $ hg log --template '{desc|firstline}\n'
2106 third
2106 third
2107 second
2107 second
2108 merge
2108 merge
2109 new head
2109 new head
2110 new branch
2110 new branch
2111 no user, no domain
2111 no user, no domain
2112 no person
2112 no person
2113 other 1
2113 other 1
2114 line 1
2114 line 1
2115
2115
2116 $ hg log --template '{node|short}\n'
2116 $ hg log --template '{node|short}\n'
2117 95c24699272e
2117 95c24699272e
2118 29114dbae42b
2118 29114dbae42b
2119 d41e714fe50d
2119 d41e714fe50d
2120 13207e5a10d9
2120 13207e5a10d9
2121 bbe44766e73d
2121 bbe44766e73d
2122 10e46f2dcbf4
2122 10e46f2dcbf4
2123 97054abb4ab8
2123 97054abb4ab8
2124 b608e9d1a3f0
2124 b608e9d1a3f0
2125 1e4e1b8f71e0
2125 1e4e1b8f71e0
2126
2126
2127 $ hg log --template '<changeset author="{author|xmlescape}"/>\n'
2127 $ hg log --template '<changeset author="{author|xmlescape}"/>\n'
2128 <changeset author="test"/>
2128 <changeset author="test"/>
2129 <changeset author="User Name &lt;user@hostname&gt;"/>
2129 <changeset author="User Name &lt;user@hostname&gt;"/>
2130 <changeset author="person"/>
2130 <changeset author="person"/>
2131 <changeset author="person"/>
2131 <changeset author="person"/>
2132 <changeset author="person"/>
2132 <changeset author="person"/>
2133 <changeset author="person"/>
2133 <changeset author="person"/>
2134 <changeset author="other@place"/>
2134 <changeset author="other@place"/>
2135 <changeset author="A. N. Other &lt;other@place&gt;"/>
2135 <changeset author="A. N. Other &lt;other@place&gt;"/>
2136 <changeset author="User Name &lt;user@hostname&gt;"/>
2136 <changeset author="User Name &lt;user@hostname&gt;"/>
2137
2137
2138 $ hg log --template '{rev}: {children}\n'
2138 $ hg log --template '{rev}: {children}\n'
2139 8:
2139 8:
2140 7: 8:95c24699272e
2140 7: 8:95c24699272e
2141 6:
2141 6:
2142 5: 6:d41e714fe50d
2142 5: 6:d41e714fe50d
2143 4: 6:d41e714fe50d
2143 4: 6:d41e714fe50d
2144 3: 4:bbe44766e73d 5:13207e5a10d9
2144 3: 4:bbe44766e73d 5:13207e5a10d9
2145 2: 3:10e46f2dcbf4
2145 2: 3:10e46f2dcbf4
2146 1: 2:97054abb4ab8
2146 1: 2:97054abb4ab8
2147 0: 1:b608e9d1a3f0
2147 0: 1:b608e9d1a3f0
2148
2148
2149 Formatnode filter works:
2149 Formatnode filter works:
2150
2150
2151 $ hg -q log -r 0 --template '{node|formatnode}\n'
2151 $ hg -q log -r 0 --template '{node|formatnode}\n'
2152 1e4e1b8f71e0
2152 1e4e1b8f71e0
2153
2153
2154 $ hg log -r 0 --template '{node|formatnode}\n'
2154 $ hg log -r 0 --template '{node|formatnode}\n'
2155 1e4e1b8f71e0
2155 1e4e1b8f71e0
2156
2156
2157 $ hg -v log -r 0 --template '{node|formatnode}\n'
2157 $ hg -v log -r 0 --template '{node|formatnode}\n'
2158 1e4e1b8f71e0
2158 1e4e1b8f71e0
2159
2159
2160 $ hg --debug log -r 0 --template '{node|formatnode}\n'
2160 $ hg --debug log -r 0 --template '{node|formatnode}\n'
2161 1e4e1b8f71e05681d422154f5421e385fec3454f
2161 1e4e1b8f71e05681d422154f5421e385fec3454f
2162
2162
2163 Age filter:
2163 Age filter:
2164
2164
2165 $ hg init unstable-hash
2165 $ hg init unstable-hash
2166 $ cd unstable-hash
2166 $ cd unstable-hash
2167 $ hg log --template '{date|age}\n' > /dev/null || exit 1
2167 $ hg log --template '{date|age}\n' > /dev/null || exit 1
2168
2168
2169 >>> from datetime import datetime, timedelta
2169 >>> from __future__ import absolute_import
2170 >>> import datetime
2170 >>> fp = open('a', 'w')
2171 >>> fp = open('a', 'w')
2171 >>> n = datetime.now() + timedelta(366 * 7)
2172 >>> n = datetime.datetime.now() + datetime.timedelta(366 * 7)
2172 >>> fp.write('%d-%d-%d 00:00' % (n.year, n.month, n.day))
2173 >>> fp.write('%d-%d-%d 00:00' % (n.year, n.month, n.day))
2173 >>> fp.close()
2174 >>> fp.close()
2174 $ hg add a
2175 $ hg add a
2175 $ hg commit -m future -d "`cat a`"
2176 $ hg commit -m future -d "`cat a`"
2176
2177
2177 $ hg log -l1 --template '{date|age}\n'
2178 $ hg log -l1 --template '{date|age}\n'
2178 7 years from now
2179 7 years from now
2179
2180
2180 $ cd ..
2181 $ cd ..
2181 $ rm -rf unstable-hash
2182 $ rm -rf unstable-hash
2182
2183
2183 Add a dummy commit to make up for the instability of the above:
2184 Add a dummy commit to make up for the instability of the above:
2184
2185
2185 $ echo a > a
2186 $ echo a > a
2186 $ hg add a
2187 $ hg add a
2187 $ hg ci -m future
2188 $ hg ci -m future
2188
2189
2189 Count filter:
2190 Count filter:
2190
2191
2191 $ hg log -l1 --template '{node|count} {node|short|count}\n'
2192 $ hg log -l1 --template '{node|count} {node|short|count}\n'
2192 40 12
2193 40 12
2193
2194
2194 $ hg log -l1 --template '{revset("null^")|count} {revset(".")|count} {revset("0::3")|count}\n'
2195 $ hg log -l1 --template '{revset("null^")|count} {revset(".")|count} {revset("0::3")|count}\n'
2195 0 1 4
2196 0 1 4
2196
2197
2197 $ hg log -G --template '{rev}: children: {children|count}, \
2198 $ hg log -G --template '{rev}: children: {children|count}, \
2198 > tags: {tags|count}, file_adds: {file_adds|count}, \
2199 > tags: {tags|count}, file_adds: {file_adds|count}, \
2199 > ancestors: {revset("ancestors(%s)", rev)|count}'
2200 > ancestors: {revset("ancestors(%s)", rev)|count}'
2200 @ 9: children: 0, tags: 1, file_adds: 1, ancestors: 3
2201 @ 9: children: 0, tags: 1, file_adds: 1, ancestors: 3
2201 |
2202 |
2202 o 8: children: 1, tags: 0, file_adds: 2, ancestors: 2
2203 o 8: children: 1, tags: 0, file_adds: 2, ancestors: 2
2203 |
2204 |
2204 o 7: children: 1, tags: 0, file_adds: 1, ancestors: 1
2205 o 7: children: 1, tags: 0, file_adds: 1, ancestors: 1
2205
2206
2206 o 6: children: 0, tags: 0, file_adds: 0, ancestors: 7
2207 o 6: children: 0, tags: 0, file_adds: 0, ancestors: 7
2207 |\
2208 |\
2208 | o 5: children: 1, tags: 0, file_adds: 1, ancestors: 5
2209 | o 5: children: 1, tags: 0, file_adds: 1, ancestors: 5
2209 | |
2210 | |
2210 o | 4: children: 1, tags: 0, file_adds: 0, ancestors: 5
2211 o | 4: children: 1, tags: 0, file_adds: 0, ancestors: 5
2211 |/
2212 |/
2212 o 3: children: 2, tags: 0, file_adds: 0, ancestors: 4
2213 o 3: children: 2, tags: 0, file_adds: 0, ancestors: 4
2213 |
2214 |
2214 o 2: children: 1, tags: 0, file_adds: 1, ancestors: 3
2215 o 2: children: 1, tags: 0, file_adds: 1, ancestors: 3
2215 |
2216 |
2216 o 1: children: 1, tags: 0, file_adds: 1, ancestors: 2
2217 o 1: children: 1, tags: 0, file_adds: 1, ancestors: 2
2217 |
2218 |
2218 o 0: children: 1, tags: 0, file_adds: 1, ancestors: 1
2219 o 0: children: 1, tags: 0, file_adds: 1, ancestors: 1
2219
2220
2220
2221
2221 Upper/lower filters:
2222 Upper/lower filters:
2222
2223
2223 $ hg log -r0 --template '{branch|upper}\n'
2224 $ hg log -r0 --template '{branch|upper}\n'
2224 DEFAULT
2225 DEFAULT
2225 $ hg log -r0 --template '{author|lower}\n'
2226 $ hg log -r0 --template '{author|lower}\n'
2226 user name <user@hostname>
2227 user name <user@hostname>
2227 $ hg log -r0 --template '{date|upper}\n'
2228 $ hg log -r0 --template '{date|upper}\n'
2228 abort: template filter 'upper' is not compatible with keyword 'date'
2229 abort: template filter 'upper' is not compatible with keyword 'date'
2229 [255]
2230 [255]
2230
2231
2231 Add a commit that does all possible modifications at once
2232 Add a commit that does all possible modifications at once
2232
2233
2233 $ echo modify >> third
2234 $ echo modify >> third
2234 $ touch b
2235 $ touch b
2235 $ hg add b
2236 $ hg add b
2236 $ hg mv fourth fifth
2237 $ hg mv fourth fifth
2237 $ hg rm a
2238 $ hg rm a
2238 $ hg ci -m "Modify, add, remove, rename"
2239 $ hg ci -m "Modify, add, remove, rename"
2239
2240
2240 Check the status template
2241 Check the status template
2241
2242
2242 $ cat <<EOF >> $HGRCPATH
2243 $ cat <<EOF >> $HGRCPATH
2243 > [extensions]
2244 > [extensions]
2244 > color=
2245 > color=
2245 > EOF
2246 > EOF
2246
2247
2247 $ hg log -T status -r 10
2248 $ hg log -T status -r 10
2248 changeset: 10:0f9759ec227a
2249 changeset: 10:0f9759ec227a
2249 tag: tip
2250 tag: tip
2250 user: test
2251 user: test
2251 date: Thu Jan 01 00:00:00 1970 +0000
2252 date: Thu Jan 01 00:00:00 1970 +0000
2252 summary: Modify, add, remove, rename
2253 summary: Modify, add, remove, rename
2253 files:
2254 files:
2254 M third
2255 M third
2255 A b
2256 A b
2256 A fifth
2257 A fifth
2257 R a
2258 R a
2258 R fourth
2259 R fourth
2259
2260
2260 $ hg log -T status -C -r 10
2261 $ hg log -T status -C -r 10
2261 changeset: 10:0f9759ec227a
2262 changeset: 10:0f9759ec227a
2262 tag: tip
2263 tag: tip
2263 user: test
2264 user: test
2264 date: Thu Jan 01 00:00:00 1970 +0000
2265 date: Thu Jan 01 00:00:00 1970 +0000
2265 summary: Modify, add, remove, rename
2266 summary: Modify, add, remove, rename
2266 files:
2267 files:
2267 M third
2268 M third
2268 A b
2269 A b
2269 A fifth
2270 A fifth
2270 fourth
2271 fourth
2271 R a
2272 R a
2272 R fourth
2273 R fourth
2273
2274
2274 $ hg log -T status -C -r 10 -v
2275 $ hg log -T status -C -r 10 -v
2275 changeset: 10:0f9759ec227a
2276 changeset: 10:0f9759ec227a
2276 tag: tip
2277 tag: tip
2277 user: test
2278 user: test
2278 date: Thu Jan 01 00:00:00 1970 +0000
2279 date: Thu Jan 01 00:00:00 1970 +0000
2279 description:
2280 description:
2280 Modify, add, remove, rename
2281 Modify, add, remove, rename
2281
2282
2282 files:
2283 files:
2283 M third
2284 M third
2284 A b
2285 A b
2285 A fifth
2286 A fifth
2286 fourth
2287 fourth
2287 R a
2288 R a
2288 R fourth
2289 R fourth
2289
2290
2290 $ hg log -T status -C -r 10 --debug
2291 $ hg log -T status -C -r 10 --debug
2291 changeset: 10:0f9759ec227a4859c2014a345cd8a859022b7c6c
2292 changeset: 10:0f9759ec227a4859c2014a345cd8a859022b7c6c
2292 tag: tip
2293 tag: tip
2293 phase: secret
2294 phase: secret
2294 parent: 9:bf9dfba36635106d6a73ccc01e28b762da60e066
2295 parent: 9:bf9dfba36635106d6a73ccc01e28b762da60e066
2295 parent: -1:0000000000000000000000000000000000000000
2296 parent: -1:0000000000000000000000000000000000000000
2296 manifest: 8:89dd546f2de0a9d6d664f58d86097eb97baba567
2297 manifest: 8:89dd546f2de0a9d6d664f58d86097eb97baba567
2297 user: test
2298 user: test
2298 date: Thu Jan 01 00:00:00 1970 +0000
2299 date: Thu Jan 01 00:00:00 1970 +0000
2299 extra: branch=default
2300 extra: branch=default
2300 description:
2301 description:
2301 Modify, add, remove, rename
2302 Modify, add, remove, rename
2302
2303
2303 files:
2304 files:
2304 M third
2305 M third
2305 A b
2306 A b
2306 A fifth
2307 A fifth
2307 fourth
2308 fourth
2308 R a
2309 R a
2309 R fourth
2310 R fourth
2310
2311
2311 $ hg log -T status -C -r 10 --quiet
2312 $ hg log -T status -C -r 10 --quiet
2312 10:0f9759ec227a
2313 10:0f9759ec227a
2313 $ hg --color=debug log -T status -r 10
2314 $ hg --color=debug log -T status -r 10
2314 [log.changeset changeset.secret|changeset: 10:0f9759ec227a]
2315 [log.changeset changeset.secret|changeset: 10:0f9759ec227a]
2315 [log.tag|tag: tip]
2316 [log.tag|tag: tip]
2316 [log.user|user: test]
2317 [log.user|user: test]
2317 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
2318 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
2318 [log.summary|summary: Modify, add, remove, rename]
2319 [log.summary|summary: Modify, add, remove, rename]
2319 [ui.note log.files|files:]
2320 [ui.note log.files|files:]
2320 [status.modified|M third]
2321 [status.modified|M third]
2321 [status.added|A b]
2322 [status.added|A b]
2322 [status.added|A fifth]
2323 [status.added|A fifth]
2323 [status.removed|R a]
2324 [status.removed|R a]
2324 [status.removed|R fourth]
2325 [status.removed|R fourth]
2325
2326
2326 $ hg --color=debug log -T status -C -r 10
2327 $ hg --color=debug log -T status -C -r 10
2327 [log.changeset changeset.secret|changeset: 10:0f9759ec227a]
2328 [log.changeset changeset.secret|changeset: 10:0f9759ec227a]
2328 [log.tag|tag: tip]
2329 [log.tag|tag: tip]
2329 [log.user|user: test]
2330 [log.user|user: test]
2330 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
2331 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
2331 [log.summary|summary: Modify, add, remove, rename]
2332 [log.summary|summary: Modify, add, remove, rename]
2332 [ui.note log.files|files:]
2333 [ui.note log.files|files:]
2333 [status.modified|M third]
2334 [status.modified|M third]
2334 [status.added|A b]
2335 [status.added|A b]
2335 [status.added|A fifth]
2336 [status.added|A fifth]
2336 [status.copied| fourth]
2337 [status.copied| fourth]
2337 [status.removed|R a]
2338 [status.removed|R a]
2338 [status.removed|R fourth]
2339 [status.removed|R fourth]
2339
2340
2340 $ hg --color=debug log -T status -C -r 10 -v
2341 $ hg --color=debug log -T status -C -r 10 -v
2341 [log.changeset changeset.secret|changeset: 10:0f9759ec227a]
2342 [log.changeset changeset.secret|changeset: 10:0f9759ec227a]
2342 [log.tag|tag: tip]
2343 [log.tag|tag: tip]
2343 [log.user|user: test]
2344 [log.user|user: test]
2344 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
2345 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
2345 [ui.note log.description|description:]
2346 [ui.note log.description|description:]
2346 [ui.note log.description|Modify, add, remove, rename]
2347 [ui.note log.description|Modify, add, remove, rename]
2347
2348
2348 [ui.note log.files|files:]
2349 [ui.note log.files|files:]
2349 [status.modified|M third]
2350 [status.modified|M third]
2350 [status.added|A b]
2351 [status.added|A b]
2351 [status.added|A fifth]
2352 [status.added|A fifth]
2352 [status.copied| fourth]
2353 [status.copied| fourth]
2353 [status.removed|R a]
2354 [status.removed|R a]
2354 [status.removed|R fourth]
2355 [status.removed|R fourth]
2355
2356
2356 $ hg --color=debug log -T status -C -r 10 --debug
2357 $ hg --color=debug log -T status -C -r 10 --debug
2357 [log.changeset changeset.secret|changeset: 10:0f9759ec227a4859c2014a345cd8a859022b7c6c]
2358 [log.changeset changeset.secret|changeset: 10:0f9759ec227a4859c2014a345cd8a859022b7c6c]
2358 [log.tag|tag: tip]
2359 [log.tag|tag: tip]
2359 [log.phase|phase: secret]
2360 [log.phase|phase: secret]
2360 [log.parent changeset.secret|parent: 9:bf9dfba36635106d6a73ccc01e28b762da60e066]
2361 [log.parent changeset.secret|parent: 9:bf9dfba36635106d6a73ccc01e28b762da60e066]
2361 [log.parent changeset.public|parent: -1:0000000000000000000000000000000000000000]
2362 [log.parent changeset.public|parent: -1:0000000000000000000000000000000000000000]
2362 [ui.debug log.manifest|manifest: 8:89dd546f2de0a9d6d664f58d86097eb97baba567]
2363 [ui.debug log.manifest|manifest: 8:89dd546f2de0a9d6d664f58d86097eb97baba567]
2363 [log.user|user: test]
2364 [log.user|user: test]
2364 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
2365 [log.date|date: Thu Jan 01 00:00:00 1970 +0000]
2365 [ui.debug log.extra|extra: branch=default]
2366 [ui.debug log.extra|extra: branch=default]
2366 [ui.note log.description|description:]
2367 [ui.note log.description|description:]
2367 [ui.note log.description|Modify, add, remove, rename]
2368 [ui.note log.description|Modify, add, remove, rename]
2368
2369
2369 [ui.note log.files|files:]
2370 [ui.note log.files|files:]
2370 [status.modified|M third]
2371 [status.modified|M third]
2371 [status.added|A b]
2372 [status.added|A b]
2372 [status.added|A fifth]
2373 [status.added|A fifth]
2373 [status.copied| fourth]
2374 [status.copied| fourth]
2374 [status.removed|R a]
2375 [status.removed|R a]
2375 [status.removed|R fourth]
2376 [status.removed|R fourth]
2376
2377
2377 $ hg --color=debug log -T status -C -r 10 --quiet
2378 $ hg --color=debug log -T status -C -r 10 --quiet
2378 [log.node|10:0f9759ec227a]
2379 [log.node|10:0f9759ec227a]
2379
2380
2380 Check the bisect template
2381 Check the bisect template
2381
2382
2382 $ hg bisect -g 1
2383 $ hg bisect -g 1
2383 $ hg bisect -b 3 --noupdate
2384 $ hg bisect -b 3 --noupdate
2384 Testing changeset 2:97054abb4ab8 (2 changesets remaining, ~1 tests)
2385 Testing changeset 2:97054abb4ab8 (2 changesets remaining, ~1 tests)
2385 $ hg log -T bisect -r 0:4
2386 $ hg log -T bisect -r 0:4
2386 changeset: 0:1e4e1b8f71e0
2387 changeset: 0:1e4e1b8f71e0
2387 bisect: good (implicit)
2388 bisect: good (implicit)
2388 user: User Name <user@hostname>
2389 user: User Name <user@hostname>
2389 date: Mon Jan 12 13:46:40 1970 +0000
2390 date: Mon Jan 12 13:46:40 1970 +0000
2390 summary: line 1
2391 summary: line 1
2391
2392
2392 changeset: 1:b608e9d1a3f0
2393 changeset: 1:b608e9d1a3f0
2393 bisect: good
2394 bisect: good
2394 user: A. N. Other <other@place>
2395 user: A. N. Other <other@place>
2395 date: Tue Jan 13 17:33:20 1970 +0000
2396 date: Tue Jan 13 17:33:20 1970 +0000
2396 summary: other 1
2397 summary: other 1
2397
2398
2398 changeset: 2:97054abb4ab8
2399 changeset: 2:97054abb4ab8
2399 bisect: untested
2400 bisect: untested
2400 user: other@place
2401 user: other@place
2401 date: Wed Jan 14 21:20:00 1970 +0000
2402 date: Wed Jan 14 21:20:00 1970 +0000
2402 summary: no person
2403 summary: no person
2403
2404
2404 changeset: 3:10e46f2dcbf4
2405 changeset: 3:10e46f2dcbf4
2405 bisect: bad
2406 bisect: bad
2406 user: person
2407 user: person
2407 date: Fri Jan 16 01:06:40 1970 +0000
2408 date: Fri Jan 16 01:06:40 1970 +0000
2408 summary: no user, no domain
2409 summary: no user, no domain
2409
2410
2410 changeset: 4:bbe44766e73d
2411 changeset: 4:bbe44766e73d
2411 bisect: bad (implicit)
2412 bisect: bad (implicit)
2412 branch: foo
2413 branch: foo
2413 user: person
2414 user: person
2414 date: Sat Jan 17 04:53:20 1970 +0000
2415 date: Sat Jan 17 04:53:20 1970 +0000
2415 summary: new branch
2416 summary: new branch
2416
2417
2417 $ hg log --debug -T bisect -r 0:4
2418 $ hg log --debug -T bisect -r 0:4
2418 changeset: 0:1e4e1b8f71e05681d422154f5421e385fec3454f
2419 changeset: 0:1e4e1b8f71e05681d422154f5421e385fec3454f
2419 bisect: good (implicit)
2420 bisect: good (implicit)
2420 phase: public
2421 phase: public
2421 parent: -1:0000000000000000000000000000000000000000
2422 parent: -1:0000000000000000000000000000000000000000
2422 parent: -1:0000000000000000000000000000000000000000
2423 parent: -1:0000000000000000000000000000000000000000
2423 manifest: 0:a0c8bcbbb45c63b90b70ad007bf38961f64f2af0
2424 manifest: 0:a0c8bcbbb45c63b90b70ad007bf38961f64f2af0
2424 user: User Name <user@hostname>
2425 user: User Name <user@hostname>
2425 date: Mon Jan 12 13:46:40 1970 +0000
2426 date: Mon Jan 12 13:46:40 1970 +0000
2426 files+: a
2427 files+: a
2427 extra: branch=default
2428 extra: branch=default
2428 description:
2429 description:
2429 line 1
2430 line 1
2430 line 2
2431 line 2
2431
2432
2432
2433
2433 changeset: 1:b608e9d1a3f0273ccf70fb85fd6866b3482bf965
2434 changeset: 1:b608e9d1a3f0273ccf70fb85fd6866b3482bf965
2434 bisect: good
2435 bisect: good
2435 phase: public
2436 phase: public
2436 parent: 0:1e4e1b8f71e05681d422154f5421e385fec3454f
2437 parent: 0:1e4e1b8f71e05681d422154f5421e385fec3454f
2437 parent: -1:0000000000000000000000000000000000000000
2438 parent: -1:0000000000000000000000000000000000000000
2438 manifest: 1:4e8d705b1e53e3f9375e0e60dc7b525d8211fe55
2439 manifest: 1:4e8d705b1e53e3f9375e0e60dc7b525d8211fe55
2439 user: A. N. Other <other@place>
2440 user: A. N. Other <other@place>
2440 date: Tue Jan 13 17:33:20 1970 +0000
2441 date: Tue Jan 13 17:33:20 1970 +0000
2441 files+: b
2442 files+: b
2442 extra: branch=default
2443 extra: branch=default
2443 description:
2444 description:
2444 other 1
2445 other 1
2445 other 2
2446 other 2
2446
2447
2447 other 3
2448 other 3
2448
2449
2449
2450
2450 changeset: 2:97054abb4ab824450e9164180baf491ae0078465
2451 changeset: 2:97054abb4ab824450e9164180baf491ae0078465
2451 bisect: untested
2452 bisect: untested
2452 phase: public
2453 phase: public
2453 parent: 1:b608e9d1a3f0273ccf70fb85fd6866b3482bf965
2454 parent: 1:b608e9d1a3f0273ccf70fb85fd6866b3482bf965
2454 parent: -1:0000000000000000000000000000000000000000
2455 parent: -1:0000000000000000000000000000000000000000
2455 manifest: 2:6e0e82995c35d0d57a52aca8da4e56139e06b4b1
2456 manifest: 2:6e0e82995c35d0d57a52aca8da4e56139e06b4b1
2456 user: other@place
2457 user: other@place
2457 date: Wed Jan 14 21:20:00 1970 +0000
2458 date: Wed Jan 14 21:20:00 1970 +0000
2458 files+: c
2459 files+: c
2459 extra: branch=default
2460 extra: branch=default
2460 description:
2461 description:
2461 no person
2462 no person
2462
2463
2463
2464
2464 changeset: 3:10e46f2dcbf4823578cf180f33ecf0b957964c47
2465 changeset: 3:10e46f2dcbf4823578cf180f33ecf0b957964c47
2465 bisect: bad
2466 bisect: bad
2466 phase: public
2467 phase: public
2467 parent: 2:97054abb4ab824450e9164180baf491ae0078465
2468 parent: 2:97054abb4ab824450e9164180baf491ae0078465
2468 parent: -1:0000000000000000000000000000000000000000
2469 parent: -1:0000000000000000000000000000000000000000
2469 manifest: 3:cb5a1327723bada42f117e4c55a303246eaf9ccc
2470 manifest: 3:cb5a1327723bada42f117e4c55a303246eaf9ccc
2470 user: person
2471 user: person
2471 date: Fri Jan 16 01:06:40 1970 +0000
2472 date: Fri Jan 16 01:06:40 1970 +0000
2472 files: c
2473 files: c
2473 extra: branch=default
2474 extra: branch=default
2474 description:
2475 description:
2475 no user, no domain
2476 no user, no domain
2476
2477
2477
2478
2478 changeset: 4:bbe44766e73d5f11ed2177f1838de10c53ef3e74
2479 changeset: 4:bbe44766e73d5f11ed2177f1838de10c53ef3e74
2479 bisect: bad (implicit)
2480 bisect: bad (implicit)
2480 branch: foo
2481 branch: foo
2481 phase: draft
2482 phase: draft
2482 parent: 3:10e46f2dcbf4823578cf180f33ecf0b957964c47
2483 parent: 3:10e46f2dcbf4823578cf180f33ecf0b957964c47
2483 parent: -1:0000000000000000000000000000000000000000
2484 parent: -1:0000000000000000000000000000000000000000
2484 manifest: 3:cb5a1327723bada42f117e4c55a303246eaf9ccc
2485 manifest: 3:cb5a1327723bada42f117e4c55a303246eaf9ccc
2485 user: person
2486 user: person
2486 date: Sat Jan 17 04:53:20 1970 +0000
2487 date: Sat Jan 17 04:53:20 1970 +0000
2487 extra: branch=foo
2488 extra: branch=foo
2488 description:
2489 description:
2489 new branch
2490 new branch
2490
2491
2491
2492
2492 $ hg log -v -T bisect -r 0:4
2493 $ hg log -v -T bisect -r 0:4
2493 changeset: 0:1e4e1b8f71e0
2494 changeset: 0:1e4e1b8f71e0
2494 bisect: good (implicit)
2495 bisect: good (implicit)
2495 user: User Name <user@hostname>
2496 user: User Name <user@hostname>
2496 date: Mon Jan 12 13:46:40 1970 +0000
2497 date: Mon Jan 12 13:46:40 1970 +0000
2497 files: a
2498 files: a
2498 description:
2499 description:
2499 line 1
2500 line 1
2500 line 2
2501 line 2
2501
2502
2502
2503
2503 changeset: 1:b608e9d1a3f0
2504 changeset: 1:b608e9d1a3f0
2504 bisect: good
2505 bisect: good
2505 user: A. N. Other <other@place>
2506 user: A. N. Other <other@place>
2506 date: Tue Jan 13 17:33:20 1970 +0000
2507 date: Tue Jan 13 17:33:20 1970 +0000
2507 files: b
2508 files: b
2508 description:
2509 description:
2509 other 1
2510 other 1
2510 other 2
2511 other 2
2511
2512
2512 other 3
2513 other 3
2513
2514
2514
2515
2515 changeset: 2:97054abb4ab8
2516 changeset: 2:97054abb4ab8
2516 bisect: untested
2517 bisect: untested
2517 user: other@place
2518 user: other@place
2518 date: Wed Jan 14 21:20:00 1970 +0000
2519 date: Wed Jan 14 21:20:00 1970 +0000
2519 files: c
2520 files: c
2520 description:
2521 description:
2521 no person
2522 no person
2522
2523
2523
2524
2524 changeset: 3:10e46f2dcbf4
2525 changeset: 3:10e46f2dcbf4
2525 bisect: bad
2526 bisect: bad
2526 user: person
2527 user: person
2527 date: Fri Jan 16 01:06:40 1970 +0000
2528 date: Fri Jan 16 01:06:40 1970 +0000
2528 files: c
2529 files: c
2529 description:
2530 description:
2530 no user, no domain
2531 no user, no domain
2531
2532
2532
2533
2533 changeset: 4:bbe44766e73d
2534 changeset: 4:bbe44766e73d
2534 bisect: bad (implicit)
2535 bisect: bad (implicit)
2535 branch: foo
2536 branch: foo
2536 user: person
2537 user: person
2537 date: Sat Jan 17 04:53:20 1970 +0000
2538 date: Sat Jan 17 04:53:20 1970 +0000
2538 description:
2539 description:
2539 new branch
2540 new branch
2540
2541
2541
2542
2542 $ hg --color=debug log -T bisect -r 0:4
2543 $ hg --color=debug log -T bisect -r 0:4
2543 [log.changeset changeset.public|changeset: 0:1e4e1b8f71e0]
2544 [log.changeset changeset.public|changeset: 0:1e4e1b8f71e0]
2544 [log.bisect bisect.good|bisect: good (implicit)]
2545 [log.bisect bisect.good|bisect: good (implicit)]
2545 [log.user|user: User Name <user@hostname>]
2546 [log.user|user: User Name <user@hostname>]
2546 [log.date|date: Mon Jan 12 13:46:40 1970 +0000]
2547 [log.date|date: Mon Jan 12 13:46:40 1970 +0000]
2547 [log.summary|summary: line 1]
2548 [log.summary|summary: line 1]
2548
2549
2549 [log.changeset changeset.public|changeset: 1:b608e9d1a3f0]
2550 [log.changeset changeset.public|changeset: 1:b608e9d1a3f0]
2550 [log.bisect bisect.good|bisect: good]
2551 [log.bisect bisect.good|bisect: good]
2551 [log.user|user: A. N. Other <other@place>]
2552 [log.user|user: A. N. Other <other@place>]
2552 [log.date|date: Tue Jan 13 17:33:20 1970 +0000]
2553 [log.date|date: Tue Jan 13 17:33:20 1970 +0000]
2553 [log.summary|summary: other 1]
2554 [log.summary|summary: other 1]
2554
2555
2555 [log.changeset changeset.public|changeset: 2:97054abb4ab8]
2556 [log.changeset changeset.public|changeset: 2:97054abb4ab8]
2556 [log.bisect bisect.untested|bisect: untested]
2557 [log.bisect bisect.untested|bisect: untested]
2557 [log.user|user: other@place]
2558 [log.user|user: other@place]
2558 [log.date|date: Wed Jan 14 21:20:00 1970 +0000]
2559 [log.date|date: Wed Jan 14 21:20:00 1970 +0000]
2559 [log.summary|summary: no person]
2560 [log.summary|summary: no person]
2560
2561
2561 [log.changeset changeset.public|changeset: 3:10e46f2dcbf4]
2562 [log.changeset changeset.public|changeset: 3:10e46f2dcbf4]
2562 [log.bisect bisect.bad|bisect: bad]
2563 [log.bisect bisect.bad|bisect: bad]
2563 [log.user|user: person]
2564 [log.user|user: person]
2564 [log.date|date: Fri Jan 16 01:06:40 1970 +0000]
2565 [log.date|date: Fri Jan 16 01:06:40 1970 +0000]
2565 [log.summary|summary: no user, no domain]
2566 [log.summary|summary: no user, no domain]
2566
2567
2567 [log.changeset changeset.draft|changeset: 4:bbe44766e73d]
2568 [log.changeset changeset.draft|changeset: 4:bbe44766e73d]
2568 [log.bisect bisect.bad|bisect: bad (implicit)]
2569 [log.bisect bisect.bad|bisect: bad (implicit)]
2569 [log.branch|branch: foo]
2570 [log.branch|branch: foo]
2570 [log.user|user: person]
2571 [log.user|user: person]
2571 [log.date|date: Sat Jan 17 04:53:20 1970 +0000]
2572 [log.date|date: Sat Jan 17 04:53:20 1970 +0000]
2572 [log.summary|summary: new branch]
2573 [log.summary|summary: new branch]
2573
2574
2574 $ hg --color=debug log --debug -T bisect -r 0:4
2575 $ hg --color=debug log --debug -T bisect -r 0:4
2575 [log.changeset changeset.public|changeset: 0:1e4e1b8f71e05681d422154f5421e385fec3454f]
2576 [log.changeset changeset.public|changeset: 0:1e4e1b8f71e05681d422154f5421e385fec3454f]
2576 [log.bisect bisect.good|bisect: good (implicit)]
2577 [log.bisect bisect.good|bisect: good (implicit)]
2577 [log.phase|phase: public]
2578 [log.phase|phase: public]
2578 [log.parent changeset.public|parent: -1:0000000000000000000000000000000000000000]
2579 [log.parent changeset.public|parent: -1:0000000000000000000000000000000000000000]
2579 [log.parent changeset.public|parent: -1:0000000000000000000000000000000000000000]
2580 [log.parent changeset.public|parent: -1:0000000000000000000000000000000000000000]
2580 [ui.debug log.manifest|manifest: 0:a0c8bcbbb45c63b90b70ad007bf38961f64f2af0]
2581 [ui.debug log.manifest|manifest: 0:a0c8bcbbb45c63b90b70ad007bf38961f64f2af0]
2581 [log.user|user: User Name <user@hostname>]
2582 [log.user|user: User Name <user@hostname>]
2582 [log.date|date: Mon Jan 12 13:46:40 1970 +0000]
2583 [log.date|date: Mon Jan 12 13:46:40 1970 +0000]
2583 [ui.debug log.files|files+: a]
2584 [ui.debug log.files|files+: a]
2584 [ui.debug log.extra|extra: branch=default]
2585 [ui.debug log.extra|extra: branch=default]
2585 [ui.note log.description|description:]
2586 [ui.note log.description|description:]
2586 [ui.note log.description|line 1
2587 [ui.note log.description|line 1
2587 line 2]
2588 line 2]
2588
2589
2589
2590
2590 [log.changeset changeset.public|changeset: 1:b608e9d1a3f0273ccf70fb85fd6866b3482bf965]
2591 [log.changeset changeset.public|changeset: 1:b608e9d1a3f0273ccf70fb85fd6866b3482bf965]
2591 [log.bisect bisect.good|bisect: good]
2592 [log.bisect bisect.good|bisect: good]
2592 [log.phase|phase: public]
2593 [log.phase|phase: public]
2593 [log.parent changeset.public|parent: 0:1e4e1b8f71e05681d422154f5421e385fec3454f]
2594 [log.parent changeset.public|parent: 0:1e4e1b8f71e05681d422154f5421e385fec3454f]
2594 [log.parent changeset.public|parent: -1:0000000000000000000000000000000000000000]
2595 [log.parent changeset.public|parent: -1:0000000000000000000000000000000000000000]
2595 [ui.debug log.manifest|manifest: 1:4e8d705b1e53e3f9375e0e60dc7b525d8211fe55]
2596 [ui.debug log.manifest|manifest: 1:4e8d705b1e53e3f9375e0e60dc7b525d8211fe55]
2596 [log.user|user: A. N. Other <other@place>]
2597 [log.user|user: A. N. Other <other@place>]
2597 [log.date|date: Tue Jan 13 17:33:20 1970 +0000]
2598 [log.date|date: Tue Jan 13 17:33:20 1970 +0000]
2598 [ui.debug log.files|files+: b]
2599 [ui.debug log.files|files+: b]
2599 [ui.debug log.extra|extra: branch=default]
2600 [ui.debug log.extra|extra: branch=default]
2600 [ui.note log.description|description:]
2601 [ui.note log.description|description:]
2601 [ui.note log.description|other 1
2602 [ui.note log.description|other 1
2602 other 2
2603 other 2
2603
2604
2604 other 3]
2605 other 3]
2605
2606
2606
2607
2607 [log.changeset changeset.public|changeset: 2:97054abb4ab824450e9164180baf491ae0078465]
2608 [log.changeset changeset.public|changeset: 2:97054abb4ab824450e9164180baf491ae0078465]
2608 [log.bisect bisect.untested|bisect: untested]
2609 [log.bisect bisect.untested|bisect: untested]
2609 [log.phase|phase: public]
2610 [log.phase|phase: public]
2610 [log.parent changeset.public|parent: 1:b608e9d1a3f0273ccf70fb85fd6866b3482bf965]
2611 [log.parent changeset.public|parent: 1:b608e9d1a3f0273ccf70fb85fd6866b3482bf965]
2611 [log.parent changeset.public|parent: -1:0000000000000000000000000000000000000000]
2612 [log.parent changeset.public|parent: -1:0000000000000000000000000000000000000000]
2612 [ui.debug log.manifest|manifest: 2:6e0e82995c35d0d57a52aca8da4e56139e06b4b1]
2613 [ui.debug log.manifest|manifest: 2:6e0e82995c35d0d57a52aca8da4e56139e06b4b1]
2613 [log.user|user: other@place]
2614 [log.user|user: other@place]
2614 [log.date|date: Wed Jan 14 21:20:00 1970 +0000]
2615 [log.date|date: Wed Jan 14 21:20:00 1970 +0000]
2615 [ui.debug log.files|files+: c]
2616 [ui.debug log.files|files+: c]
2616 [ui.debug log.extra|extra: branch=default]
2617 [ui.debug log.extra|extra: branch=default]
2617 [ui.note log.description|description:]
2618 [ui.note log.description|description:]
2618 [ui.note log.description|no person]
2619 [ui.note log.description|no person]
2619
2620
2620
2621
2621 [log.changeset changeset.public|changeset: 3:10e46f2dcbf4823578cf180f33ecf0b957964c47]
2622 [log.changeset changeset.public|changeset: 3:10e46f2dcbf4823578cf180f33ecf0b957964c47]
2622 [log.bisect bisect.bad|bisect: bad]
2623 [log.bisect bisect.bad|bisect: bad]
2623 [log.phase|phase: public]
2624 [log.phase|phase: public]
2624 [log.parent changeset.public|parent: 2:97054abb4ab824450e9164180baf491ae0078465]
2625 [log.parent changeset.public|parent: 2:97054abb4ab824450e9164180baf491ae0078465]
2625 [log.parent changeset.public|parent: -1:0000000000000000000000000000000000000000]
2626 [log.parent changeset.public|parent: -1:0000000000000000000000000000000000000000]
2626 [ui.debug log.manifest|manifest: 3:cb5a1327723bada42f117e4c55a303246eaf9ccc]
2627 [ui.debug log.manifest|manifest: 3:cb5a1327723bada42f117e4c55a303246eaf9ccc]
2627 [log.user|user: person]
2628 [log.user|user: person]
2628 [log.date|date: Fri Jan 16 01:06:40 1970 +0000]
2629 [log.date|date: Fri Jan 16 01:06:40 1970 +0000]
2629 [ui.debug log.files|files: c]
2630 [ui.debug log.files|files: c]
2630 [ui.debug log.extra|extra: branch=default]
2631 [ui.debug log.extra|extra: branch=default]
2631 [ui.note log.description|description:]
2632 [ui.note log.description|description:]
2632 [ui.note log.description|no user, no domain]
2633 [ui.note log.description|no user, no domain]
2633
2634
2634
2635
2635 [log.changeset changeset.draft|changeset: 4:bbe44766e73d5f11ed2177f1838de10c53ef3e74]
2636 [log.changeset changeset.draft|changeset: 4:bbe44766e73d5f11ed2177f1838de10c53ef3e74]
2636 [log.bisect bisect.bad|bisect: bad (implicit)]
2637 [log.bisect bisect.bad|bisect: bad (implicit)]
2637 [log.branch|branch: foo]
2638 [log.branch|branch: foo]
2638 [log.phase|phase: draft]
2639 [log.phase|phase: draft]
2639 [log.parent changeset.public|parent: 3:10e46f2dcbf4823578cf180f33ecf0b957964c47]
2640 [log.parent changeset.public|parent: 3:10e46f2dcbf4823578cf180f33ecf0b957964c47]
2640 [log.parent changeset.public|parent: -1:0000000000000000000000000000000000000000]
2641 [log.parent changeset.public|parent: -1:0000000000000000000000000000000000000000]
2641 [ui.debug log.manifest|manifest: 3:cb5a1327723bada42f117e4c55a303246eaf9ccc]
2642 [ui.debug log.manifest|manifest: 3:cb5a1327723bada42f117e4c55a303246eaf9ccc]
2642 [log.user|user: person]
2643 [log.user|user: person]
2643 [log.date|date: Sat Jan 17 04:53:20 1970 +0000]
2644 [log.date|date: Sat Jan 17 04:53:20 1970 +0000]
2644 [ui.debug log.extra|extra: branch=foo]
2645 [ui.debug log.extra|extra: branch=foo]
2645 [ui.note log.description|description:]
2646 [ui.note log.description|description:]
2646 [ui.note log.description|new branch]
2647 [ui.note log.description|new branch]
2647
2648
2648
2649
2649 $ hg --color=debug log -v -T bisect -r 0:4
2650 $ hg --color=debug log -v -T bisect -r 0:4
2650 [log.changeset changeset.public|changeset: 0:1e4e1b8f71e0]
2651 [log.changeset changeset.public|changeset: 0:1e4e1b8f71e0]
2651 [log.bisect bisect.good|bisect: good (implicit)]
2652 [log.bisect bisect.good|bisect: good (implicit)]
2652 [log.user|user: User Name <user@hostname>]
2653 [log.user|user: User Name <user@hostname>]
2653 [log.date|date: Mon Jan 12 13:46:40 1970 +0000]
2654 [log.date|date: Mon Jan 12 13:46:40 1970 +0000]
2654 [ui.note log.files|files: a]
2655 [ui.note log.files|files: a]
2655 [ui.note log.description|description:]
2656 [ui.note log.description|description:]
2656 [ui.note log.description|line 1
2657 [ui.note log.description|line 1
2657 line 2]
2658 line 2]
2658
2659
2659
2660
2660 [log.changeset changeset.public|changeset: 1:b608e9d1a3f0]
2661 [log.changeset changeset.public|changeset: 1:b608e9d1a3f0]
2661 [log.bisect bisect.good|bisect: good]
2662 [log.bisect bisect.good|bisect: good]
2662 [log.user|user: A. N. Other <other@place>]
2663 [log.user|user: A. N. Other <other@place>]
2663 [log.date|date: Tue Jan 13 17:33:20 1970 +0000]
2664 [log.date|date: Tue Jan 13 17:33:20 1970 +0000]
2664 [ui.note log.files|files: b]
2665 [ui.note log.files|files: b]
2665 [ui.note log.description|description:]
2666 [ui.note log.description|description:]
2666 [ui.note log.description|other 1
2667 [ui.note log.description|other 1
2667 other 2
2668 other 2
2668
2669
2669 other 3]
2670 other 3]
2670
2671
2671
2672
2672 [log.changeset changeset.public|changeset: 2:97054abb4ab8]
2673 [log.changeset changeset.public|changeset: 2:97054abb4ab8]
2673 [log.bisect bisect.untested|bisect: untested]
2674 [log.bisect bisect.untested|bisect: untested]
2674 [log.user|user: other@place]
2675 [log.user|user: other@place]
2675 [log.date|date: Wed Jan 14 21:20:00 1970 +0000]
2676 [log.date|date: Wed Jan 14 21:20:00 1970 +0000]
2676 [ui.note log.files|files: c]
2677 [ui.note log.files|files: c]
2677 [ui.note log.description|description:]
2678 [ui.note log.description|description:]
2678 [ui.note log.description|no person]
2679 [ui.note log.description|no person]
2679
2680
2680
2681
2681 [log.changeset changeset.public|changeset: 3:10e46f2dcbf4]
2682 [log.changeset changeset.public|changeset: 3:10e46f2dcbf4]
2682 [log.bisect bisect.bad|bisect: bad]
2683 [log.bisect bisect.bad|bisect: bad]
2683 [log.user|user: person]
2684 [log.user|user: person]
2684 [log.date|date: Fri Jan 16 01:06:40 1970 +0000]
2685 [log.date|date: Fri Jan 16 01:06:40 1970 +0000]
2685 [ui.note log.files|files: c]
2686 [ui.note log.files|files: c]
2686 [ui.note log.description|description:]
2687 [ui.note log.description|description:]
2687 [ui.note log.description|no user, no domain]
2688 [ui.note log.description|no user, no domain]
2688
2689
2689
2690
2690 [log.changeset changeset.draft|changeset: 4:bbe44766e73d]
2691 [log.changeset changeset.draft|changeset: 4:bbe44766e73d]
2691 [log.bisect bisect.bad|bisect: bad (implicit)]
2692 [log.bisect bisect.bad|bisect: bad (implicit)]
2692 [log.branch|branch: foo]
2693 [log.branch|branch: foo]
2693 [log.user|user: person]
2694 [log.user|user: person]
2694 [log.date|date: Sat Jan 17 04:53:20 1970 +0000]
2695 [log.date|date: Sat Jan 17 04:53:20 1970 +0000]
2695 [ui.note log.description|description:]
2696 [ui.note log.description|description:]
2696 [ui.note log.description|new branch]
2697 [ui.note log.description|new branch]
2697
2698
2698
2699
2699 $ hg bisect --reset
2700 $ hg bisect --reset
2700
2701
2701 Error on syntax:
2702 Error on syntax:
2702
2703
2703 $ echo 'x = "f' >> t
2704 $ echo 'x = "f' >> t
2704 $ hg log
2705 $ hg log
2705 hg: parse error at t:3: unmatched quotes
2706 hg: parse error at t:3: unmatched quotes
2706 [255]
2707 [255]
2707
2708
2708 $ hg log -T '{date'
2709 $ hg log -T '{date'
2709 hg: parse error at 1: unterminated template expansion
2710 hg: parse error at 1: unterminated template expansion
2710 [255]
2711 [255]
2711
2712
2712 Behind the scenes, this will throw TypeError
2713 Behind the scenes, this will throw TypeError
2713
2714
2714 $ hg log -l 3 --template '{date|obfuscate}\n'
2715 $ hg log -l 3 --template '{date|obfuscate}\n'
2715 abort: template filter 'obfuscate' is not compatible with keyword 'date'
2716 abort: template filter 'obfuscate' is not compatible with keyword 'date'
2716 [255]
2717 [255]
2717
2718
2718 Behind the scenes, this will throw a ValueError
2719 Behind the scenes, this will throw a ValueError
2719
2720
2720 $ hg log -l 3 --template 'line: {desc|shortdate}\n'
2721 $ hg log -l 3 --template 'line: {desc|shortdate}\n'
2721 abort: template filter 'shortdate' is not compatible with keyword 'desc'
2722 abort: template filter 'shortdate' is not compatible with keyword 'desc'
2722 [255]
2723 [255]
2723
2724
2724 Behind the scenes, this will throw AttributeError
2725 Behind the scenes, this will throw AttributeError
2725
2726
2726 $ hg log -l 3 --template 'line: {date|escape}\n'
2727 $ hg log -l 3 --template 'line: {date|escape}\n'
2727 abort: template filter 'escape' is not compatible with keyword 'date'
2728 abort: template filter 'escape' is not compatible with keyword 'date'
2728 [255]
2729 [255]
2729
2730
2730 $ hg log -l 3 --template 'line: {extras|localdate}\n'
2731 $ hg log -l 3 --template 'line: {extras|localdate}\n'
2731 hg: parse error: localdate expects a date information
2732 hg: parse error: localdate expects a date information
2732 [255]
2733 [255]
2733
2734
2734 Behind the scenes, this will throw ValueError
2735 Behind the scenes, this will throw ValueError
2735
2736
2736 $ hg tip --template '{author|email|date}\n'
2737 $ hg tip --template '{author|email|date}\n'
2737 hg: parse error: date expects a date information
2738 hg: parse error: date expects a date information
2738 [255]
2739 [255]
2739
2740
2740 $ hg tip -T '{author|email|shortdate}\n'
2741 $ hg tip -T '{author|email|shortdate}\n'
2741 abort: template filter 'shortdate' is not compatible with keyword 'author'
2742 abort: template filter 'shortdate' is not compatible with keyword 'author'
2742 [255]
2743 [255]
2743
2744
2744 $ hg tip -T '{get(extras, "branch")|shortdate}\n'
2745 $ hg tip -T '{get(extras, "branch")|shortdate}\n'
2745 abort: incompatible use of template filter 'shortdate'
2746 abort: incompatible use of template filter 'shortdate'
2746 [255]
2747 [255]
2747
2748
2748 Error in nested template:
2749 Error in nested template:
2749
2750
2750 $ hg log -T '{"date'
2751 $ hg log -T '{"date'
2751 hg: parse error at 2: unterminated string
2752 hg: parse error at 2: unterminated string
2752 [255]
2753 [255]
2753
2754
2754 $ hg log -T '{"foo{date|?}"}'
2755 $ hg log -T '{"foo{date|?}"}'
2755 hg: parse error at 11: syntax error
2756 hg: parse error at 11: syntax error
2756 [255]
2757 [255]
2757
2758
2758 Thrown an error if a template function doesn't exist
2759 Thrown an error if a template function doesn't exist
2759
2760
2760 $ hg tip --template '{foo()}\n'
2761 $ hg tip --template '{foo()}\n'
2761 hg: parse error: unknown function 'foo'
2762 hg: parse error: unknown function 'foo'
2762 [255]
2763 [255]
2763
2764
2764 Pass generator object created by template function to filter
2765 Pass generator object created by template function to filter
2765
2766
2766 $ hg log -l 1 --template '{if(author, author)|user}\n'
2767 $ hg log -l 1 --template '{if(author, author)|user}\n'
2767 test
2768 test
2768
2769
2769 Test index keyword:
2770 Test index keyword:
2770
2771
2771 $ hg log -l 2 -T '{index + 10}{files % " {index}:{file}"}\n'
2772 $ hg log -l 2 -T '{index + 10}{files % " {index}:{file}"}\n'
2772 10 0:a 1:b 2:fifth 3:fourth 4:third
2773 10 0:a 1:b 2:fifth 3:fourth 4:third
2773 11 0:a
2774 11 0:a
2774
2775
2775 $ hg branches -T '{index} {branch}\n'
2776 $ hg branches -T '{index} {branch}\n'
2776 0 default
2777 0 default
2777 1 foo
2778 1 foo
2778
2779
2779 Test diff function:
2780 Test diff function:
2780
2781
2781 $ hg diff -c 8
2782 $ hg diff -c 8
2782 diff -r 29114dbae42b -r 95c24699272e fourth
2783 diff -r 29114dbae42b -r 95c24699272e fourth
2783 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2784 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2784 +++ b/fourth Wed Jan 01 10:01:00 2020 +0000
2785 +++ b/fourth Wed Jan 01 10:01:00 2020 +0000
2785 @@ -0,0 +1,1 @@
2786 @@ -0,0 +1,1 @@
2786 +second
2787 +second
2787 diff -r 29114dbae42b -r 95c24699272e second
2788 diff -r 29114dbae42b -r 95c24699272e second
2788 --- a/second Mon Jan 12 13:46:40 1970 +0000
2789 --- a/second Mon Jan 12 13:46:40 1970 +0000
2789 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2790 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2790 @@ -1,1 +0,0 @@
2791 @@ -1,1 +0,0 @@
2791 -second
2792 -second
2792 diff -r 29114dbae42b -r 95c24699272e third
2793 diff -r 29114dbae42b -r 95c24699272e third
2793 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2794 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2794 +++ b/third Wed Jan 01 10:01:00 2020 +0000
2795 +++ b/third Wed Jan 01 10:01:00 2020 +0000
2795 @@ -0,0 +1,1 @@
2796 @@ -0,0 +1,1 @@
2796 +third
2797 +third
2797
2798
2798 $ hg log -r 8 -T "{diff()}"
2799 $ hg log -r 8 -T "{diff()}"
2799 diff -r 29114dbae42b -r 95c24699272e fourth
2800 diff -r 29114dbae42b -r 95c24699272e fourth
2800 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2801 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2801 +++ b/fourth Wed Jan 01 10:01:00 2020 +0000
2802 +++ b/fourth Wed Jan 01 10:01:00 2020 +0000
2802 @@ -0,0 +1,1 @@
2803 @@ -0,0 +1,1 @@
2803 +second
2804 +second
2804 diff -r 29114dbae42b -r 95c24699272e second
2805 diff -r 29114dbae42b -r 95c24699272e second
2805 --- a/second Mon Jan 12 13:46:40 1970 +0000
2806 --- a/second Mon Jan 12 13:46:40 1970 +0000
2806 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2807 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2807 @@ -1,1 +0,0 @@
2808 @@ -1,1 +0,0 @@
2808 -second
2809 -second
2809 diff -r 29114dbae42b -r 95c24699272e third
2810 diff -r 29114dbae42b -r 95c24699272e third
2810 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2811 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2811 +++ b/third Wed Jan 01 10:01:00 2020 +0000
2812 +++ b/third Wed Jan 01 10:01:00 2020 +0000
2812 @@ -0,0 +1,1 @@
2813 @@ -0,0 +1,1 @@
2813 +third
2814 +third
2814
2815
2815 $ hg log -r 8 -T "{diff('glob:f*')}"
2816 $ hg log -r 8 -T "{diff('glob:f*')}"
2816 diff -r 29114dbae42b -r 95c24699272e fourth
2817 diff -r 29114dbae42b -r 95c24699272e fourth
2817 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2818 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2818 +++ b/fourth Wed Jan 01 10:01:00 2020 +0000
2819 +++ b/fourth Wed Jan 01 10:01:00 2020 +0000
2819 @@ -0,0 +1,1 @@
2820 @@ -0,0 +1,1 @@
2820 +second
2821 +second
2821
2822
2822 $ hg log -r 8 -T "{diff('', 'glob:f*')}"
2823 $ hg log -r 8 -T "{diff('', 'glob:f*')}"
2823 diff -r 29114dbae42b -r 95c24699272e second
2824 diff -r 29114dbae42b -r 95c24699272e second
2824 --- a/second Mon Jan 12 13:46:40 1970 +0000
2825 --- a/second Mon Jan 12 13:46:40 1970 +0000
2825 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2826 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2826 @@ -1,1 +0,0 @@
2827 @@ -1,1 +0,0 @@
2827 -second
2828 -second
2828 diff -r 29114dbae42b -r 95c24699272e third
2829 diff -r 29114dbae42b -r 95c24699272e third
2829 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2830 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2830 +++ b/third Wed Jan 01 10:01:00 2020 +0000
2831 +++ b/third Wed Jan 01 10:01:00 2020 +0000
2831 @@ -0,0 +1,1 @@
2832 @@ -0,0 +1,1 @@
2832 +third
2833 +third
2833
2834
2834 $ hg log -r 8 -T "{diff('FOURTH'|lower)}"
2835 $ hg log -r 8 -T "{diff('FOURTH'|lower)}"
2835 diff -r 29114dbae42b -r 95c24699272e fourth
2836 diff -r 29114dbae42b -r 95c24699272e fourth
2836 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2837 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2837 +++ b/fourth Wed Jan 01 10:01:00 2020 +0000
2838 +++ b/fourth Wed Jan 01 10:01:00 2020 +0000
2838 @@ -0,0 +1,1 @@
2839 @@ -0,0 +1,1 @@
2839 +second
2840 +second
2840
2841
2841 $ cd ..
2842 $ cd ..
2842
2843
2843
2844
2844 latesttag:
2845 latesttag:
2845
2846
2846 $ hg init latesttag
2847 $ hg init latesttag
2847 $ cd latesttag
2848 $ cd latesttag
2848
2849
2849 $ echo a > file
2850 $ echo a > file
2850 $ hg ci -Am a -d '0 0'
2851 $ hg ci -Am a -d '0 0'
2851 adding file
2852 adding file
2852
2853
2853 $ echo b >> file
2854 $ echo b >> file
2854 $ hg ci -m b -d '1 0'
2855 $ hg ci -m b -d '1 0'
2855
2856
2856 $ echo c >> head1
2857 $ echo c >> head1
2857 $ hg ci -Am h1c -d '2 0'
2858 $ hg ci -Am h1c -d '2 0'
2858 adding head1
2859 adding head1
2859
2860
2860 $ hg update -q 1
2861 $ hg update -q 1
2861 $ echo d >> head2
2862 $ echo d >> head2
2862 $ hg ci -Am h2d -d '3 0'
2863 $ hg ci -Am h2d -d '3 0'
2863 adding head2
2864 adding head2
2864 created new head
2865 created new head
2865
2866
2866 $ echo e >> head2
2867 $ echo e >> head2
2867 $ hg ci -m h2e -d '4 0'
2868 $ hg ci -m h2e -d '4 0'
2868
2869
2869 $ hg merge -q
2870 $ hg merge -q
2870 $ hg ci -m merge -d '5 -3600'
2871 $ hg ci -m merge -d '5 -3600'
2871
2872
2872 No tag set:
2873 No tag set:
2873
2874
2874 $ hg log -G --template '{rev}: {latesttag}+{latesttagdistance}\n'
2875 $ hg log -G --template '{rev}: {latesttag}+{latesttagdistance}\n'
2875 @ 5: null+5
2876 @ 5: null+5
2876 |\
2877 |\
2877 | o 4: null+4
2878 | o 4: null+4
2878 | |
2879 | |
2879 | o 3: null+3
2880 | o 3: null+3
2880 | |
2881 | |
2881 o | 2: null+3
2882 o | 2: null+3
2882 |/
2883 |/
2883 o 1: null+2
2884 o 1: null+2
2884 |
2885 |
2885 o 0: null+1
2886 o 0: null+1
2886
2887
2887
2888
2888 One common tag: longest path wins for {latesttagdistance}:
2889 One common tag: longest path wins for {latesttagdistance}:
2889
2890
2890 $ hg tag -r 1 -m t1 -d '6 0' t1
2891 $ hg tag -r 1 -m t1 -d '6 0' t1
2891 $ hg log -G --template '{rev}: {latesttag}+{latesttagdistance}\n'
2892 $ hg log -G --template '{rev}: {latesttag}+{latesttagdistance}\n'
2892 @ 6: t1+4
2893 @ 6: t1+4
2893 |
2894 |
2894 o 5: t1+3
2895 o 5: t1+3
2895 |\
2896 |\
2896 | o 4: t1+2
2897 | o 4: t1+2
2897 | |
2898 | |
2898 | o 3: t1+1
2899 | o 3: t1+1
2899 | |
2900 | |
2900 o | 2: t1+1
2901 o | 2: t1+1
2901 |/
2902 |/
2902 o 1: t1+0
2903 o 1: t1+0
2903 |
2904 |
2904 o 0: null+1
2905 o 0: null+1
2905
2906
2906
2907
2907 One ancestor tag: closest wins:
2908 One ancestor tag: closest wins:
2908
2909
2909 $ hg tag -r 2 -m t2 -d '7 0' t2
2910 $ hg tag -r 2 -m t2 -d '7 0' t2
2910 $ hg log -G --template '{rev}: {latesttag}+{latesttagdistance}\n'
2911 $ hg log -G --template '{rev}: {latesttag}+{latesttagdistance}\n'
2911 @ 7: t2+3
2912 @ 7: t2+3
2912 |
2913 |
2913 o 6: t2+2
2914 o 6: t2+2
2914 |
2915 |
2915 o 5: t2+1
2916 o 5: t2+1
2916 |\
2917 |\
2917 | o 4: t1+2
2918 | o 4: t1+2
2918 | |
2919 | |
2919 | o 3: t1+1
2920 | o 3: t1+1
2920 | |
2921 | |
2921 o | 2: t2+0
2922 o | 2: t2+0
2922 |/
2923 |/
2923 o 1: t1+0
2924 o 1: t1+0
2924 |
2925 |
2925 o 0: null+1
2926 o 0: null+1
2926
2927
2927
2928
2928 Two branch tags: more recent wins if same number of changes:
2929 Two branch tags: more recent wins if same number of changes:
2929
2930
2930 $ hg tag -r 3 -m t3 -d '8 0' t3
2931 $ hg tag -r 3 -m t3 -d '8 0' t3
2931 $ hg log -G --template '{rev}: {latesttag}+{latesttagdistance}\n'
2932 $ hg log -G --template '{rev}: {latesttag}+{latesttagdistance}\n'
2932 @ 8: t3+5
2933 @ 8: t3+5
2933 |
2934 |
2934 o 7: t3+4
2935 o 7: t3+4
2935 |
2936 |
2936 o 6: t3+3
2937 o 6: t3+3
2937 |
2938 |
2938 o 5: t3+2
2939 o 5: t3+2
2939 |\
2940 |\
2940 | o 4: t3+1
2941 | o 4: t3+1
2941 | |
2942 | |
2942 | o 3: t3+0
2943 | o 3: t3+0
2943 | |
2944 | |
2944 o | 2: t2+0
2945 o | 2: t2+0
2945 |/
2946 |/
2946 o 1: t1+0
2947 o 1: t1+0
2947 |
2948 |
2948 o 0: null+1
2949 o 0: null+1
2949
2950
2950
2951
2951 Two branch tags: fewest changes wins:
2952 Two branch tags: fewest changes wins:
2952
2953
2953 $ hg tag -r 4 -m t4 -d '4 0' t4 # older than t2, but should not matter
2954 $ hg tag -r 4 -m t4 -d '4 0' t4 # older than t2, but should not matter
2954 $ hg log -G --template "{rev}: {latesttag % '{tag}+{distance},{changes} '}\n"
2955 $ hg log -G --template "{rev}: {latesttag % '{tag}+{distance},{changes} '}\n"
2955 @ 9: t4+5,6
2956 @ 9: t4+5,6
2956 |
2957 |
2957 o 8: t4+4,5
2958 o 8: t4+4,5
2958 |
2959 |
2959 o 7: t4+3,4
2960 o 7: t4+3,4
2960 |
2961 |
2961 o 6: t4+2,3
2962 o 6: t4+2,3
2962 |
2963 |
2963 o 5: t4+1,2
2964 o 5: t4+1,2
2964 |\
2965 |\
2965 | o 4: t4+0,0
2966 | o 4: t4+0,0
2966 | |
2967 | |
2967 | o 3: t3+0,0
2968 | o 3: t3+0,0
2968 | |
2969 | |
2969 o | 2: t2+0,0
2970 o | 2: t2+0,0
2970 |/
2971 |/
2971 o 1: t1+0,0
2972 o 1: t1+0,0
2972 |
2973 |
2973 o 0: null+1,1
2974 o 0: null+1,1
2974
2975
2975
2976
2976 Merged tag overrides:
2977 Merged tag overrides:
2977
2978
2978 $ hg tag -r 5 -m t5 -d '9 0' t5
2979 $ hg tag -r 5 -m t5 -d '9 0' t5
2979 $ hg tag -r 3 -m at3 -d '10 0' at3
2980 $ hg tag -r 3 -m at3 -d '10 0' at3
2980 $ hg log -G --template '{rev}: {latesttag}+{latesttagdistance}\n'
2981 $ hg log -G --template '{rev}: {latesttag}+{latesttagdistance}\n'
2981 @ 11: t5+6
2982 @ 11: t5+6
2982 |
2983 |
2983 o 10: t5+5
2984 o 10: t5+5
2984 |
2985 |
2985 o 9: t5+4
2986 o 9: t5+4
2986 |
2987 |
2987 o 8: t5+3
2988 o 8: t5+3
2988 |
2989 |
2989 o 7: t5+2
2990 o 7: t5+2
2990 |
2991 |
2991 o 6: t5+1
2992 o 6: t5+1
2992 |
2993 |
2993 o 5: t5+0
2994 o 5: t5+0
2994 |\
2995 |\
2995 | o 4: t4+0
2996 | o 4: t4+0
2996 | |
2997 | |
2997 | o 3: at3:t3+0
2998 | o 3: at3:t3+0
2998 | |
2999 | |
2999 o | 2: t2+0
3000 o | 2: t2+0
3000 |/
3001 |/
3001 o 1: t1+0
3002 o 1: t1+0
3002 |
3003 |
3003 o 0: null+1
3004 o 0: null+1
3004
3005
3005
3006
3006 $ hg log -G --template "{rev}: {latesttag % '{tag}+{distance},{changes} '}\n"
3007 $ hg log -G --template "{rev}: {latesttag % '{tag}+{distance},{changes} '}\n"
3007 @ 11: t5+6,6
3008 @ 11: t5+6,6
3008 |
3009 |
3009 o 10: t5+5,5
3010 o 10: t5+5,5
3010 |
3011 |
3011 o 9: t5+4,4
3012 o 9: t5+4,4
3012 |
3013 |
3013 o 8: t5+3,3
3014 o 8: t5+3,3
3014 |
3015 |
3015 o 7: t5+2,2
3016 o 7: t5+2,2
3016 |
3017 |
3017 o 6: t5+1,1
3018 o 6: t5+1,1
3018 |
3019 |
3019 o 5: t5+0,0
3020 o 5: t5+0,0
3020 |\
3021 |\
3021 | o 4: t4+0,0
3022 | o 4: t4+0,0
3022 | |
3023 | |
3023 | o 3: at3+0,0 t3+0,0
3024 | o 3: at3+0,0 t3+0,0
3024 | |
3025 | |
3025 o | 2: t2+0,0
3026 o | 2: t2+0,0
3026 |/
3027 |/
3027 o 1: t1+0,0
3028 o 1: t1+0,0
3028 |
3029 |
3029 o 0: null+1,1
3030 o 0: null+1,1
3030
3031
3031
3032
3032 $ hg log -G --template "{rev}: {latesttag('re:^t[13]$') % '{tag}, C: {changes}, D: {distance}'}\n"
3033 $ hg log -G --template "{rev}: {latesttag('re:^t[13]$') % '{tag}, C: {changes}, D: {distance}'}\n"
3033 @ 11: t3, C: 9, D: 8
3034 @ 11: t3, C: 9, D: 8
3034 |
3035 |
3035 o 10: t3, C: 8, D: 7
3036 o 10: t3, C: 8, D: 7
3036 |
3037 |
3037 o 9: t3, C: 7, D: 6
3038 o 9: t3, C: 7, D: 6
3038 |
3039 |
3039 o 8: t3, C: 6, D: 5
3040 o 8: t3, C: 6, D: 5
3040 |
3041 |
3041 o 7: t3, C: 5, D: 4
3042 o 7: t3, C: 5, D: 4
3042 |
3043 |
3043 o 6: t3, C: 4, D: 3
3044 o 6: t3, C: 4, D: 3
3044 |
3045 |
3045 o 5: t3, C: 3, D: 2
3046 o 5: t3, C: 3, D: 2
3046 |\
3047 |\
3047 | o 4: t3, C: 1, D: 1
3048 | o 4: t3, C: 1, D: 1
3048 | |
3049 | |
3049 | o 3: t3, C: 0, D: 0
3050 | o 3: t3, C: 0, D: 0
3050 | |
3051 | |
3051 o | 2: t1, C: 1, D: 1
3052 o | 2: t1, C: 1, D: 1
3052 |/
3053 |/
3053 o 1: t1, C: 0, D: 0
3054 o 1: t1, C: 0, D: 0
3054 |
3055 |
3055 o 0: null, C: 1, D: 1
3056 o 0: null, C: 1, D: 1
3056
3057
3057
3058
3058 $ cd ..
3059 $ cd ..
3059
3060
3060
3061
3061 Style path expansion: issue1948 - ui.style option doesn't work on OSX
3062 Style path expansion: issue1948 - ui.style option doesn't work on OSX
3062 if it is a relative path
3063 if it is a relative path
3063
3064
3064 $ mkdir -p home/styles
3065 $ mkdir -p home/styles
3065
3066
3066 $ cat > home/styles/teststyle <<EOF
3067 $ cat > home/styles/teststyle <<EOF
3067 > changeset = 'test {rev}:{node|short}\n'
3068 > changeset = 'test {rev}:{node|short}\n'
3068 > EOF
3069 > EOF
3069
3070
3070 $ HOME=`pwd`/home; export HOME
3071 $ HOME=`pwd`/home; export HOME
3071
3072
3072 $ cat > latesttag/.hg/hgrc <<EOF
3073 $ cat > latesttag/.hg/hgrc <<EOF
3073 > [ui]
3074 > [ui]
3074 > style = ~/styles/teststyle
3075 > style = ~/styles/teststyle
3075 > EOF
3076 > EOF
3076
3077
3077 $ hg -R latesttag tip
3078 $ hg -R latesttag tip
3078 test 11:97e5943b523a
3079 test 11:97e5943b523a
3079
3080
3080 Test recursive showlist template (issue1989):
3081 Test recursive showlist template (issue1989):
3081
3082
3082 $ cat > style1989 <<EOF
3083 $ cat > style1989 <<EOF
3083 > changeset = '{file_mods}{manifest}{extras}'
3084 > changeset = '{file_mods}{manifest}{extras}'
3084 > file_mod = 'M|{author|person}\n'
3085 > file_mod = 'M|{author|person}\n'
3085 > manifest = '{rev},{author}\n'
3086 > manifest = '{rev},{author}\n'
3086 > extra = '{key}: {author}\n'
3087 > extra = '{key}: {author}\n'
3087 > EOF
3088 > EOF
3088
3089
3089 $ hg -R latesttag log -r tip --style=style1989
3090 $ hg -R latesttag log -r tip --style=style1989
3090 M|test
3091 M|test
3091 11,test
3092 11,test
3092 branch: test
3093 branch: test
3093
3094
3094 Test new-style inline templating:
3095 Test new-style inline templating:
3095
3096
3096 $ hg log -R latesttag -r tip --template 'modified files: {file_mods % " {file}\n"}\n'
3097 $ hg log -R latesttag -r tip --template 'modified files: {file_mods % " {file}\n"}\n'
3097 modified files: .hgtags
3098 modified files: .hgtags
3098
3099
3099
3100
3100 $ hg log -R latesttag -r tip -T '{rev % "a"}\n'
3101 $ hg log -R latesttag -r tip -T '{rev % "a"}\n'
3101 hg: parse error: keyword 'rev' is not iterable
3102 hg: parse error: keyword 'rev' is not iterable
3102 [255]
3103 [255]
3103 $ hg log -R latesttag -r tip -T '{get(extras, "unknown") % "a"}\n'
3104 $ hg log -R latesttag -r tip -T '{get(extras, "unknown") % "a"}\n'
3104 hg: parse error: None is not iterable
3105 hg: parse error: None is not iterable
3105 [255]
3106 [255]
3106
3107
3107 Test the sub function of templating for expansion:
3108 Test the sub function of templating for expansion:
3108
3109
3109 $ hg log -R latesttag -r 10 --template '{sub("[0-9]", "x", "{rev}")}\n'
3110 $ hg log -R latesttag -r 10 --template '{sub("[0-9]", "x", "{rev}")}\n'
3110 xx
3111 xx
3111
3112
3112 $ hg log -R latesttag -r 10 -T '{sub("[", "x", rev)}\n'
3113 $ hg log -R latesttag -r 10 -T '{sub("[", "x", rev)}\n'
3113 hg: parse error: sub got an invalid pattern: [
3114 hg: parse error: sub got an invalid pattern: [
3114 [255]
3115 [255]
3115 $ hg log -R latesttag -r 10 -T '{sub("[0-9]", r"\1", rev)}\n'
3116 $ hg log -R latesttag -r 10 -T '{sub("[0-9]", r"\1", rev)}\n'
3116 hg: parse error: sub got an invalid replacement: \1
3117 hg: parse error: sub got an invalid replacement: \1
3117 [255]
3118 [255]
3118
3119
3119 Test the strip function with chars specified:
3120 Test the strip function with chars specified:
3120
3121
3121 $ hg log -R latesttag --template '{desc}\n'
3122 $ hg log -R latesttag --template '{desc}\n'
3122 at3
3123 at3
3123 t5
3124 t5
3124 t4
3125 t4
3125 t3
3126 t3
3126 t2
3127 t2
3127 t1
3128 t1
3128 merge
3129 merge
3129 h2e
3130 h2e
3130 h2d
3131 h2d
3131 h1c
3132 h1c
3132 b
3133 b
3133 a
3134 a
3134
3135
3135 $ hg log -R latesttag --template '{strip(desc, "te")}\n'
3136 $ hg log -R latesttag --template '{strip(desc, "te")}\n'
3136 at3
3137 at3
3137 5
3138 5
3138 4
3139 4
3139 3
3140 3
3140 2
3141 2
3141 1
3142 1
3142 merg
3143 merg
3143 h2
3144 h2
3144 h2d
3145 h2d
3145 h1c
3146 h1c
3146 b
3147 b
3147 a
3148 a
3148
3149
3149 Test date format:
3150 Test date format:
3150
3151
3151 $ hg log -R latesttag --template 'date: {date(date, "%y %m %d %S %z")}\n'
3152 $ hg log -R latesttag --template 'date: {date(date, "%y %m %d %S %z")}\n'
3152 date: 70 01 01 10 +0000
3153 date: 70 01 01 10 +0000
3153 date: 70 01 01 09 +0000
3154 date: 70 01 01 09 +0000
3154 date: 70 01 01 04 +0000
3155 date: 70 01 01 04 +0000
3155 date: 70 01 01 08 +0000
3156 date: 70 01 01 08 +0000
3156 date: 70 01 01 07 +0000
3157 date: 70 01 01 07 +0000
3157 date: 70 01 01 06 +0000
3158 date: 70 01 01 06 +0000
3158 date: 70 01 01 05 +0100
3159 date: 70 01 01 05 +0100
3159 date: 70 01 01 04 +0000
3160 date: 70 01 01 04 +0000
3160 date: 70 01 01 03 +0000
3161 date: 70 01 01 03 +0000
3161 date: 70 01 01 02 +0000
3162 date: 70 01 01 02 +0000
3162 date: 70 01 01 01 +0000
3163 date: 70 01 01 01 +0000
3163 date: 70 01 01 00 +0000
3164 date: 70 01 01 00 +0000
3164
3165
3165 Test invalid date:
3166 Test invalid date:
3166
3167
3167 $ hg log -R latesttag -T '{date(rev)}\n'
3168 $ hg log -R latesttag -T '{date(rev)}\n'
3168 hg: parse error: date expects a date information
3169 hg: parse error: date expects a date information
3169 [255]
3170 [255]
3170
3171
3171 Test integer literal:
3172 Test integer literal:
3172
3173
3173 $ hg debugtemplate -v '{(0)}\n'
3174 $ hg debugtemplate -v '{(0)}\n'
3174 (template
3175 (template
3175 (group
3176 (group
3176 ('integer', '0'))
3177 ('integer', '0'))
3177 ('string', '\n'))
3178 ('string', '\n'))
3178 0
3179 0
3179 $ hg debugtemplate -v '{(123)}\n'
3180 $ hg debugtemplate -v '{(123)}\n'
3180 (template
3181 (template
3181 (group
3182 (group
3182 ('integer', '123'))
3183 ('integer', '123'))
3183 ('string', '\n'))
3184 ('string', '\n'))
3184 123
3185 123
3185 $ hg debugtemplate -v '{(-4)}\n'
3186 $ hg debugtemplate -v '{(-4)}\n'
3186 (template
3187 (template
3187 (group
3188 (group
3188 (negate
3189 (negate
3189 ('integer', '4')))
3190 ('integer', '4')))
3190 ('string', '\n'))
3191 ('string', '\n'))
3191 -4
3192 -4
3192 $ hg debugtemplate '{(-)}\n'
3193 $ hg debugtemplate '{(-)}\n'
3193 hg: parse error at 3: not a prefix: )
3194 hg: parse error at 3: not a prefix: )
3194 [255]
3195 [255]
3195 $ hg debugtemplate '{(-a)}\n'
3196 $ hg debugtemplate '{(-a)}\n'
3196 hg: parse error: negation needs an integer argument
3197 hg: parse error: negation needs an integer argument
3197 [255]
3198 [255]
3198
3199
3199 top-level integer literal is interpreted as symbol (i.e. variable name):
3200 top-level integer literal is interpreted as symbol (i.e. variable name):
3200
3201
3201 $ hg debugtemplate -D 1=one -v '{1}\n'
3202 $ hg debugtemplate -D 1=one -v '{1}\n'
3202 (template
3203 (template
3203 ('integer', '1')
3204 ('integer', '1')
3204 ('string', '\n'))
3205 ('string', '\n'))
3205 one
3206 one
3206 $ hg debugtemplate -D 1=one -v '{if("t", "{1}")}\n'
3207 $ hg debugtemplate -D 1=one -v '{if("t", "{1}")}\n'
3207 (template
3208 (template
3208 (func
3209 (func
3209 ('symbol', 'if')
3210 ('symbol', 'if')
3210 (list
3211 (list
3211 ('string', 't')
3212 ('string', 't')
3212 (template
3213 (template
3213 ('integer', '1'))))
3214 ('integer', '1'))))
3214 ('string', '\n'))
3215 ('string', '\n'))
3215 one
3216 one
3216 $ hg debugtemplate -D 1=one -v '{1|stringify}\n'
3217 $ hg debugtemplate -D 1=one -v '{1|stringify}\n'
3217 (template
3218 (template
3218 (|
3219 (|
3219 ('integer', '1')
3220 ('integer', '1')
3220 ('symbol', 'stringify'))
3221 ('symbol', 'stringify'))
3221 ('string', '\n'))
3222 ('string', '\n'))
3222 one
3223 one
3223
3224
3224 unless explicit symbol is expected:
3225 unless explicit symbol is expected:
3225
3226
3226 $ hg log -Ra -r0 -T '{desc|1}\n'
3227 $ hg log -Ra -r0 -T '{desc|1}\n'
3227 hg: parse error: expected a symbol, got 'integer'
3228 hg: parse error: expected a symbol, got 'integer'
3228 [255]
3229 [255]
3229 $ hg log -Ra -r0 -T '{1()}\n'
3230 $ hg log -Ra -r0 -T '{1()}\n'
3230 hg: parse error: expected a symbol, got 'integer'
3231 hg: parse error: expected a symbol, got 'integer'
3231 [255]
3232 [255]
3232
3233
3233 Test string literal:
3234 Test string literal:
3234
3235
3235 $ hg debugtemplate -Ra -r0 -v '{"string with no template fragment"}\n'
3236 $ hg debugtemplate -Ra -r0 -v '{"string with no template fragment"}\n'
3236 (template
3237 (template
3237 ('string', 'string with no template fragment')
3238 ('string', 'string with no template fragment')
3238 ('string', '\n'))
3239 ('string', '\n'))
3239 string with no template fragment
3240 string with no template fragment
3240 $ hg debugtemplate -Ra -r0 -v '{"template: {rev}"}\n'
3241 $ hg debugtemplate -Ra -r0 -v '{"template: {rev}"}\n'
3241 (template
3242 (template
3242 (template
3243 (template
3243 ('string', 'template: ')
3244 ('string', 'template: ')
3244 ('symbol', 'rev'))
3245 ('symbol', 'rev'))
3245 ('string', '\n'))
3246 ('string', '\n'))
3246 template: 0
3247 template: 0
3247 $ hg debugtemplate -Ra -r0 -v '{r"rawstring: {rev}"}\n'
3248 $ hg debugtemplate -Ra -r0 -v '{r"rawstring: {rev}"}\n'
3248 (template
3249 (template
3249 ('string', 'rawstring: {rev}')
3250 ('string', 'rawstring: {rev}')
3250 ('string', '\n'))
3251 ('string', '\n'))
3251 rawstring: {rev}
3252 rawstring: {rev}
3252 $ hg debugtemplate -Ra -r0 -v '{files % r"rawstring: {file}"}\n'
3253 $ hg debugtemplate -Ra -r0 -v '{files % r"rawstring: {file}"}\n'
3253 (template
3254 (template
3254 (%
3255 (%
3255 ('symbol', 'files')
3256 ('symbol', 'files')
3256 ('string', 'rawstring: {file}'))
3257 ('string', 'rawstring: {file}'))
3257 ('string', '\n'))
3258 ('string', '\n'))
3258 rawstring: {file}
3259 rawstring: {file}
3259
3260
3260 Test string escaping:
3261 Test string escaping:
3261
3262
3262 $ hg log -R latesttag -r 0 --template '>\n<>\\n<{if(rev, "[>\n<>\\n<]")}>\n<>\\n<\n'
3263 $ hg log -R latesttag -r 0 --template '>\n<>\\n<{if(rev, "[>\n<>\\n<]")}>\n<>\\n<\n'
3263 >
3264 >
3264 <>\n<[>
3265 <>\n<[>
3265 <>\n<]>
3266 <>\n<]>
3266 <>\n<
3267 <>\n<
3267
3268
3268 $ hg log -R latesttag -r 0 \
3269 $ hg log -R latesttag -r 0 \
3269 > --config ui.logtemplate='>\n<>\\n<{if(rev, "[>\n<>\\n<]")}>\n<>\\n<\n'
3270 > --config ui.logtemplate='>\n<>\\n<{if(rev, "[>\n<>\\n<]")}>\n<>\\n<\n'
3270 >
3271 >
3271 <>\n<[>
3272 <>\n<[>
3272 <>\n<]>
3273 <>\n<]>
3273 <>\n<
3274 <>\n<
3274
3275
3275 $ hg log -R latesttag -r 0 -T esc \
3276 $ hg log -R latesttag -r 0 -T esc \
3276 > --config templates.esc='>\n<>\\n<{if(rev, "[>\n<>\\n<]")}>\n<>\\n<\n'
3277 > --config templates.esc='>\n<>\\n<{if(rev, "[>\n<>\\n<]")}>\n<>\\n<\n'
3277 >
3278 >
3278 <>\n<[>
3279 <>\n<[>
3279 <>\n<]>
3280 <>\n<]>
3280 <>\n<
3281 <>\n<
3281
3282
3282 $ cat <<'EOF' > esctmpl
3283 $ cat <<'EOF' > esctmpl
3283 > changeset = '>\n<>\\n<{if(rev, "[>\n<>\\n<]")}>\n<>\\n<\n'
3284 > changeset = '>\n<>\\n<{if(rev, "[>\n<>\\n<]")}>\n<>\\n<\n'
3284 > EOF
3285 > EOF
3285 $ hg log -R latesttag -r 0 --style ./esctmpl
3286 $ hg log -R latesttag -r 0 --style ./esctmpl
3286 >
3287 >
3287 <>\n<[>
3288 <>\n<[>
3288 <>\n<]>
3289 <>\n<]>
3289 <>\n<
3290 <>\n<
3290
3291
3291 Test string escaping of quotes:
3292 Test string escaping of quotes:
3292
3293
3293 $ hg log -Ra -r0 -T '{"\""}\n'
3294 $ hg log -Ra -r0 -T '{"\""}\n'
3294 "
3295 "
3295 $ hg log -Ra -r0 -T '{"\\\""}\n'
3296 $ hg log -Ra -r0 -T '{"\\\""}\n'
3296 \"
3297 \"
3297 $ hg log -Ra -r0 -T '{r"\""}\n'
3298 $ hg log -Ra -r0 -T '{r"\""}\n'
3298 \"
3299 \"
3299 $ hg log -Ra -r0 -T '{r"\\\""}\n'
3300 $ hg log -Ra -r0 -T '{r"\\\""}\n'
3300 \\\"
3301 \\\"
3301
3302
3302
3303
3303 $ hg log -Ra -r0 -T '{"\""}\n'
3304 $ hg log -Ra -r0 -T '{"\""}\n'
3304 "
3305 "
3305 $ hg log -Ra -r0 -T '{"\\\""}\n'
3306 $ hg log -Ra -r0 -T '{"\\\""}\n'
3306 \"
3307 \"
3307 $ hg log -Ra -r0 -T '{r"\""}\n'
3308 $ hg log -Ra -r0 -T '{r"\""}\n'
3308 \"
3309 \"
3309 $ hg log -Ra -r0 -T '{r"\\\""}\n'
3310 $ hg log -Ra -r0 -T '{r"\\\""}\n'
3310 \\\"
3311 \\\"
3311
3312
3312 Test exception in quoted template. single backslash before quotation mark is
3313 Test exception in quoted template. single backslash before quotation mark is
3313 stripped before parsing:
3314 stripped before parsing:
3314
3315
3315 $ cat <<'EOF' > escquotetmpl
3316 $ cat <<'EOF' > escquotetmpl
3316 > changeset = "\" \\" \\\" \\\\" {files % \"{file}\"}\n"
3317 > changeset = "\" \\" \\\" \\\\" {files % \"{file}\"}\n"
3317 > EOF
3318 > EOF
3318 $ cd latesttag
3319 $ cd latesttag
3319 $ hg log -r 2 --style ../escquotetmpl
3320 $ hg log -r 2 --style ../escquotetmpl
3320 " \" \" \\" head1
3321 " \" \" \\" head1
3321
3322
3322 $ hg log -r 2 -T esc --config templates.esc='"{\"valid\"}\n"'
3323 $ hg log -r 2 -T esc --config templates.esc='"{\"valid\"}\n"'
3323 valid
3324 valid
3324 $ hg log -r 2 -T esc --config templates.esc="'"'{\'"'"'valid\'"'"'}\n'"'"
3325 $ hg log -r 2 -T esc --config templates.esc="'"'{\'"'"'valid\'"'"'}\n'"'"
3325 valid
3326 valid
3326
3327
3327 Test compatibility with 2.9.2-3.4 of escaped quoted strings in nested
3328 Test compatibility with 2.9.2-3.4 of escaped quoted strings in nested
3328 _evalifliteral() templates (issue4733):
3329 _evalifliteral() templates (issue4733):
3329
3330
3330 $ hg log -r 2 -T '{if(rev, "\"{rev}")}\n'
3331 $ hg log -r 2 -T '{if(rev, "\"{rev}")}\n'
3331 "2
3332 "2
3332 $ hg log -r 2 -T '{if(rev, "{if(rev, \"\\\"{rev}\")}")}\n'
3333 $ hg log -r 2 -T '{if(rev, "{if(rev, \"\\\"{rev}\")}")}\n'
3333 "2
3334 "2
3334 $ hg log -r 2 -T '{if(rev, "{if(rev, \"{if(rev, \\\"\\\\\\\"{rev}\\\")}\")}")}\n'
3335 $ hg log -r 2 -T '{if(rev, "{if(rev, \"{if(rev, \\\"\\\\\\\"{rev}\\\")}\")}")}\n'
3335 "2
3336 "2
3336
3337
3337 $ hg log -r 2 -T '{if(rev, "\\\"")}\n'
3338 $ hg log -r 2 -T '{if(rev, "\\\"")}\n'
3338 \"
3339 \"
3339 $ hg log -r 2 -T '{if(rev, "{if(rev, \"\\\\\\\"\")}")}\n'
3340 $ hg log -r 2 -T '{if(rev, "{if(rev, \"\\\\\\\"\")}")}\n'
3340 \"
3341 \"
3341 $ hg log -r 2 -T '{if(rev, "{if(rev, \"{if(rev, \\\"\\\\\\\\\\\\\\\"\\\")}\")}")}\n'
3342 $ hg log -r 2 -T '{if(rev, "{if(rev, \"{if(rev, \\\"\\\\\\\\\\\\\\\"\\\")}\")}")}\n'
3342 \"
3343 \"
3343
3344
3344 $ hg log -r 2 -T '{if(rev, r"\\\"")}\n'
3345 $ hg log -r 2 -T '{if(rev, r"\\\"")}\n'
3345 \\\"
3346 \\\"
3346 $ hg log -r 2 -T '{if(rev, "{if(rev, r\"\\\\\\\"\")}")}\n'
3347 $ hg log -r 2 -T '{if(rev, "{if(rev, r\"\\\\\\\"\")}")}\n'
3347 \\\"
3348 \\\"
3348 $ hg log -r 2 -T '{if(rev, "{if(rev, \"{if(rev, r\\\"\\\\\\\\\\\\\\\"\\\")}\")}")}\n'
3349 $ hg log -r 2 -T '{if(rev, "{if(rev, \"{if(rev, r\\\"\\\\\\\\\\\\\\\"\\\")}\")}")}\n'
3349 \\\"
3350 \\\"
3350
3351
3351 escaped single quotes and errors:
3352 escaped single quotes and errors:
3352
3353
3353 $ hg log -r 2 -T "{if(rev, '{if(rev, \'foo\')}')}"'\n'
3354 $ hg log -r 2 -T "{if(rev, '{if(rev, \'foo\')}')}"'\n'
3354 foo
3355 foo
3355 $ hg log -r 2 -T "{if(rev, '{if(rev, r\'foo\')}')}"'\n'
3356 $ hg log -r 2 -T "{if(rev, '{if(rev, r\'foo\')}')}"'\n'
3356 foo
3357 foo
3357 $ hg log -r 2 -T '{if(rev, "{if(rev, \")}")}\n'
3358 $ hg log -r 2 -T '{if(rev, "{if(rev, \")}")}\n'
3358 hg: parse error at 21: unterminated string
3359 hg: parse error at 21: unterminated string
3359 [255]
3360 [255]
3360 $ hg log -r 2 -T '{if(rev, \"\\"")}\n'
3361 $ hg log -r 2 -T '{if(rev, \"\\"")}\n'
3361 hg: parse error: trailing \ in string
3362 hg: parse error: trailing \ in string
3362 [255]
3363 [255]
3363 $ hg log -r 2 -T '{if(rev, r\"\\"")}\n'
3364 $ hg log -r 2 -T '{if(rev, r\"\\"")}\n'
3364 hg: parse error: trailing \ in string
3365 hg: parse error: trailing \ in string
3365 [255]
3366 [255]
3366
3367
3367 $ cd ..
3368 $ cd ..
3368
3369
3369 Test leading backslashes:
3370 Test leading backslashes:
3370
3371
3371 $ cd latesttag
3372 $ cd latesttag
3372 $ hg log -r 2 -T '\{rev} {files % "\{file}"}\n'
3373 $ hg log -r 2 -T '\{rev} {files % "\{file}"}\n'
3373 {rev} {file}
3374 {rev} {file}
3374 $ hg log -r 2 -T '\\{rev} {files % "\\{file}"}\n'
3375 $ hg log -r 2 -T '\\{rev} {files % "\\{file}"}\n'
3375 \2 \head1
3376 \2 \head1
3376 $ hg log -r 2 -T '\\\{rev} {files % "\\\{file}"}\n'
3377 $ hg log -r 2 -T '\\\{rev} {files % "\\\{file}"}\n'
3377 \{rev} \{file}
3378 \{rev} \{file}
3378 $ cd ..
3379 $ cd ..
3379
3380
3380 Test leading backslashes in "if" expression (issue4714):
3381 Test leading backslashes in "if" expression (issue4714):
3381
3382
3382 $ cd latesttag
3383 $ cd latesttag
3383 $ hg log -r 2 -T '{if("1", "\{rev}")} {if("1", r"\{rev}")}\n'
3384 $ hg log -r 2 -T '{if("1", "\{rev}")} {if("1", r"\{rev}")}\n'
3384 {rev} \{rev}
3385 {rev} \{rev}
3385 $ hg log -r 2 -T '{if("1", "\\{rev}")} {if("1", r"\\{rev}")}\n'
3386 $ hg log -r 2 -T '{if("1", "\\{rev}")} {if("1", r"\\{rev}")}\n'
3386 \2 \\{rev}
3387 \2 \\{rev}
3387 $ hg log -r 2 -T '{if("1", "\\\{rev}")} {if("1", r"\\\{rev}")}\n'
3388 $ hg log -r 2 -T '{if("1", "\\\{rev}")} {if("1", r"\\\{rev}")}\n'
3388 \{rev} \\\{rev}
3389 \{rev} \\\{rev}
3389 $ cd ..
3390 $ cd ..
3390
3391
3391 "string-escape"-ed "\x5c\x786e" becomes r"\x6e" (once) or r"n" (twice)
3392 "string-escape"-ed "\x5c\x786e" becomes r"\x6e" (once) or r"n" (twice)
3392
3393
3393 $ hg log -R a -r 0 --template '{if("1", "\x5c\x786e", "NG")}\n'
3394 $ hg log -R a -r 0 --template '{if("1", "\x5c\x786e", "NG")}\n'
3394 \x6e
3395 \x6e
3395 $ hg log -R a -r 0 --template '{if("1", r"\x5c\x786e", "NG")}\n'
3396 $ hg log -R a -r 0 --template '{if("1", r"\x5c\x786e", "NG")}\n'
3396 \x5c\x786e
3397 \x5c\x786e
3397 $ hg log -R a -r 0 --template '{if("", "NG", "\x5c\x786e")}\n'
3398 $ hg log -R a -r 0 --template '{if("", "NG", "\x5c\x786e")}\n'
3398 \x6e
3399 \x6e
3399 $ hg log -R a -r 0 --template '{if("", "NG", r"\x5c\x786e")}\n'
3400 $ hg log -R a -r 0 --template '{if("", "NG", r"\x5c\x786e")}\n'
3400 \x5c\x786e
3401 \x5c\x786e
3401
3402
3402 $ hg log -R a -r 2 --template '{ifeq("no perso\x6e", desc, "\x5c\x786e", "NG")}\n'
3403 $ hg log -R a -r 2 --template '{ifeq("no perso\x6e", desc, "\x5c\x786e", "NG")}\n'
3403 \x6e
3404 \x6e
3404 $ hg log -R a -r 2 --template '{ifeq(r"no perso\x6e", desc, "NG", r"\x5c\x786e")}\n'
3405 $ hg log -R a -r 2 --template '{ifeq(r"no perso\x6e", desc, "NG", r"\x5c\x786e")}\n'
3405 \x5c\x786e
3406 \x5c\x786e
3406 $ hg log -R a -r 2 --template '{ifeq(desc, "no perso\x6e", "\x5c\x786e", "NG")}\n'
3407 $ hg log -R a -r 2 --template '{ifeq(desc, "no perso\x6e", "\x5c\x786e", "NG")}\n'
3407 \x6e
3408 \x6e
3408 $ hg log -R a -r 2 --template '{ifeq(desc, r"no perso\x6e", "NG", r"\x5c\x786e")}\n'
3409 $ hg log -R a -r 2 --template '{ifeq(desc, r"no perso\x6e", "NG", r"\x5c\x786e")}\n'
3409 \x5c\x786e
3410 \x5c\x786e
3410
3411
3411 $ hg log -R a -r 8 --template '{join(files, "\n")}\n'
3412 $ hg log -R a -r 8 --template '{join(files, "\n")}\n'
3412 fourth
3413 fourth
3413 second
3414 second
3414 third
3415 third
3415 $ hg log -R a -r 8 --template '{join(files, r"\n")}\n'
3416 $ hg log -R a -r 8 --template '{join(files, r"\n")}\n'
3416 fourth\nsecond\nthird
3417 fourth\nsecond\nthird
3417
3418
3418 $ hg log -R a -r 2 --template '{rstdoc("1st\n\n2nd", "htm\x6c")}'
3419 $ hg log -R a -r 2 --template '{rstdoc("1st\n\n2nd", "htm\x6c")}'
3419 <p>
3420 <p>
3420 1st
3421 1st
3421 </p>
3422 </p>
3422 <p>
3423 <p>
3423 2nd
3424 2nd
3424 </p>
3425 </p>
3425 $ hg log -R a -r 2 --template '{rstdoc(r"1st\n\n2nd", "html")}'
3426 $ hg log -R a -r 2 --template '{rstdoc(r"1st\n\n2nd", "html")}'
3426 <p>
3427 <p>
3427 1st\n\n2nd
3428 1st\n\n2nd
3428 </p>
3429 </p>
3429 $ hg log -R a -r 2 --template '{rstdoc("1st\n\n2nd", r"htm\x6c")}'
3430 $ hg log -R a -r 2 --template '{rstdoc("1st\n\n2nd", r"htm\x6c")}'
3430 1st
3431 1st
3431
3432
3432 2nd
3433 2nd
3433
3434
3434 $ hg log -R a -r 2 --template '{strip(desc, "\x6e")}\n'
3435 $ hg log -R a -r 2 --template '{strip(desc, "\x6e")}\n'
3435 o perso
3436 o perso
3436 $ hg log -R a -r 2 --template '{strip(desc, r"\x6e")}\n'
3437 $ hg log -R a -r 2 --template '{strip(desc, r"\x6e")}\n'
3437 no person
3438 no person
3438 $ hg log -R a -r 2 --template '{strip("no perso\x6e", "\x6e")}\n'
3439 $ hg log -R a -r 2 --template '{strip("no perso\x6e", "\x6e")}\n'
3439 o perso
3440 o perso
3440 $ hg log -R a -r 2 --template '{strip(r"no perso\x6e", r"\x6e")}\n'
3441 $ hg log -R a -r 2 --template '{strip(r"no perso\x6e", r"\x6e")}\n'
3441 no perso
3442 no perso
3442
3443
3443 $ hg log -R a -r 2 --template '{sub("\\x6e", "\x2d", desc)}\n'
3444 $ hg log -R a -r 2 --template '{sub("\\x6e", "\x2d", desc)}\n'
3444 -o perso-
3445 -o perso-
3445 $ hg log -R a -r 2 --template '{sub(r"\\x6e", "-", desc)}\n'
3446 $ hg log -R a -r 2 --template '{sub(r"\\x6e", "-", desc)}\n'
3446 no person
3447 no person
3447 $ hg log -R a -r 2 --template '{sub("n", r"\x2d", desc)}\n'
3448 $ hg log -R a -r 2 --template '{sub("n", r"\x2d", desc)}\n'
3448 \x2do perso\x2d
3449 \x2do perso\x2d
3449 $ hg log -R a -r 2 --template '{sub("n", "\x2d", "no perso\x6e")}\n'
3450 $ hg log -R a -r 2 --template '{sub("n", "\x2d", "no perso\x6e")}\n'
3450 -o perso-
3451 -o perso-
3451 $ hg log -R a -r 2 --template '{sub("n", r"\x2d", r"no perso\x6e")}\n'
3452 $ hg log -R a -r 2 --template '{sub("n", r"\x2d", r"no perso\x6e")}\n'
3452 \x2do perso\x6e
3453 \x2do perso\x6e
3453
3454
3454 $ hg log -R a -r 8 --template '{files % "{file}\n"}'
3455 $ hg log -R a -r 8 --template '{files % "{file}\n"}'
3455 fourth
3456 fourth
3456 second
3457 second
3457 third
3458 third
3458
3459
3459 Test string escaping in nested expression:
3460 Test string escaping in nested expression:
3460
3461
3461 $ hg log -R a -r 8 --template '{ifeq(r"\x6e", if("1", "\x5c\x786e"), join(files, "\x5c\x786e"))}\n'
3462 $ hg log -R a -r 8 --template '{ifeq(r"\x6e", if("1", "\x5c\x786e"), join(files, "\x5c\x786e"))}\n'
3462 fourth\x6esecond\x6ethird
3463 fourth\x6esecond\x6ethird
3463 $ hg log -R a -r 8 --template '{ifeq(if("1", r"\x6e"), "\x5c\x786e", join(files, "\x5c\x786e"))}\n'
3464 $ hg log -R a -r 8 --template '{ifeq(if("1", r"\x6e"), "\x5c\x786e", join(files, "\x5c\x786e"))}\n'
3464 fourth\x6esecond\x6ethird
3465 fourth\x6esecond\x6ethird
3465
3466
3466 $ hg log -R a -r 8 --template '{join(files, ifeq(branch, "default", "\x5c\x786e"))}\n'
3467 $ hg log -R a -r 8 --template '{join(files, ifeq(branch, "default", "\x5c\x786e"))}\n'
3467 fourth\x6esecond\x6ethird
3468 fourth\x6esecond\x6ethird
3468 $ hg log -R a -r 8 --template '{join(files, ifeq(branch, "default", r"\x5c\x786e"))}\n'
3469 $ hg log -R a -r 8 --template '{join(files, ifeq(branch, "default", r"\x5c\x786e"))}\n'
3469 fourth\x5c\x786esecond\x5c\x786ethird
3470 fourth\x5c\x786esecond\x5c\x786ethird
3470
3471
3471 $ hg log -R a -r 3:4 --template '{rev}:{sub(if("1", "\x6e"), ifeq(branch, "foo", r"\x5c\x786e", "\x5c\x786e"), desc)}\n'
3472 $ hg log -R a -r 3:4 --template '{rev}:{sub(if("1", "\x6e"), ifeq(branch, "foo", r"\x5c\x786e", "\x5c\x786e"), desc)}\n'
3472 3:\x6eo user, \x6eo domai\x6e
3473 3:\x6eo user, \x6eo domai\x6e
3473 4:\x5c\x786eew bra\x5c\x786ech
3474 4:\x5c\x786eew bra\x5c\x786ech
3474
3475
3475 Test quotes in nested expression are evaluated just like a $(command)
3476 Test quotes in nested expression are evaluated just like a $(command)
3476 substitution in POSIX shells:
3477 substitution in POSIX shells:
3477
3478
3478 $ hg log -R a -r 8 -T '{"{"{rev}:{node|short}"}"}\n'
3479 $ hg log -R a -r 8 -T '{"{"{rev}:{node|short}"}"}\n'
3479 8:95c24699272e
3480 8:95c24699272e
3480 $ hg log -R a -r 8 -T '{"{"\{{rev}} \"{node|short}\""}"}\n'
3481 $ hg log -R a -r 8 -T '{"{"\{{rev}} \"{node|short}\""}"}\n'
3481 {8} "95c24699272e"
3482 {8} "95c24699272e"
3482
3483
3483 Test recursive evaluation:
3484 Test recursive evaluation:
3484
3485
3485 $ hg init r
3486 $ hg init r
3486 $ cd r
3487 $ cd r
3487 $ echo a > a
3488 $ echo a > a
3488 $ hg ci -Am '{rev}'
3489 $ hg ci -Am '{rev}'
3489 adding a
3490 adding a
3490 $ hg log -r 0 --template '{if(rev, desc)}\n'
3491 $ hg log -r 0 --template '{if(rev, desc)}\n'
3491 {rev}
3492 {rev}
3492 $ hg log -r 0 --template '{if(rev, "{author} {rev}")}\n'
3493 $ hg log -r 0 --template '{if(rev, "{author} {rev}")}\n'
3493 test 0
3494 test 0
3494
3495
3495 $ hg branch -q 'text.{rev}'
3496 $ hg branch -q 'text.{rev}'
3496 $ echo aa >> aa
3497 $ echo aa >> aa
3497 $ hg ci -u '{node|short}' -m 'desc to be wrapped desc to be wrapped'
3498 $ hg ci -u '{node|short}' -m 'desc to be wrapped desc to be wrapped'
3498
3499
3499 $ hg log -l1 --template '{fill(desc, "20", author, branch)}'
3500 $ hg log -l1 --template '{fill(desc, "20", author, branch)}'
3500 {node|short}desc to
3501 {node|short}desc to
3501 text.{rev}be wrapped
3502 text.{rev}be wrapped
3502 text.{rev}desc to be
3503 text.{rev}desc to be
3503 text.{rev}wrapped (no-eol)
3504 text.{rev}wrapped (no-eol)
3504 $ hg log -l1 --template '{fill(desc, "20", "{node|short}:", "text.{rev}:")}'
3505 $ hg log -l1 --template '{fill(desc, "20", "{node|short}:", "text.{rev}:")}'
3505 bcc7ff960b8e:desc to
3506 bcc7ff960b8e:desc to
3506 text.1:be wrapped
3507 text.1:be wrapped
3507 text.1:desc to be
3508 text.1:desc to be
3508 text.1:wrapped (no-eol)
3509 text.1:wrapped (no-eol)
3509 $ hg log -l1 -T '{fill(desc, date, "", "")}\n'
3510 $ hg log -l1 -T '{fill(desc, date, "", "")}\n'
3510 hg: parse error: fill expects an integer width
3511 hg: parse error: fill expects an integer width
3511 [255]
3512 [255]
3512
3513
3513 $ COLUMNS=25 hg log -l1 --template '{fill(desc, termwidth, "{node|short}:", "termwidth.{rev}:")}'
3514 $ COLUMNS=25 hg log -l1 --template '{fill(desc, termwidth, "{node|short}:", "termwidth.{rev}:")}'
3514 bcc7ff960b8e:desc to be
3515 bcc7ff960b8e:desc to be
3515 termwidth.1:wrapped desc
3516 termwidth.1:wrapped desc
3516 termwidth.1:to be wrapped (no-eol)
3517 termwidth.1:to be wrapped (no-eol)
3517
3518
3518 $ hg log -l 1 --template '{sub(r"[0-9]", "-", author)}'
3519 $ hg log -l 1 --template '{sub(r"[0-9]", "-", author)}'
3519 {node|short} (no-eol)
3520 {node|short} (no-eol)
3520 $ hg log -l 1 --template '{sub(r"[0-9]", "-", "{node|short}")}'
3521 $ hg log -l 1 --template '{sub(r"[0-9]", "-", "{node|short}")}'
3521 bcc-ff---b-e (no-eol)
3522 bcc-ff---b-e (no-eol)
3522
3523
3523 $ cat >> .hg/hgrc <<EOF
3524 $ cat >> .hg/hgrc <<EOF
3524 > [extensions]
3525 > [extensions]
3525 > color=
3526 > color=
3526 > [color]
3527 > [color]
3527 > mode=ansi
3528 > mode=ansi
3528 > text.{rev} = red
3529 > text.{rev} = red
3529 > text.1 = green
3530 > text.1 = green
3530 > EOF
3531 > EOF
3531 $ hg log --color=always -l 1 --template '{label(branch, "text\n")}'
3532 $ hg log --color=always -l 1 --template '{label(branch, "text\n")}'
3532 \x1b[0;31mtext\x1b[0m (esc)
3533 \x1b[0;31mtext\x1b[0m (esc)
3533 $ hg log --color=always -l 1 --template '{label("text.{rev}", "text\n")}'
3534 $ hg log --color=always -l 1 --template '{label("text.{rev}", "text\n")}'
3534 \x1b[0;32mtext\x1b[0m (esc)
3535 \x1b[0;32mtext\x1b[0m (esc)
3535
3536
3536 color effect can be specified without quoting:
3537 color effect can be specified without quoting:
3537
3538
3538 $ hg log --color=always -l 1 --template '{label(red, "text\n")}'
3539 $ hg log --color=always -l 1 --template '{label(red, "text\n")}'
3539 \x1b[0;31mtext\x1b[0m (esc)
3540 \x1b[0;31mtext\x1b[0m (esc)
3540
3541
3541 color effects can be nested (issue5413)
3542 color effects can be nested (issue5413)
3542
3543
3543 $ hg debugtemplate --color=always \
3544 $ hg debugtemplate --color=always \
3544 > '{label(red, "red{label(magenta, "ma{label(cyan, "cyan")}{label(yellow, "yellow")}genta")}")}\n'
3545 > '{label(red, "red{label(magenta, "ma{label(cyan, "cyan")}{label(yellow, "yellow")}genta")}")}\n'
3545 \x1b[0;31mred\x1b[0;35mma\x1b[0;36mcyan\x1b[0m\x1b[0;31m\x1b[0;35m\x1b[0;33myellow\x1b[0m\x1b[0;31m\x1b[0;35mgenta\x1b[0m (esc)
3546 \x1b[0;31mred\x1b[0;35mma\x1b[0;36mcyan\x1b[0m\x1b[0;31m\x1b[0;35m\x1b[0;33myellow\x1b[0m\x1b[0;31m\x1b[0;35mgenta\x1b[0m (esc)
3546
3547
3547 pad() should interact well with color codes (issue5416)
3548 pad() should interact well with color codes (issue5416)
3548
3549
3549 $ hg debugtemplate --color=always \
3550 $ hg debugtemplate --color=always \
3550 > '{pad(label(red, "red"), 5, label(cyan, "-"))}\n'
3551 > '{pad(label(red, "red"), 5, label(cyan, "-"))}\n'
3551 \x1b[0;31mred\x1b[0m\x1b[0;36m-\x1b[0m\x1b[0;36m-\x1b[0m (esc)
3552 \x1b[0;31mred\x1b[0m\x1b[0;36m-\x1b[0m\x1b[0;36m-\x1b[0m (esc)
3552
3553
3553 label should be no-op if color is disabled:
3554 label should be no-op if color is disabled:
3554
3555
3555 $ hg log --color=never -l 1 --template '{label(red, "text\n")}'
3556 $ hg log --color=never -l 1 --template '{label(red, "text\n")}'
3556 text
3557 text
3557 $ hg log --config extensions.color=! -l 1 --template '{label(red, "text\n")}'
3558 $ hg log --config extensions.color=! -l 1 --template '{label(red, "text\n")}'
3558 text
3559 text
3559
3560
3560 Test branches inside if statement:
3561 Test branches inside if statement:
3561
3562
3562 $ hg log -r 0 --template '{if(branches, "yes", "no")}\n'
3563 $ hg log -r 0 --template '{if(branches, "yes", "no")}\n'
3563 no
3564 no
3564
3565
3565 Test dict constructor:
3566 Test dict constructor:
3566
3567
3567 $ hg log -r 0 -T '{dict(y=node|short, x=rev)}\n'
3568 $ hg log -r 0 -T '{dict(y=node|short, x=rev)}\n'
3568 y=f7769ec2ab97 x=0
3569 y=f7769ec2ab97 x=0
3569 $ hg log -r 0 -T '{dict(x=rev, y=node|short) % "{key}={value}\n"}'
3570 $ hg log -r 0 -T '{dict(x=rev, y=node|short) % "{key}={value}\n"}'
3570 x=0
3571 x=0
3571 y=f7769ec2ab97
3572 y=f7769ec2ab97
3572 $ hg log -r 0 -T '{dict(x=rev, y=node|short)|json}\n'
3573 $ hg log -r 0 -T '{dict(x=rev, y=node|short)|json}\n'
3573 {"x": 0, "y": "f7769ec2ab97"}
3574 {"x": 0, "y": "f7769ec2ab97"}
3574 $ hg log -r 0 -T '{dict()|json}\n'
3575 $ hg log -r 0 -T '{dict()|json}\n'
3575 {}
3576 {}
3576
3577
3577 $ hg log -r 0 -T '{dict(rev, node=node|short)}\n'
3578 $ hg log -r 0 -T '{dict(rev, node=node|short)}\n'
3578 rev=0 node=f7769ec2ab97
3579 rev=0 node=f7769ec2ab97
3579 $ hg log -r 0 -T '{dict(rev, node|short)}\n'
3580 $ hg log -r 0 -T '{dict(rev, node|short)}\n'
3580 rev=0 node=f7769ec2ab97
3581 rev=0 node=f7769ec2ab97
3581
3582
3582 $ hg log -r 0 -T '{dict(rev, rev=rev)}\n'
3583 $ hg log -r 0 -T '{dict(rev, rev=rev)}\n'
3583 hg: parse error: duplicated dict key 'rev' inferred
3584 hg: parse error: duplicated dict key 'rev' inferred
3584 [255]
3585 [255]
3585 $ hg log -r 0 -T '{dict(node, node|short)}\n'
3586 $ hg log -r 0 -T '{dict(node, node|short)}\n'
3586 hg: parse error: duplicated dict key 'node' inferred
3587 hg: parse error: duplicated dict key 'node' inferred
3587 [255]
3588 [255]
3588 $ hg log -r 0 -T '{dict(1 + 2)}'
3589 $ hg log -r 0 -T '{dict(1 + 2)}'
3589 hg: parse error: dict key cannot be inferred
3590 hg: parse error: dict key cannot be inferred
3590 [255]
3591 [255]
3591
3592
3592 $ hg log -r 0 -T '{dict(x=rev, x=node)}'
3593 $ hg log -r 0 -T '{dict(x=rev, x=node)}'
3593 hg: parse error: dict got multiple values for keyword argument 'x'
3594 hg: parse error: dict got multiple values for keyword argument 'x'
3594 [255]
3595 [255]
3595
3596
3596 Test get function:
3597 Test get function:
3597
3598
3598 $ hg log -r 0 --template '{get(extras, "branch")}\n'
3599 $ hg log -r 0 --template '{get(extras, "branch")}\n'
3599 default
3600 default
3600 $ hg log -r 0 --template '{get(extras, "br{"anch"}")}\n'
3601 $ hg log -r 0 --template '{get(extras, "br{"anch"}")}\n'
3601 default
3602 default
3602 $ hg log -r 0 --template '{get(files, "should_fail")}\n'
3603 $ hg log -r 0 --template '{get(files, "should_fail")}\n'
3603 hg: parse error: get() expects a dict as first argument
3604 hg: parse error: get() expects a dict as first argument
3604 [255]
3605 [255]
3605
3606
3606 Test json filter applied to hybrid object:
3607 Test json filter applied to hybrid object:
3607
3608
3608 $ hg log -r0 -T '{files|json}\n'
3609 $ hg log -r0 -T '{files|json}\n'
3609 ["a"]
3610 ["a"]
3610 $ hg log -r0 -T '{extras|json}\n'
3611 $ hg log -r0 -T '{extras|json}\n'
3611 {"branch": "default"}
3612 {"branch": "default"}
3612
3613
3613 Test localdate(date, tz) function:
3614 Test localdate(date, tz) function:
3614
3615
3615 $ TZ=JST-09 hg log -r0 -T '{date|localdate|isodate}\n'
3616 $ TZ=JST-09 hg log -r0 -T '{date|localdate|isodate}\n'
3616 1970-01-01 09:00 +0900
3617 1970-01-01 09:00 +0900
3617 $ TZ=JST-09 hg log -r0 -T '{localdate(date, "UTC")|isodate}\n'
3618 $ TZ=JST-09 hg log -r0 -T '{localdate(date, "UTC")|isodate}\n'
3618 1970-01-01 00:00 +0000
3619 1970-01-01 00:00 +0000
3619 $ TZ=JST-09 hg log -r0 -T '{localdate(date, "blahUTC")|isodate}\n'
3620 $ TZ=JST-09 hg log -r0 -T '{localdate(date, "blahUTC")|isodate}\n'
3620 hg: parse error: localdate expects a timezone
3621 hg: parse error: localdate expects a timezone
3621 [255]
3622 [255]
3622 $ TZ=JST-09 hg log -r0 -T '{localdate(date, "+0200")|isodate}\n'
3623 $ TZ=JST-09 hg log -r0 -T '{localdate(date, "+0200")|isodate}\n'
3623 1970-01-01 02:00 +0200
3624 1970-01-01 02:00 +0200
3624 $ TZ=JST-09 hg log -r0 -T '{localdate(date, "0")|isodate}\n'
3625 $ TZ=JST-09 hg log -r0 -T '{localdate(date, "0")|isodate}\n'
3625 1970-01-01 00:00 +0000
3626 1970-01-01 00:00 +0000
3626 $ TZ=JST-09 hg log -r0 -T '{localdate(date, 0)|isodate}\n'
3627 $ TZ=JST-09 hg log -r0 -T '{localdate(date, 0)|isodate}\n'
3627 1970-01-01 00:00 +0000
3628 1970-01-01 00:00 +0000
3628 $ hg log -r0 -T '{localdate(date, "invalid")|isodate}\n'
3629 $ hg log -r0 -T '{localdate(date, "invalid")|isodate}\n'
3629 hg: parse error: localdate expects a timezone
3630 hg: parse error: localdate expects a timezone
3630 [255]
3631 [255]
3631 $ hg log -r0 -T '{localdate(date, date)|isodate}\n'
3632 $ hg log -r0 -T '{localdate(date, date)|isodate}\n'
3632 hg: parse error: localdate expects a timezone
3633 hg: parse error: localdate expects a timezone
3633 [255]
3634 [255]
3634
3635
3635 Test shortest(node) function:
3636 Test shortest(node) function:
3636
3637
3637 $ echo b > b
3638 $ echo b > b
3638 $ hg ci -qAm b
3639 $ hg ci -qAm b
3639 $ hg log --template '{shortest(node)}\n'
3640 $ hg log --template '{shortest(node)}\n'
3640 e777
3641 e777
3641 bcc7
3642 bcc7
3642 f776
3643 f776
3643 $ hg log --template '{shortest(node, 10)}\n'
3644 $ hg log --template '{shortest(node, 10)}\n'
3644 e777603221
3645 e777603221
3645 bcc7ff960b
3646 bcc7ff960b
3646 f7769ec2ab
3647 f7769ec2ab
3647 $ hg log --template '{node|shortest}\n' -l1
3648 $ hg log --template '{node|shortest}\n' -l1
3648 e777
3649 e777
3649
3650
3650 $ hg log -r 0 -T '{shortest(node, "1{"0"}")}\n'
3651 $ hg log -r 0 -T '{shortest(node, "1{"0"}")}\n'
3651 f7769ec2ab
3652 f7769ec2ab
3652 $ hg log -r 0 -T '{shortest(node, "not an int")}\n'
3653 $ hg log -r 0 -T '{shortest(node, "not an int")}\n'
3653 hg: parse error: shortest() expects an integer minlength
3654 hg: parse error: shortest() expects an integer minlength
3654 [255]
3655 [255]
3655
3656
3656 $ hg log -r 'wdir()' -T '{node|shortest}\n'
3657 $ hg log -r 'wdir()' -T '{node|shortest}\n'
3657 ffff
3658 ffff
3658
3659
3659 $ cd ..
3660 $ cd ..
3660
3661
3661 Test shortest(node) with the repo having short hash collision:
3662 Test shortest(node) with the repo having short hash collision:
3662
3663
3663 $ hg init hashcollision
3664 $ hg init hashcollision
3664 $ cd hashcollision
3665 $ cd hashcollision
3665 $ cat <<EOF >> .hg/hgrc
3666 $ cat <<EOF >> .hg/hgrc
3666 > [experimental]
3667 > [experimental]
3667 > stabilization = createmarkers
3668 > stabilization = createmarkers
3668 > EOF
3669 > EOF
3669 $ echo 0 > a
3670 $ echo 0 > a
3670 $ hg ci -qAm 0
3671 $ hg ci -qAm 0
3671 $ for i in 17 129 248 242 480 580 617 1057 2857 4025; do
3672 $ for i in 17 129 248 242 480 580 617 1057 2857 4025; do
3672 > hg up -q 0
3673 > hg up -q 0
3673 > echo $i > a
3674 > echo $i > a
3674 > hg ci -qm $i
3675 > hg ci -qm $i
3675 > done
3676 > done
3676 $ hg up -q null
3677 $ hg up -q null
3677 $ hg log -r0: -T '{rev}:{node}\n'
3678 $ hg log -r0: -T '{rev}:{node}\n'
3678 0:b4e73ffab476aa0ee32ed81ca51e07169844bc6a
3679 0:b4e73ffab476aa0ee32ed81ca51e07169844bc6a
3679 1:11424df6dc1dd4ea255eae2b58eaca7831973bbc
3680 1:11424df6dc1dd4ea255eae2b58eaca7831973bbc
3680 2:11407b3f1b9c3e76a79c1ec5373924df096f0499
3681 2:11407b3f1b9c3e76a79c1ec5373924df096f0499
3681 3:11dd92fe0f39dfdaacdaa5f3997edc533875cfc4
3682 3:11dd92fe0f39dfdaacdaa5f3997edc533875cfc4
3682 4:10776689e627b465361ad5c296a20a487e153ca4
3683 4:10776689e627b465361ad5c296a20a487e153ca4
3683 5:a00be79088084cb3aff086ab799f8790e01a976b
3684 5:a00be79088084cb3aff086ab799f8790e01a976b
3684 6:a0b0acd79b4498d0052993d35a6a748dd51d13e6
3685 6:a0b0acd79b4498d0052993d35a6a748dd51d13e6
3685 7:a0457b3450b8e1b778f1163b31a435802987fe5d
3686 7:a0457b3450b8e1b778f1163b31a435802987fe5d
3686 8:c56256a09cd28e5764f32e8e2810d0f01e2e357a
3687 8:c56256a09cd28e5764f32e8e2810d0f01e2e357a
3687 9:c5623987d205cd6d9d8389bfc40fff9dbb670b48
3688 9:c5623987d205cd6d9d8389bfc40fff9dbb670b48
3688 10:c562ddd9c94164376c20b86b0b4991636a3bf84f
3689 10:c562ddd9c94164376c20b86b0b4991636a3bf84f
3689 $ hg debugobsolete a00be79088084cb3aff086ab799f8790e01a976b
3690 $ hg debugobsolete a00be79088084cb3aff086ab799f8790e01a976b
3690 obsoleted 1 changesets
3691 obsoleted 1 changesets
3691 $ hg debugobsolete c5623987d205cd6d9d8389bfc40fff9dbb670b48
3692 $ hg debugobsolete c5623987d205cd6d9d8389bfc40fff9dbb670b48
3692 obsoleted 1 changesets
3693 obsoleted 1 changesets
3693 $ hg debugobsolete c562ddd9c94164376c20b86b0b4991636a3bf84f
3694 $ hg debugobsolete c562ddd9c94164376c20b86b0b4991636a3bf84f
3694 obsoleted 1 changesets
3695 obsoleted 1 changesets
3695
3696
3696 nodes starting with '11' (we don't have the revision number '11' though)
3697 nodes starting with '11' (we don't have the revision number '11' though)
3697
3698
3698 $ hg log -r 1:3 -T '{rev}:{shortest(node, 0)}\n'
3699 $ hg log -r 1:3 -T '{rev}:{shortest(node, 0)}\n'
3699 1:1142
3700 1:1142
3700 2:1140
3701 2:1140
3701 3:11d
3702 3:11d
3702
3703
3703 '5:a00' is hidden, but still we have two nodes starting with 'a0'
3704 '5:a00' is hidden, but still we have two nodes starting with 'a0'
3704
3705
3705 $ hg log -r 6:7 -T '{rev}:{shortest(node, 0)}\n'
3706 $ hg log -r 6:7 -T '{rev}:{shortest(node, 0)}\n'
3706 6:a0b
3707 6:a0b
3707 7:a04
3708 7:a04
3708
3709
3709 node '10' conflicts with the revision number '10' even if it is hidden
3710 node '10' conflicts with the revision number '10' even if it is hidden
3710 (we could exclude hidden revision numbers, but currently we don't)
3711 (we could exclude hidden revision numbers, but currently we don't)
3711
3712
3712 $ hg log -r 4 -T '{rev}:{shortest(node, 0)}\n'
3713 $ hg log -r 4 -T '{rev}:{shortest(node, 0)}\n'
3713 4:107
3714 4:107
3714 $ hg log -r 4 -T '{rev}:{shortest(node, 0)}\n' --hidden
3715 $ hg log -r 4 -T '{rev}:{shortest(node, 0)}\n' --hidden
3715 4:107
3716 4:107
3716
3717
3717 node 'c562' should be unique if the other 'c562' nodes are hidden
3718 node 'c562' should be unique if the other 'c562' nodes are hidden
3718 (but we don't try the slow path to filter out hidden nodes for now)
3719 (but we don't try the slow path to filter out hidden nodes for now)
3719
3720
3720 $ hg log -r 8 -T '{rev}:{node|shortest}\n'
3721 $ hg log -r 8 -T '{rev}:{node|shortest}\n'
3721 8:c5625
3722 8:c5625
3722 $ hg log -r 8:10 -T '{rev}:{node|shortest}\n' --hidden
3723 $ hg log -r 8:10 -T '{rev}:{node|shortest}\n' --hidden
3723 8:c5625
3724 8:c5625
3724 9:c5623
3725 9:c5623
3725 10:c562d
3726 10:c562d
3726
3727
3727 $ cd ..
3728 $ cd ..
3728
3729
3729 Test pad function
3730 Test pad function
3730
3731
3731 $ cd r
3732 $ cd r
3732
3733
3733 $ hg log --template '{pad(rev, 20)} {author|user}\n'
3734 $ hg log --template '{pad(rev, 20)} {author|user}\n'
3734 2 test
3735 2 test
3735 1 {node|short}
3736 1 {node|short}
3736 0 test
3737 0 test
3737
3738
3738 $ hg log --template '{pad(rev, 20, " ", True)} {author|user}\n'
3739 $ hg log --template '{pad(rev, 20, " ", True)} {author|user}\n'
3739 2 test
3740 2 test
3740 1 {node|short}
3741 1 {node|short}
3741 0 test
3742 0 test
3742
3743
3743 $ hg log --template '{pad(rev, 20, "-", False)} {author|user}\n'
3744 $ hg log --template '{pad(rev, 20, "-", False)} {author|user}\n'
3744 2------------------- test
3745 2------------------- test
3745 1------------------- {node|short}
3746 1------------------- {node|short}
3746 0------------------- test
3747 0------------------- test
3747
3748
3748 Test template string in pad function
3749 Test template string in pad function
3749
3750
3750 $ hg log -r 0 -T '{pad("\{{rev}}", 10)} {author|user}\n'
3751 $ hg log -r 0 -T '{pad("\{{rev}}", 10)} {author|user}\n'
3751 {0} test
3752 {0} test
3752
3753
3753 $ hg log -r 0 -T '{pad(r"\{rev}", 10)} {author|user}\n'
3754 $ hg log -r 0 -T '{pad(r"\{rev}", 10)} {author|user}\n'
3754 \{rev} test
3755 \{rev} test
3755
3756
3756 Test width argument passed to pad function
3757 Test width argument passed to pad function
3757
3758
3758 $ hg log -r 0 -T '{pad(rev, "1{"0"}")} {author|user}\n'
3759 $ hg log -r 0 -T '{pad(rev, "1{"0"}")} {author|user}\n'
3759 0 test
3760 0 test
3760 $ hg log -r 0 -T '{pad(rev, "not an int")}\n'
3761 $ hg log -r 0 -T '{pad(rev, "not an int")}\n'
3761 hg: parse error: pad() expects an integer width
3762 hg: parse error: pad() expects an integer width
3762 [255]
3763 [255]
3763
3764
3764 Test invalid fillchar passed to pad function
3765 Test invalid fillchar passed to pad function
3765
3766
3766 $ hg log -r 0 -T '{pad(rev, 10, "")}\n'
3767 $ hg log -r 0 -T '{pad(rev, 10, "")}\n'
3767 hg: parse error: pad() expects a single fill character
3768 hg: parse error: pad() expects a single fill character
3768 [255]
3769 [255]
3769 $ hg log -r 0 -T '{pad(rev, 10, "--")}\n'
3770 $ hg log -r 0 -T '{pad(rev, 10, "--")}\n'
3770 hg: parse error: pad() expects a single fill character
3771 hg: parse error: pad() expects a single fill character
3771 [255]
3772 [255]
3772
3773
3773 Test boolean argument passed to pad function
3774 Test boolean argument passed to pad function
3774
3775
3775 no crash
3776 no crash
3776
3777
3777 $ hg log -r 0 -T '{pad(rev, 10, "-", "f{"oo"}")}\n'
3778 $ hg log -r 0 -T '{pad(rev, 10, "-", "f{"oo"}")}\n'
3778 ---------0
3779 ---------0
3779
3780
3780 string/literal
3781 string/literal
3781
3782
3782 $ hg log -r 0 -T '{pad(rev, 10, "-", "false")}\n'
3783 $ hg log -r 0 -T '{pad(rev, 10, "-", "false")}\n'
3783 ---------0
3784 ---------0
3784 $ hg log -r 0 -T '{pad(rev, 10, "-", false)}\n'
3785 $ hg log -r 0 -T '{pad(rev, 10, "-", false)}\n'
3785 0---------
3786 0---------
3786 $ hg log -r 0 -T '{pad(rev, 10, "-", "")}\n'
3787 $ hg log -r 0 -T '{pad(rev, 10, "-", "")}\n'
3787 0---------
3788 0---------
3788
3789
3789 unknown keyword is evaluated to ''
3790 unknown keyword is evaluated to ''
3790
3791
3791 $ hg log -r 0 -T '{pad(rev, 10, "-", unknownkeyword)}\n'
3792 $ hg log -r 0 -T '{pad(rev, 10, "-", unknownkeyword)}\n'
3792 0---------
3793 0---------
3793
3794
3794 Test separate function
3795 Test separate function
3795
3796
3796 $ hg log -r 0 -T '{separate("-", "", "a", "b", "", "", "c", "")}\n'
3797 $ hg log -r 0 -T '{separate("-", "", "a", "b", "", "", "c", "")}\n'
3797 a-b-c
3798 a-b-c
3798 $ hg log -r 0 -T '{separate(" ", "{rev}:{node|short}", author|user, branch)}\n'
3799 $ hg log -r 0 -T '{separate(" ", "{rev}:{node|short}", author|user, branch)}\n'
3799 0:f7769ec2ab97 test default
3800 0:f7769ec2ab97 test default
3800 $ hg log -r 0 --color=always -T '{separate(" ", "a", label(red, "b"), "c", label(red, ""), "d")}\n'
3801 $ hg log -r 0 --color=always -T '{separate(" ", "a", label(red, "b"), "c", label(red, ""), "d")}\n'
3801 a \x1b[0;31mb\x1b[0m c d (esc)
3802 a \x1b[0;31mb\x1b[0m c d (esc)
3802
3803
3803 Test boolean expression/literal passed to if function
3804 Test boolean expression/literal passed to if function
3804
3805
3805 $ hg log -r 0 -T '{if(rev, "rev 0 is True")}\n'
3806 $ hg log -r 0 -T '{if(rev, "rev 0 is True")}\n'
3806 rev 0 is True
3807 rev 0 is True
3807 $ hg log -r 0 -T '{if(0, "literal 0 is True as well")}\n'
3808 $ hg log -r 0 -T '{if(0, "literal 0 is True as well")}\n'
3808 literal 0 is True as well
3809 literal 0 is True as well
3809 $ hg log -r 0 -T '{if("", "", "empty string is False")}\n'
3810 $ hg log -r 0 -T '{if("", "", "empty string is False")}\n'
3810 empty string is False
3811 empty string is False
3811 $ hg log -r 0 -T '{if(revset(r"0 - 0"), "", "empty list is False")}\n'
3812 $ hg log -r 0 -T '{if(revset(r"0 - 0"), "", "empty list is False")}\n'
3812 empty list is False
3813 empty list is False
3813 $ hg log -r 0 -T '{if(true, "true is True")}\n'
3814 $ hg log -r 0 -T '{if(true, "true is True")}\n'
3814 true is True
3815 true is True
3815 $ hg log -r 0 -T '{if(false, "", "false is False")}\n'
3816 $ hg log -r 0 -T '{if(false, "", "false is False")}\n'
3816 false is False
3817 false is False
3817 $ hg log -r 0 -T '{if("false", "non-empty string is True")}\n'
3818 $ hg log -r 0 -T '{if("false", "non-empty string is True")}\n'
3818 non-empty string is True
3819 non-empty string is True
3819
3820
3820 Test ifcontains function
3821 Test ifcontains function
3821
3822
3822 $ hg log --template '{rev} {ifcontains(rev, "2 two 0", "is in the string", "is not")}\n'
3823 $ hg log --template '{rev} {ifcontains(rev, "2 two 0", "is in the string", "is not")}\n'
3823 2 is in the string
3824 2 is in the string
3824 1 is not
3825 1 is not
3825 0 is in the string
3826 0 is in the string
3826
3827
3827 $ hg log -T '{rev} {ifcontains(rev, "2 two{" 0"}", "is in the string", "is not")}\n'
3828 $ hg log -T '{rev} {ifcontains(rev, "2 two{" 0"}", "is in the string", "is not")}\n'
3828 2 is in the string
3829 2 is in the string
3829 1 is not
3830 1 is not
3830 0 is in the string
3831 0 is in the string
3831
3832
3832 $ hg log --template '{rev} {ifcontains("a", file_adds, "added a", "did not add a")}\n'
3833 $ hg log --template '{rev} {ifcontains("a", file_adds, "added a", "did not add a")}\n'
3833 2 did not add a
3834 2 did not add a
3834 1 did not add a
3835 1 did not add a
3835 0 added a
3836 0 added a
3836
3837
3837 $ hg log --debug -T '{rev}{ifcontains(1, parents, " is parent of 1")}\n'
3838 $ hg log --debug -T '{rev}{ifcontains(1, parents, " is parent of 1")}\n'
3838 2 is parent of 1
3839 2 is parent of 1
3839 1
3840 1
3840 0
3841 0
3841
3842
3842 Test revset function
3843 Test revset function
3843
3844
3844 $ hg log --template '{rev} {ifcontains(rev, revset("."), "current rev", "not current rev")}\n'
3845 $ hg log --template '{rev} {ifcontains(rev, revset("."), "current rev", "not current rev")}\n'
3845 2 current rev
3846 2 current rev
3846 1 not current rev
3847 1 not current rev
3847 0 not current rev
3848 0 not current rev
3848
3849
3849 $ hg log --template '{rev} {ifcontains(rev, revset(". + .^"), "match rev", "not match rev")}\n'
3850 $ hg log --template '{rev} {ifcontains(rev, revset(". + .^"), "match rev", "not match rev")}\n'
3850 2 match rev
3851 2 match rev
3851 1 match rev
3852 1 match rev
3852 0 not match rev
3853 0 not match rev
3853
3854
3854 $ hg log --template '{rev} Parents: {revset("parents(%s)", rev)}\n'
3855 $ hg log --template '{rev} Parents: {revset("parents(%s)", rev)}\n'
3855 2 Parents: 1
3856 2 Parents: 1
3856 1 Parents: 0
3857 1 Parents: 0
3857 0 Parents:
3858 0 Parents:
3858
3859
3859 $ cat >> .hg/hgrc <<EOF
3860 $ cat >> .hg/hgrc <<EOF
3860 > [revsetalias]
3861 > [revsetalias]
3861 > myparents(\$1) = parents(\$1)
3862 > myparents(\$1) = parents(\$1)
3862 > EOF
3863 > EOF
3863 $ hg log --template '{rev} Parents: {revset("myparents(%s)", rev)}\n'
3864 $ hg log --template '{rev} Parents: {revset("myparents(%s)", rev)}\n'
3864 2 Parents: 1
3865 2 Parents: 1
3865 1 Parents: 0
3866 1 Parents: 0
3866 0 Parents:
3867 0 Parents:
3867
3868
3868 $ hg log --template 'Rev: {rev}\n{revset("::%s", rev) % "Ancestor: {revision}\n"}\n'
3869 $ hg log --template 'Rev: {rev}\n{revset("::%s", rev) % "Ancestor: {revision}\n"}\n'
3869 Rev: 2
3870 Rev: 2
3870 Ancestor: 0
3871 Ancestor: 0
3871 Ancestor: 1
3872 Ancestor: 1
3872 Ancestor: 2
3873 Ancestor: 2
3873
3874
3874 Rev: 1
3875 Rev: 1
3875 Ancestor: 0
3876 Ancestor: 0
3876 Ancestor: 1
3877 Ancestor: 1
3877
3878
3878 Rev: 0
3879 Rev: 0
3879 Ancestor: 0
3880 Ancestor: 0
3880
3881
3881 $ hg log --template '{revset("TIP"|lower)}\n' -l1
3882 $ hg log --template '{revset("TIP"|lower)}\n' -l1
3882 2
3883 2
3883
3884
3884 $ hg log -T '{revset("%s", "t{"ip"}")}\n' -l1
3885 $ hg log -T '{revset("%s", "t{"ip"}")}\n' -l1
3885 2
3886 2
3886
3887
3887 a list template is evaluated for each item of revset/parents
3888 a list template is evaluated for each item of revset/parents
3888
3889
3889 $ hg log -T '{rev} p: {revset("p1(%s)", rev) % "{rev}:{node|short}"}\n'
3890 $ hg log -T '{rev} p: {revset("p1(%s)", rev) % "{rev}:{node|short}"}\n'
3890 2 p: 1:bcc7ff960b8e
3891 2 p: 1:bcc7ff960b8e
3891 1 p: 0:f7769ec2ab97
3892 1 p: 0:f7769ec2ab97
3892 0 p:
3893 0 p:
3893
3894
3894 $ hg log --debug -T '{rev} p:{parents % " {rev}:{node|short}"}\n'
3895 $ hg log --debug -T '{rev} p:{parents % " {rev}:{node|short}"}\n'
3895 2 p: 1:bcc7ff960b8e -1:000000000000
3896 2 p: 1:bcc7ff960b8e -1:000000000000
3896 1 p: 0:f7769ec2ab97 -1:000000000000
3897 1 p: 0:f7769ec2ab97 -1:000000000000
3897 0 p: -1:000000000000 -1:000000000000
3898 0 p: -1:000000000000 -1:000000000000
3898
3899
3899 therefore, 'revcache' should be recreated for each rev
3900 therefore, 'revcache' should be recreated for each rev
3900
3901
3901 $ hg log -T '{rev} {file_adds}\np {revset("p1(%s)", rev) % "{file_adds}"}\n'
3902 $ hg log -T '{rev} {file_adds}\np {revset("p1(%s)", rev) % "{file_adds}"}\n'
3902 2 aa b
3903 2 aa b
3903 p
3904 p
3904 1
3905 1
3905 p a
3906 p a
3906 0 a
3907 0 a
3907 p
3908 p
3908
3909
3909 $ hg log --debug -T '{rev} {file_adds}\np {parents % "{file_adds}"}\n'
3910 $ hg log --debug -T '{rev} {file_adds}\np {parents % "{file_adds}"}\n'
3910 2 aa b
3911 2 aa b
3911 p
3912 p
3912 1
3913 1
3913 p a
3914 p a
3914 0 a
3915 0 a
3915 p
3916 p
3916
3917
3917 a revset item must be evaluated as an integer revision, not an offset from tip
3918 a revset item must be evaluated as an integer revision, not an offset from tip
3918
3919
3919 $ hg log -l 1 -T '{revset("null") % "{rev}:{node|short}"}\n'
3920 $ hg log -l 1 -T '{revset("null") % "{rev}:{node|short}"}\n'
3920 -1:000000000000
3921 -1:000000000000
3921 $ hg log -l 1 -T '{revset("%s", "null") % "{rev}:{node|short}"}\n'
3922 $ hg log -l 1 -T '{revset("%s", "null") % "{rev}:{node|short}"}\n'
3922 -1:000000000000
3923 -1:000000000000
3923
3924
3924 join() should pick '{rev}' from revset items:
3925 join() should pick '{rev}' from revset items:
3925
3926
3926 $ hg log -R ../a -T '{join(revset("parents(%d)", rev), ", ")}\n' -r6
3927 $ hg log -R ../a -T '{join(revset("parents(%d)", rev), ", ")}\n' -r6
3927 4, 5
3928 4, 5
3928
3929
3929 on the other hand, parents are formatted as '{rev}:{node|formatnode}' by
3930 on the other hand, parents are formatted as '{rev}:{node|formatnode}' by
3930 default. join() should agree with the default formatting:
3931 default. join() should agree with the default formatting:
3931
3932
3932 $ hg log -R ../a -T '{join(parents, ", ")}\n' -r6
3933 $ hg log -R ../a -T '{join(parents, ", ")}\n' -r6
3933 5:13207e5a10d9, 4:bbe44766e73d
3934 5:13207e5a10d9, 4:bbe44766e73d
3934
3935
3935 $ hg log -R ../a -T '{join(parents, ",\n")}\n' -r6 --debug
3936 $ hg log -R ../a -T '{join(parents, ",\n")}\n' -r6 --debug
3936 5:13207e5a10d9fd28ec424934298e176197f2c67f,
3937 5:13207e5a10d9fd28ec424934298e176197f2c67f,
3937 4:bbe44766e73d5f11ed2177f1838de10c53ef3e74
3938 4:bbe44766e73d5f11ed2177f1838de10c53ef3e74
3938
3939
3939 Test files function
3940 Test files function
3940
3941
3941 $ hg log -T "{rev}\n{join(files('*'), '\n')}\n"
3942 $ hg log -T "{rev}\n{join(files('*'), '\n')}\n"
3942 2
3943 2
3943 a
3944 a
3944 aa
3945 aa
3945 b
3946 b
3946 1
3947 1
3947 a
3948 a
3948 0
3949 0
3949 a
3950 a
3950
3951
3951 $ hg log -T "{rev}\n{join(files('aa'), '\n')}\n"
3952 $ hg log -T "{rev}\n{join(files('aa'), '\n')}\n"
3952 2
3953 2
3953 aa
3954 aa
3954 1
3955 1
3955
3956
3956 0
3957 0
3957
3958
3958
3959
3959 Test relpath function
3960 Test relpath function
3960
3961
3961 $ hg log -r0 -T '{files % "{file|relpath}\n"}'
3962 $ hg log -r0 -T '{files % "{file|relpath}\n"}'
3962 a
3963 a
3963 $ cd ..
3964 $ cd ..
3964 $ hg log -R r -r0 -T '{files % "{file|relpath}\n"}'
3965 $ hg log -R r -r0 -T '{files % "{file|relpath}\n"}'
3965 r/a
3966 r/a
3966 $ cd r
3967 $ cd r
3967
3968
3968 Test active bookmark templating
3969 Test active bookmark templating
3969
3970
3970 $ hg book foo
3971 $ hg book foo
3971 $ hg book bar
3972 $ hg book bar
3972 $ hg log --template "{rev} {bookmarks % '{bookmark}{ifeq(bookmark, active, \"*\")} '}\n"
3973 $ hg log --template "{rev} {bookmarks % '{bookmark}{ifeq(bookmark, active, \"*\")} '}\n"
3973 2 bar* foo
3974 2 bar* foo
3974 1
3975 1
3975 0
3976 0
3976 $ hg log --template "{rev} {activebookmark}\n"
3977 $ hg log --template "{rev} {activebookmark}\n"
3977 2 bar
3978 2 bar
3978 1
3979 1
3979 0
3980 0
3980 $ hg bookmarks --inactive bar
3981 $ hg bookmarks --inactive bar
3981 $ hg log --template "{rev} {activebookmark}\n"
3982 $ hg log --template "{rev} {activebookmark}\n"
3982 2
3983 2
3983 1
3984 1
3984 0
3985 0
3985 $ hg book -r1 baz
3986 $ hg book -r1 baz
3986 $ hg log --template "{rev} {join(bookmarks, ' ')}\n"
3987 $ hg log --template "{rev} {join(bookmarks, ' ')}\n"
3987 2 bar foo
3988 2 bar foo
3988 1 baz
3989 1 baz
3989 0
3990 0
3990 $ hg log --template "{rev} {ifcontains('foo', bookmarks, 't', 'f')}\n"
3991 $ hg log --template "{rev} {ifcontains('foo', bookmarks, 't', 'f')}\n"
3991 2 t
3992 2 t
3992 1 f
3993 1 f
3993 0 f
3994 0 f
3994
3995
3995 Test namespaces dict
3996 Test namespaces dict
3996
3997
3997 $ hg --config extensions.revnamesext=$TESTDIR/revnamesext.py log -T '{rev}\n{namespaces % " {namespace} color={colorname} builtin={builtin}\n {join(names, ",")}\n"}\n'
3998 $ hg --config extensions.revnamesext=$TESTDIR/revnamesext.py log -T '{rev}\n{namespaces % " {namespace} color={colorname} builtin={builtin}\n {join(names, ",")}\n"}\n'
3998 2
3999 2
3999 bookmarks color=bookmark builtin=True
4000 bookmarks color=bookmark builtin=True
4000 bar,foo
4001 bar,foo
4001 tags color=tag builtin=True
4002 tags color=tag builtin=True
4002 tip
4003 tip
4003 branches color=branch builtin=True
4004 branches color=branch builtin=True
4004 text.{rev}
4005 text.{rev}
4005 revnames color=revname builtin=False
4006 revnames color=revname builtin=False
4006 r2
4007 r2
4007
4008
4008 1
4009 1
4009 bookmarks color=bookmark builtin=True
4010 bookmarks color=bookmark builtin=True
4010 baz
4011 baz
4011 tags color=tag builtin=True
4012 tags color=tag builtin=True
4012
4013
4013 branches color=branch builtin=True
4014 branches color=branch builtin=True
4014 text.{rev}
4015 text.{rev}
4015 revnames color=revname builtin=False
4016 revnames color=revname builtin=False
4016 r1
4017 r1
4017
4018
4018 0
4019 0
4019 bookmarks color=bookmark builtin=True
4020 bookmarks color=bookmark builtin=True
4020
4021
4021 tags color=tag builtin=True
4022 tags color=tag builtin=True
4022
4023
4023 branches color=branch builtin=True
4024 branches color=branch builtin=True
4024 default
4025 default
4025 revnames color=revname builtin=False
4026 revnames color=revname builtin=False
4026 r0
4027 r0
4027
4028
4028 $ hg log -r2 -T '{namespaces % "{namespace}: {names}\n"}'
4029 $ hg log -r2 -T '{namespaces % "{namespace}: {names}\n"}'
4029 bookmarks: bar foo
4030 bookmarks: bar foo
4030 tags: tip
4031 tags: tip
4031 branches: text.{rev}
4032 branches: text.{rev}
4032 $ hg log -r2 -T '{namespaces % "{namespace}:\n{names % " {name}\n"}"}'
4033 $ hg log -r2 -T '{namespaces % "{namespace}:\n{names % " {name}\n"}"}'
4033 bookmarks:
4034 bookmarks:
4034 bar
4035 bar
4035 foo
4036 foo
4036 tags:
4037 tags:
4037 tip
4038 tip
4038 branches:
4039 branches:
4039 text.{rev}
4040 text.{rev}
4040 $ hg log -r2 -T '{get(namespaces, "bookmarks") % "{name}\n"}'
4041 $ hg log -r2 -T '{get(namespaces, "bookmarks") % "{name}\n"}'
4041 bar
4042 bar
4042 foo
4043 foo
4043
4044
4044 Test stringify on sub expressions
4045 Test stringify on sub expressions
4045
4046
4046 $ cd ..
4047 $ cd ..
4047 $ hg log -R a -r 8 --template '{join(files, if("1", if("1", ", ")))}\n'
4048 $ hg log -R a -r 8 --template '{join(files, if("1", if("1", ", ")))}\n'
4048 fourth, second, third
4049 fourth, second, third
4049 $ hg log -R a -r 8 --template '{strip(if("1", if("1", "-abc-")), if("1", if("1", "-")))}\n'
4050 $ hg log -R a -r 8 --template '{strip(if("1", if("1", "-abc-")), if("1", if("1", "-")))}\n'
4050 abc
4051 abc
4051
4052
4052 Test splitlines
4053 Test splitlines
4053
4054
4054 $ hg log -Gv -R a --template "{splitlines(desc) % 'foo {line}\n'}"
4055 $ hg log -Gv -R a --template "{splitlines(desc) % 'foo {line}\n'}"
4055 @ foo Modify, add, remove, rename
4056 @ foo Modify, add, remove, rename
4056 |
4057 |
4057 o foo future
4058 o foo future
4058 |
4059 |
4059 o foo third
4060 o foo third
4060 |
4061 |
4061 o foo second
4062 o foo second
4062
4063
4063 o foo merge
4064 o foo merge
4064 |\
4065 |\
4065 | o foo new head
4066 | o foo new head
4066 | |
4067 | |
4067 o | foo new branch
4068 o | foo new branch
4068 |/
4069 |/
4069 o foo no user, no domain
4070 o foo no user, no domain
4070 |
4071 |
4071 o foo no person
4072 o foo no person
4072 |
4073 |
4073 o foo other 1
4074 o foo other 1
4074 | foo other 2
4075 | foo other 2
4075 | foo
4076 | foo
4076 | foo other 3
4077 | foo other 3
4077 o foo line 1
4078 o foo line 1
4078 foo line 2
4079 foo line 2
4079
4080
4080 $ hg log -R a -r0 -T '{desc|splitlines}\n'
4081 $ hg log -R a -r0 -T '{desc|splitlines}\n'
4081 line 1 line 2
4082 line 1 line 2
4082 $ hg log -R a -r0 -T '{join(desc|splitlines, "|")}\n'
4083 $ hg log -R a -r0 -T '{join(desc|splitlines, "|")}\n'
4083 line 1|line 2
4084 line 1|line 2
4084
4085
4085 Test startswith
4086 Test startswith
4086 $ hg log -Gv -R a --template "{startswith(desc)}"
4087 $ hg log -Gv -R a --template "{startswith(desc)}"
4087 hg: parse error: startswith expects two arguments
4088 hg: parse error: startswith expects two arguments
4088 [255]
4089 [255]
4089
4090
4090 $ hg log -Gv -R a --template "{startswith('line', desc)}"
4091 $ hg log -Gv -R a --template "{startswith('line', desc)}"
4091 @
4092 @
4092 |
4093 |
4093 o
4094 o
4094 |
4095 |
4095 o
4096 o
4096 |
4097 |
4097 o
4098 o
4098
4099
4099 o
4100 o
4100 |\
4101 |\
4101 | o
4102 | o
4102 | |
4103 | |
4103 o |
4104 o |
4104 |/
4105 |/
4105 o
4106 o
4106 |
4107 |
4107 o
4108 o
4108 |
4109 |
4109 o
4110 o
4110 |
4111 |
4111 o line 1
4112 o line 1
4112 line 2
4113 line 2
4113
4114
4114 Test bad template with better error message
4115 Test bad template with better error message
4115
4116
4116 $ hg log -Gv -R a --template '{desc|user()}'
4117 $ hg log -Gv -R a --template '{desc|user()}'
4117 hg: parse error: expected a symbol, got 'func'
4118 hg: parse error: expected a symbol, got 'func'
4118 [255]
4119 [255]
4119
4120
4120 Test word function (including index out of bounds graceful failure)
4121 Test word function (including index out of bounds graceful failure)
4121
4122
4122 $ hg log -Gv -R a --template "{word('1', desc)}"
4123 $ hg log -Gv -R a --template "{word('1', desc)}"
4123 @ add,
4124 @ add,
4124 |
4125 |
4125 o
4126 o
4126 |
4127 |
4127 o
4128 o
4128 |
4129 |
4129 o
4130 o
4130
4131
4131 o
4132 o
4132 |\
4133 |\
4133 | o head
4134 | o head
4134 | |
4135 | |
4135 o | branch
4136 o | branch
4136 |/
4137 |/
4137 o user,
4138 o user,
4138 |
4139 |
4139 o person
4140 o person
4140 |
4141 |
4141 o 1
4142 o 1
4142 |
4143 |
4143 o 1
4144 o 1
4144
4145
4145
4146
4146 Test word third parameter used as splitter
4147 Test word third parameter used as splitter
4147
4148
4148 $ hg log -Gv -R a --template "{word('0', desc, 'o')}"
4149 $ hg log -Gv -R a --template "{word('0', desc, 'o')}"
4149 @ M
4150 @ M
4150 |
4151 |
4151 o future
4152 o future
4152 |
4153 |
4153 o third
4154 o third
4154 |
4155 |
4155 o sec
4156 o sec
4156
4157
4157 o merge
4158 o merge
4158 |\
4159 |\
4159 | o new head
4160 | o new head
4160 | |
4161 | |
4161 o | new branch
4162 o | new branch
4162 |/
4163 |/
4163 o n
4164 o n
4164 |
4165 |
4165 o n
4166 o n
4166 |
4167 |
4167 o
4168 o
4168 |
4169 |
4169 o line 1
4170 o line 1
4170 line 2
4171 line 2
4171
4172
4172 Test word error messages for not enough and too many arguments
4173 Test word error messages for not enough and too many arguments
4173
4174
4174 $ hg log -Gv -R a --template "{word('0')}"
4175 $ hg log -Gv -R a --template "{word('0')}"
4175 hg: parse error: word expects two or three arguments, got 1
4176 hg: parse error: word expects two or three arguments, got 1
4176 [255]
4177 [255]
4177
4178
4178 $ hg log -Gv -R a --template "{word('0', desc, 'o', 'h', 'b', 'o', 'y')}"
4179 $ hg log -Gv -R a --template "{word('0', desc, 'o', 'h', 'b', 'o', 'y')}"
4179 hg: parse error: word expects two or three arguments, got 7
4180 hg: parse error: word expects two or three arguments, got 7
4180 [255]
4181 [255]
4181
4182
4182 Test word for integer literal
4183 Test word for integer literal
4183
4184
4184 $ hg log -R a --template "{word(2, desc)}\n" -r0
4185 $ hg log -R a --template "{word(2, desc)}\n" -r0
4185 line
4186 line
4186
4187
4187 Test word for invalid numbers
4188 Test word for invalid numbers
4188
4189
4189 $ hg log -Gv -R a --template "{word('a', desc)}"
4190 $ hg log -Gv -R a --template "{word('a', desc)}"
4190 hg: parse error: word expects an integer index
4191 hg: parse error: word expects an integer index
4191 [255]
4192 [255]
4192
4193
4193 Test word for out of range
4194 Test word for out of range
4194
4195
4195 $ hg log -R a --template "{word(10000, desc)}"
4196 $ hg log -R a --template "{word(10000, desc)}"
4196 $ hg log -R a --template "{word(-10000, desc)}"
4197 $ hg log -R a --template "{word(-10000, desc)}"
4197
4198
4198 Test indent and not adding to empty lines
4199 Test indent and not adding to empty lines
4199
4200
4200 $ hg log -T "-----\n{indent(desc, '>> ', ' > ')}\n" -r 0:1 -R a
4201 $ hg log -T "-----\n{indent(desc, '>> ', ' > ')}\n" -r 0:1 -R a
4201 -----
4202 -----
4202 > line 1
4203 > line 1
4203 >> line 2
4204 >> line 2
4204 -----
4205 -----
4205 > other 1
4206 > other 1
4206 >> other 2
4207 >> other 2
4207
4208
4208 >> other 3
4209 >> other 3
4209
4210
4210 Test with non-strings like dates
4211 Test with non-strings like dates
4211
4212
4212 $ hg log -T "{indent(date, ' ')}\n" -r 2:3 -R a
4213 $ hg log -T "{indent(date, ' ')}\n" -r 2:3 -R a
4213 1200000.00
4214 1200000.00
4214 1300000.00
4215 1300000.00
4215
4216
4216 Test broken string escapes:
4217 Test broken string escapes:
4217
4218
4218 $ hg log -T "bogus\\" -R a
4219 $ hg log -T "bogus\\" -R a
4219 hg: parse error: trailing \ in string
4220 hg: parse error: trailing \ in string
4220 [255]
4221 [255]
4221 $ hg log -T "\\xy" -R a
4222 $ hg log -T "\\xy" -R a
4222 hg: parse error: invalid \x escape
4223 hg: parse error: invalid \x escape
4223 [255]
4224 [255]
4224
4225
4225 json filter should escape HTML tags so that the output can be embedded in hgweb:
4226 json filter should escape HTML tags so that the output can be embedded in hgweb:
4226
4227
4227 $ hg log -T "{'<foo@example.org>'|json}\n" -R a -l1
4228 $ hg log -T "{'<foo@example.org>'|json}\n" -R a -l1
4228 "\u003cfoo@example.org\u003e"
4229 "\u003cfoo@example.org\u003e"
4229
4230
4230 Templater supports aliases of symbol and func() styles:
4231 Templater supports aliases of symbol and func() styles:
4231
4232
4232 $ hg clone -q a aliases
4233 $ hg clone -q a aliases
4233 $ cd aliases
4234 $ cd aliases
4234 $ cat <<EOF >> .hg/hgrc
4235 $ cat <<EOF >> .hg/hgrc
4235 > [templatealias]
4236 > [templatealias]
4236 > r = rev
4237 > r = rev
4237 > rn = "{r}:{node|short}"
4238 > rn = "{r}:{node|short}"
4238 > status(c, files) = files % "{c} {file}\n"
4239 > status(c, files) = files % "{c} {file}\n"
4239 > utcdate(d) = localdate(d, "UTC")
4240 > utcdate(d) = localdate(d, "UTC")
4240 > EOF
4241 > EOF
4241
4242
4242 $ hg debugtemplate -vr0 '{rn} {utcdate(date)|isodate}\n'
4243 $ hg debugtemplate -vr0 '{rn} {utcdate(date)|isodate}\n'
4243 (template
4244 (template
4244 ('symbol', 'rn')
4245 ('symbol', 'rn')
4245 ('string', ' ')
4246 ('string', ' ')
4246 (|
4247 (|
4247 (func
4248 (func
4248 ('symbol', 'utcdate')
4249 ('symbol', 'utcdate')
4249 ('symbol', 'date'))
4250 ('symbol', 'date'))
4250 ('symbol', 'isodate'))
4251 ('symbol', 'isodate'))
4251 ('string', '\n'))
4252 ('string', '\n'))
4252 * expanded:
4253 * expanded:
4253 (template
4254 (template
4254 (template
4255 (template
4255 ('symbol', 'rev')
4256 ('symbol', 'rev')
4256 ('string', ':')
4257 ('string', ':')
4257 (|
4258 (|
4258 ('symbol', 'node')
4259 ('symbol', 'node')
4259 ('symbol', 'short')))
4260 ('symbol', 'short')))
4260 ('string', ' ')
4261 ('string', ' ')
4261 (|
4262 (|
4262 (func
4263 (func
4263 ('symbol', 'localdate')
4264 ('symbol', 'localdate')
4264 (list
4265 (list
4265 ('symbol', 'date')
4266 ('symbol', 'date')
4266 ('string', 'UTC')))
4267 ('string', 'UTC')))
4267 ('symbol', 'isodate'))
4268 ('symbol', 'isodate'))
4268 ('string', '\n'))
4269 ('string', '\n'))
4269 0:1e4e1b8f71e0 1970-01-12 13:46 +0000
4270 0:1e4e1b8f71e0 1970-01-12 13:46 +0000
4270
4271
4271 $ hg debugtemplate -vr0 '{status("A", file_adds)}'
4272 $ hg debugtemplate -vr0 '{status("A", file_adds)}'
4272 (template
4273 (template
4273 (func
4274 (func
4274 ('symbol', 'status')
4275 ('symbol', 'status')
4275 (list
4276 (list
4276 ('string', 'A')
4277 ('string', 'A')
4277 ('symbol', 'file_adds'))))
4278 ('symbol', 'file_adds'))))
4278 * expanded:
4279 * expanded:
4279 (template
4280 (template
4280 (%
4281 (%
4281 ('symbol', 'file_adds')
4282 ('symbol', 'file_adds')
4282 (template
4283 (template
4283 ('string', 'A')
4284 ('string', 'A')
4284 ('string', ' ')
4285 ('string', ' ')
4285 ('symbol', 'file')
4286 ('symbol', 'file')
4286 ('string', '\n'))))
4287 ('string', '\n'))))
4287 A a
4288 A a
4288
4289
4289 A unary function alias can be called as a filter:
4290 A unary function alias can be called as a filter:
4290
4291
4291 $ hg debugtemplate -vr0 '{date|utcdate|isodate}\n'
4292 $ hg debugtemplate -vr0 '{date|utcdate|isodate}\n'
4292 (template
4293 (template
4293 (|
4294 (|
4294 (|
4295 (|
4295 ('symbol', 'date')
4296 ('symbol', 'date')
4296 ('symbol', 'utcdate'))
4297 ('symbol', 'utcdate'))
4297 ('symbol', 'isodate'))
4298 ('symbol', 'isodate'))
4298 ('string', '\n'))
4299 ('string', '\n'))
4299 * expanded:
4300 * expanded:
4300 (template
4301 (template
4301 (|
4302 (|
4302 (func
4303 (func
4303 ('symbol', 'localdate')
4304 ('symbol', 'localdate')
4304 (list
4305 (list
4305 ('symbol', 'date')
4306 ('symbol', 'date')
4306 ('string', 'UTC')))
4307 ('string', 'UTC')))
4307 ('symbol', 'isodate'))
4308 ('symbol', 'isodate'))
4308 ('string', '\n'))
4309 ('string', '\n'))
4309 1970-01-12 13:46 +0000
4310 1970-01-12 13:46 +0000
4310
4311
4311 Aliases should be applied only to command arguments and templates in hgrc.
4312 Aliases should be applied only to command arguments and templates in hgrc.
4312 Otherwise, our stock styles and web templates could be corrupted:
4313 Otherwise, our stock styles and web templates could be corrupted:
4313
4314
4314 $ hg log -r0 -T '{rn} {utcdate(date)|isodate}\n'
4315 $ hg log -r0 -T '{rn} {utcdate(date)|isodate}\n'
4315 0:1e4e1b8f71e0 1970-01-12 13:46 +0000
4316 0:1e4e1b8f71e0 1970-01-12 13:46 +0000
4316
4317
4317 $ hg log -r0 --config ui.logtemplate='"{rn} {utcdate(date)|isodate}\n"'
4318 $ hg log -r0 --config ui.logtemplate='"{rn} {utcdate(date)|isodate}\n"'
4318 0:1e4e1b8f71e0 1970-01-12 13:46 +0000
4319 0:1e4e1b8f71e0 1970-01-12 13:46 +0000
4319
4320
4320 $ cat <<EOF > tmpl
4321 $ cat <<EOF > tmpl
4321 > changeset = 'nothing expanded:{rn}\n'
4322 > changeset = 'nothing expanded:{rn}\n'
4322 > EOF
4323 > EOF
4323 $ hg log -r0 --style ./tmpl
4324 $ hg log -r0 --style ./tmpl
4324 nothing expanded:
4325 nothing expanded:
4325
4326
4326 Aliases in formatter:
4327 Aliases in formatter:
4327
4328
4328 $ hg branches -T '{pad(branch, 7)} {rn}\n'
4329 $ hg branches -T '{pad(branch, 7)} {rn}\n'
4329 default 6:d41e714fe50d
4330 default 6:d41e714fe50d
4330 foo 4:bbe44766e73d
4331 foo 4:bbe44766e73d
4331
4332
4332 Aliases should honor HGPLAIN:
4333 Aliases should honor HGPLAIN:
4333
4334
4334 $ HGPLAIN= hg log -r0 -T 'nothing expanded:{rn}\n'
4335 $ HGPLAIN= hg log -r0 -T 'nothing expanded:{rn}\n'
4335 nothing expanded:
4336 nothing expanded:
4336 $ HGPLAINEXCEPT=templatealias hg log -r0 -T '{rn}\n'
4337 $ HGPLAINEXCEPT=templatealias hg log -r0 -T '{rn}\n'
4337 0:1e4e1b8f71e0
4338 0:1e4e1b8f71e0
4338
4339
4339 Unparsable alias:
4340 Unparsable alias:
4340
4341
4341 $ hg debugtemplate --config templatealias.bad='x(' -v '{bad}'
4342 $ hg debugtemplate --config templatealias.bad='x(' -v '{bad}'
4342 (template
4343 (template
4343 ('symbol', 'bad'))
4344 ('symbol', 'bad'))
4344 abort: bad definition of template alias "bad": at 2: not a prefix: end
4345 abort: bad definition of template alias "bad": at 2: not a prefix: end
4345 [255]
4346 [255]
4346 $ hg log --config templatealias.bad='x(' -T '{bad}'
4347 $ hg log --config templatealias.bad='x(' -T '{bad}'
4347 abort: bad definition of template alias "bad": at 2: not a prefix: end
4348 abort: bad definition of template alias "bad": at 2: not a prefix: end
4348 [255]
4349 [255]
4349
4350
4350 $ cd ..
4351 $ cd ..
4351
4352
4352 Set up repository for non-ascii encoding tests:
4353 Set up repository for non-ascii encoding tests:
4353
4354
4354 $ hg init nonascii
4355 $ hg init nonascii
4355 $ cd nonascii
4356 $ cd nonascii
4356 $ $PYTHON <<EOF
4357 $ $PYTHON <<EOF
4357 > open('latin1', 'w').write('\xe9')
4358 > open('latin1', 'w').write('\xe9')
4358 > open('utf-8', 'w').write('\xc3\xa9')
4359 > open('utf-8', 'w').write('\xc3\xa9')
4359 > EOF
4360 > EOF
4360 $ HGENCODING=utf-8 hg branch -q `cat utf-8`
4361 $ HGENCODING=utf-8 hg branch -q `cat utf-8`
4361 $ HGENCODING=utf-8 hg ci -qAm "non-ascii branch: `cat utf-8`" utf-8
4362 $ HGENCODING=utf-8 hg ci -qAm "non-ascii branch: `cat utf-8`" utf-8
4362
4363
4363 json filter should try round-trip conversion to utf-8:
4364 json filter should try round-trip conversion to utf-8:
4364
4365
4365 $ HGENCODING=ascii hg log -T "{branch|json}\n" -r0
4366 $ HGENCODING=ascii hg log -T "{branch|json}\n" -r0
4366 "\u00e9"
4367 "\u00e9"
4367 $ HGENCODING=ascii hg log -T "{desc|json}\n" -r0
4368 $ HGENCODING=ascii hg log -T "{desc|json}\n" -r0
4368 "non-ascii branch: \u00e9"
4369 "non-ascii branch: \u00e9"
4369
4370
4370 json filter takes input as utf-8b:
4371 json filter takes input as utf-8b:
4371
4372
4372 $ HGENCODING=ascii hg log -T "{'`cat utf-8`'|json}\n" -l1
4373 $ HGENCODING=ascii hg log -T "{'`cat utf-8`'|json}\n" -l1
4373 "\u00e9"
4374 "\u00e9"
4374 $ HGENCODING=ascii hg log -T "{'`cat latin1`'|json}\n" -l1
4375 $ HGENCODING=ascii hg log -T "{'`cat latin1`'|json}\n" -l1
4375 "\udce9"
4376 "\udce9"
4376
4377
4377 utf8 filter:
4378 utf8 filter:
4378
4379
4379 $ HGENCODING=ascii hg log -T "round-trip: {branch|utf8|hex}\n" -r0
4380 $ HGENCODING=ascii hg log -T "round-trip: {branch|utf8|hex}\n" -r0
4380 round-trip: c3a9
4381 round-trip: c3a9
4381 $ HGENCODING=latin1 hg log -T "decoded: {'`cat latin1`'|utf8|hex}\n" -l1
4382 $ HGENCODING=latin1 hg log -T "decoded: {'`cat latin1`'|utf8|hex}\n" -l1
4382 decoded: c3a9
4383 decoded: c3a9
4383 $ HGENCODING=ascii hg log -T "replaced: {'`cat latin1`'|utf8|hex}\n" -l1
4384 $ HGENCODING=ascii hg log -T "replaced: {'`cat latin1`'|utf8|hex}\n" -l1
4384 abort: decoding near * (glob)
4385 abort: decoding near * (glob)
4385 [255]
4386 [255]
4386 $ hg log -T "invalid type: {rev|utf8}\n" -r0
4387 $ hg log -T "invalid type: {rev|utf8}\n" -r0
4387 abort: template filter 'utf8' is not compatible with keyword 'rev'
4388 abort: template filter 'utf8' is not compatible with keyword 'rev'
4388 [255]
4389 [255]
4389
4390
4390 pad width:
4391 pad width:
4391
4392
4392 $ HGENCODING=utf-8 hg debugtemplate "{pad('`cat utf-8`', 2, '-')}\n"
4393 $ HGENCODING=utf-8 hg debugtemplate "{pad('`cat utf-8`', 2, '-')}\n"
4393 \xc3\xa9- (esc)
4394 \xc3\xa9- (esc)
4394
4395
4395 $ cd ..
4396 $ cd ..
4396
4397
4397 Test that template function in extension is registered as expected
4398 Test that template function in extension is registered as expected
4398
4399
4399 $ cd a
4400 $ cd a
4400
4401
4401 $ cat <<EOF > $TESTTMP/customfunc.py
4402 $ cat <<EOF > $TESTTMP/customfunc.py
4402 > from mercurial import registrar
4403 > from mercurial import registrar
4403 >
4404 >
4404 > templatefunc = registrar.templatefunc()
4405 > templatefunc = registrar.templatefunc()
4405 >
4406 >
4406 > @templatefunc('custom()')
4407 > @templatefunc('custom()')
4407 > def custom(context, mapping, args):
4408 > def custom(context, mapping, args):
4408 > return 'custom'
4409 > return 'custom'
4409 > EOF
4410 > EOF
4410 $ cat <<EOF > .hg/hgrc
4411 $ cat <<EOF > .hg/hgrc
4411 > [extensions]
4412 > [extensions]
4412 > customfunc = $TESTTMP/customfunc.py
4413 > customfunc = $TESTTMP/customfunc.py
4413 > EOF
4414 > EOF
4414
4415
4415 $ hg log -r . -T "{custom()}\n" --config customfunc.enabled=true
4416 $ hg log -r . -T "{custom()}\n" --config customfunc.enabled=true
4416 custom
4417 custom
4417
4418
4418 $ cd ..
4419 $ cd ..
4419
4420
4420 Test 'graphwidth' in 'hg log' on various topologies. The key here is that the
4421 Test 'graphwidth' in 'hg log' on various topologies. The key here is that the
4421 printed graphwidths 3, 5, 7, etc. should all line up in their respective
4422 printed graphwidths 3, 5, 7, etc. should all line up in their respective
4422 columns. We don't care about other aspects of the graph rendering here.
4423 columns. We don't care about other aspects of the graph rendering here.
4423
4424
4424 $ hg init graphwidth
4425 $ hg init graphwidth
4425 $ cd graphwidth
4426 $ cd graphwidth
4426
4427
4427 $ wrappabletext="a a a a a a a a a a a a"
4428 $ wrappabletext="a a a a a a a a a a a a"
4428
4429
4429 $ printf "first\n" > file
4430 $ printf "first\n" > file
4430 $ hg add file
4431 $ hg add file
4431 $ hg commit -m "$wrappabletext"
4432 $ hg commit -m "$wrappabletext"
4432
4433
4433 $ printf "first\nsecond\n" > file
4434 $ printf "first\nsecond\n" > file
4434 $ hg commit -m "$wrappabletext"
4435 $ hg commit -m "$wrappabletext"
4435
4436
4436 $ hg checkout 0
4437 $ hg checkout 0
4437 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
4438 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
4438 $ printf "third\nfirst\n" > file
4439 $ printf "third\nfirst\n" > file
4439 $ hg commit -m "$wrappabletext"
4440 $ hg commit -m "$wrappabletext"
4440 created new head
4441 created new head
4441
4442
4442 $ hg merge
4443 $ hg merge
4443 merging file
4444 merging file
4444 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
4445 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
4445 (branch merge, don't forget to commit)
4446 (branch merge, don't forget to commit)
4446
4447
4447 $ hg log --graph -T "{graphwidth}"
4448 $ hg log --graph -T "{graphwidth}"
4448 @ 3
4449 @ 3
4449 |
4450 |
4450 | @ 5
4451 | @ 5
4451 |/
4452 |/
4452 o 3
4453 o 3
4453
4454
4454 $ hg commit -m "$wrappabletext"
4455 $ hg commit -m "$wrappabletext"
4455
4456
4456 $ hg log --graph -T "{graphwidth}"
4457 $ hg log --graph -T "{graphwidth}"
4457 @ 5
4458 @ 5
4458 |\
4459 |\
4459 | o 5
4460 | o 5
4460 | |
4461 | |
4461 o | 5
4462 o | 5
4462 |/
4463 |/
4463 o 3
4464 o 3
4464
4465
4465
4466
4466 $ hg checkout 0
4467 $ hg checkout 0
4467 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
4468 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
4468 $ printf "third\nfirst\nsecond\n" > file
4469 $ printf "third\nfirst\nsecond\n" > file
4469 $ hg commit -m "$wrappabletext"
4470 $ hg commit -m "$wrappabletext"
4470 created new head
4471 created new head
4471
4472
4472 $ hg log --graph -T "{graphwidth}"
4473 $ hg log --graph -T "{graphwidth}"
4473 @ 3
4474 @ 3
4474 |
4475 |
4475 | o 7
4476 | o 7
4476 | |\
4477 | |\
4477 +---o 7
4478 +---o 7
4478 | |
4479 | |
4479 | o 5
4480 | o 5
4480 |/
4481 |/
4481 o 3
4482 o 3
4482
4483
4483
4484
4484 $ hg log --graph -T "{graphwidth}" -r 3
4485 $ hg log --graph -T "{graphwidth}" -r 3
4485 o 5
4486 o 5
4486 |\
4487 |\
4487 ~ ~
4488 ~ ~
4488
4489
4489 $ hg log --graph -T "{graphwidth}" -r 1
4490 $ hg log --graph -T "{graphwidth}" -r 1
4490 o 3
4491 o 3
4491 |
4492 |
4492 ~
4493 ~
4493
4494
4494 $ hg merge
4495 $ hg merge
4495 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
4496 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
4496 (branch merge, don't forget to commit)
4497 (branch merge, don't forget to commit)
4497 $ hg commit -m "$wrappabletext"
4498 $ hg commit -m "$wrappabletext"
4498
4499
4499 $ printf "seventh\n" >> file
4500 $ printf "seventh\n" >> file
4500 $ hg commit -m "$wrappabletext"
4501 $ hg commit -m "$wrappabletext"
4501
4502
4502 $ hg log --graph -T "{graphwidth}"
4503 $ hg log --graph -T "{graphwidth}"
4503 @ 3
4504 @ 3
4504 |
4505 |
4505 o 5
4506 o 5
4506 |\
4507 |\
4507 | o 5
4508 | o 5
4508 | |
4509 | |
4509 o | 7
4510 o | 7
4510 |\ \
4511 |\ \
4511 | o | 7
4512 | o | 7
4512 | |/
4513 | |/
4513 o / 5
4514 o / 5
4514 |/
4515 |/
4515 o 3
4516 o 3
4516
4517
4517
4518
4518 The point of graphwidth is to allow wrapping that accounts for the space taken
4519 The point of graphwidth is to allow wrapping that accounts for the space taken
4519 by the graph.
4520 by the graph.
4520
4521
4521 $ COLUMNS=10 hg log --graph -T "{fill(desc, termwidth - graphwidth)}"
4522 $ COLUMNS=10 hg log --graph -T "{fill(desc, termwidth - graphwidth)}"
4522 @ a a a a
4523 @ a a a a
4523 | a a a a
4524 | a a a a
4524 | a a a a
4525 | a a a a
4525 o a a a
4526 o a a a
4526 |\ a a a
4527 |\ a a a
4527 | | a a a
4528 | | a a a
4528 | | a a a
4529 | | a a a
4529 | o a a a
4530 | o a a a
4530 | | a a a
4531 | | a a a
4531 | | a a a
4532 | | a a a
4532 | | a a a
4533 | | a a a
4533 o | a a
4534 o | a a
4534 |\ \ a a
4535 |\ \ a a
4535 | | | a a
4536 | | | a a
4536 | | | a a
4537 | | | a a
4537 | | | a a
4538 | | | a a
4538 | | | a a
4539 | | | a a
4539 | o | a a
4540 | o | a a
4540 | |/ a a
4541 | |/ a a
4541 | | a a
4542 | | a a
4542 | | a a
4543 | | a a
4543 | | a a
4544 | | a a
4544 | | a a
4545 | | a a
4545 o | a a a
4546 o | a a a
4546 |/ a a a
4547 |/ a a a
4547 | a a a
4548 | a a a
4548 | a a a
4549 | a a a
4549 o a a a a
4550 o a a a a
4550 a a a a
4551 a a a a
4551 a a a a
4552 a a a a
4552
4553
4553 Something tricky happens when there are elided nodes; the next drawn row of
4554 Something tricky happens when there are elided nodes; the next drawn row of
4554 edges can be more than one column wider, but the graph width only increases by
4555 edges can be more than one column wider, but the graph width only increases by
4555 one column. The remaining columns are added in between the nodes.
4556 one column. The remaining columns are added in between the nodes.
4556
4557
4557 $ hg log --graph -T "{graphwidth}" -r "0|2|4|5"
4558 $ hg log --graph -T "{graphwidth}" -r "0|2|4|5"
4558 o 5
4559 o 5
4559 |\
4560 |\
4560 | \
4561 | \
4561 | :\
4562 | :\
4562 o : : 7
4563 o : : 7
4563 :/ /
4564 :/ /
4564 : o 5
4565 : o 5
4565 :/
4566 :/
4566 o 3
4567 o 3
4567
4568
4568
4569
4569 $ cd ..
4570 $ cd ..
4570
4571
General Comments 0
You need to be logged in to leave comments. Login now