templates.txt
102 lines
| 2.7 KiB
| text/plain
|
TextLexer
Dan Villiom Podlaski Christiansen
|
r9999 | Mercurial allows you to customize output of commands through | ||
templates. You can either pass in a template from the command | ||||
line, via the --template option, or select an existing | ||||
template-style (--style). | ||||
You can customize output for any "log-like" command: log, | ||||
outgoing, incoming, tip, parents, heads and glog. | ||||
Iulian Stana
|
r19126 | Five styles are packaged with Mercurial: default (the style used | ||
when no explicit preference is passed), compact, changelog, phases | ||||
Dan Connolly <http://www.w3.org/People/Connolly/>
|
r11034 | and xml. | ||
Dan Villiom Podlaski Christiansen
|
r9999 | Usage:: | ||
$ hg log -r1 --style changelog | ||||
A template is a piece of text, with markup to invoke variable | ||||
expansion:: | ||||
$ hg log -r1 --template "{node}\n" | ||||
b56ce7b07c52de7d5fd79fb89701ea538af65746 | ||||
Strings in curly braces are called keywords. The availability of | ||||
keywords depends on the exact context of the templater. These | ||||
keywords are usually available for templating a log-like command: | ||||
Patrick Mezard
|
r13585 | .. keywordsmarker | ||
Dan Villiom Podlaski Christiansen
|
r9999 | |||
The "date" keyword does not produce human-readable output. If you | ||||
want to use a date in your output, you can use a filter to process | ||||
it. Filters are functions which return a string based on the input | ||||
Dirkjan Ochtman
|
r10759 | variable. Be sure to use the stringify filter first when you're | ||
applying a string-input filter to a list-like input variable. | ||||
You can also use a chain of filters to get the desired output:: | ||||
Dan Villiom Podlaski Christiansen
|
r9999 | |||
$ hg tip --template "{date|isodate}\n" | ||||
2008-08-21 18:22 +0000 | ||||
List of filters: | ||||
Patrick Mezard
|
r13591 | .. filtersmarker | ||
Sean Farley
|
r18465 | |||
Note that a filter is nothing more than a function call, i.e. | ||||
``expr|filter`` is equivalent to ``filter(expr)``. | ||||
In addition to filters, there are some basic built-in functions: | ||||
Benoit Boissinot
|
r18582 | - date(date[, fmt]) | ||
- fill(text[, width]) | ||||
- get(dict, key) | ||||
Sean Farley
|
r18465 | - if(expr, then[, else]) | ||
- ifeq(expr, expr, then[, else]) | ||||
- join(list, sep) | ||||
- label(label, expr) | ||||
Benoit Boissinot
|
r18582 | - sub(pat, repl, expr) | ||
Sean Farley
|
r18465 | |||
Dan Villiom Podlaski Christiansen
|
r18747 | - rstdoc(text, style) | ||
Sean Farley
|
r18465 | Also, for any expression that returns a list, there is a list operator: | ||
- expr % "{template}" | ||||
Some sample command line templates: | ||||
- Format lists, e.g. files:: | ||||
$ hg log -r 0 --template "files:\n{files % ' {file}\n'}" | ||||
- Join the list of files with a ", ":: | ||||
$ hg log -r 0 --template "files: {join(files, ', ')}\n" | ||||
- Format date:: | ||||
$ hg log -r 0 --template "{date(date, '%Y')}\n" | ||||
- Output the description set to a fill-width of 30:: | ||||
$ hg log -r 0 --template "{fill(desc, '30')}" | ||||
- Use a conditional to test for the default branch:: | ||||
$ hg log -r 0 --template "{ifeq(branch, 'default', 'on the main branch', | ||||
'on branch {branch}')}\n" | ||||
- Append a newline if not empty:: | ||||
$ hg tip --template "{if(author, '{author}\n')}" | ||||
- Label the output for use with the color extension:: | ||||
$ hg log -r 0 --template "{label('changeset.{phase}', node|short)}\n" | ||||
- Invert the firstline filter, i.e. everything but the first line:: | ||||
$ hg log -r 0 --template "{sub(r'^.*\n?\n?', '', desc)}\n" | ||||