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