Mercurial > hg
annotate mercurial/templates/map-cmdline.default @ 22766:0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
This is a complete rewrite of the default template to use labels. This
seems ultimately useless to me in most cases. The biggest benefit of
this patch to me seems to be a fairly complicated example of the
templating engine. It was a lot of hard work to figure out the precise
acceptable syntax, since it's almost undocumented. Hat tip to Steve
Losh's smartlog template, which helped me figure out a lot of the
syntax. Hopefully later I can use the present default log template
as an example for documenting the templating engine.
A test is attached. My goal was to match the --color=debug output,
which may differ slightly in newlines from the actual ANSI escape
codes output. I consider this an acceptable invisible deviation.
There seems to be a considerable slowdown with this rewrite.
Before:
$ time hg log -T default -r .~100::. > /dev/null
real 0m0.882s
user 0m0.812s
sys 0m0.064s
$ time hg log -T default -r .~100::. > /dev/null
real 0m0.872s
user 0m0.796s
sys 0m0.068s
$ time hg log -T default -r .~100::. > /dev/null
real 0m0.917s
user 0m0.836s
sys 0m0.076s
After:
$ time hg log -T default -r .~100::. > /dev/null
real 0m1.480s
user 0m1.392s
sys 0m0.072s
$ time hg log -T default -r .~100::. > /dev/null
real 0m1.500s
user 0m1.400s
sys 0m0.088s
$ time hg log -T default -r .~100::. > /dev/null
real 0m1.462s
user 0m1.364s
sys 0m0.092s
Following the maxim, "make it work, profile, make it faster, in that
order", I deem this slowdown acceptable for now.
I suspect but have not confirmed that a big slowdown comes from
calling keywords twice in the file templates, once to test the
existence of output and again to actually list the output. If so, a
simple speedup might be to improve the templating engine to cache
keywords when called more than once on the same revision.
TODO: I found a bug while working on this. The following stack traces:
hg log -r . -T '{ifcontains(phase, "secret public", "lol", "omg")}\n'
author | Jordi Gutiérrez Hermoso <jordigh@octave.org> |
---|---|
date | Fri, 03 Oct 2014 19:48:56 -0400 |
parents | 51fc43253a52 |
children | 6136704b975d |
rev | line source |
---|---|
22766
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
1 # Base templates. Due to name clashes with existing keywords, we have |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
2 # to replace some keywords with 'lkeyword', for 'labelled keyword' |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
3 changeset = '{cset}{branches}{bookmarks}{tags}{parents}{user}{ldate}{summary}\n' |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
4 changeset_quiet = '{node}' |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
5 changeset_verbose = '{cset}{branches}{bookmarks}{tags}{parents}{user}{ldate}{lfiles}{lfile_copies_switch}{description}\n' |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
6 changeset_debug = '{fullcset}{branches}{bookmarks}{tags}{lphase}{parents}{manifest}{user}{ldate}{lfile_mods}{lfile_adds}{lfile_dels}{lfile_copies_switch}{extras}{description}\n' |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
7 |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
8 # File templates |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
9 lfiles = '{if(files, |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
10 label("ui.note log.files", |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
11 "files: {files}\n"))}' |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
12 |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
13 lfile_mods = '{if(file_mods, |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
14 label("ui.debug log.files", |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
15 "files: {file_mods}\n"))}' |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
16 |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
17 lfile_adds = '{if(file_adds, |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
18 label("ui.debug log.files", |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
19 "files+: {file_adds}\n"))}' |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
20 |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
21 lfile_dels = '{if(file_dels, |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
22 label("ui.debug log.files", |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
23 "files-: {file_dels}\n"))}' |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
24 |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
25 lfile_copies_switch = '{if(file_copies_switch, |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
26 label("ui.note log.copies", |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
27 "copies: {file_copies_switch |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
28 % ' {name} ({source})'}\n"))}' |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
29 |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
30 # General templates |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
31 cset = '{label("log.changeset changeset.{phase}", |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
32 "changeset: {rev}:{node|short}")}\n' |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
33 |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
34 lphase = '{label("log.phase", |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
35 "phase: {phase}")}\n' |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
36 |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
37 fullcset = '{label("log.changeset changeset.{phase}", |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
38 "changeset: {rev}:{node}")}\n' |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
39 |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
40 parent = '{label("log.parent changeset.{phase}", |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
41 "parent: {rev}:{node|formatnode}")}\n' |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
42 |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
43 node = '{label("log.node", |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
44 "{rev}:{node|short}")}\n' |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
45 |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
46 manifest = '{label("ui.debug log.manifest", |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
47 "manifest: {rev}:{node}")}\n' |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
48 |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
49 branch = '{label("log.branch", |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
50 "branch: {branch}")}\n' |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
51 |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
52 tag = '{label("log.tag", |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
53 "tag: {tag}")}\n' |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
54 |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
55 bookmark = '{label("log.bookmark", |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
56 "bookmark: {bookmark}")}\n' |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
57 |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
58 user = '{label("log.user", |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
59 "user: {author}")}\n' |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
60 |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
61 summary = '{label("log.summary", |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
62 "summary: {desc|firstline}")}\n' |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
63 |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
64 ldate = '{label("log.date", |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
65 "date: {date|date}")}\n' |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
66 |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
67 extra = '{label("ui.debug log.extra", |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
68 "extra: {key}={value|stringescape}")}\n' |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
69 |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
70 description = '{label("ui.note log.description", |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
71 "description:")} |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
72 {label("ui.note log.description", |
0ded0f0b1c04
log: rewrite default template to use labels (issue2866)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
15907
diff
changeset
|
73 "{desc|strip}")}\n\n' |