|
|
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.
|
|
|
|
|
|
Five styles are packaged with Mercurial: default (the style used
|
|
|
when no explicit preference is passed), compact, changelog, phases
|
|
|
and xml.
|
|
|
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:
|
|
|
|
|
|
.. keywordsmarker
|
|
|
|
|
|
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
|
|
|
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::
|
|
|
|
|
|
$ hg tip --template "{date|isodate}\n"
|
|
|
2008-08-21 18:22 +0000
|
|
|
|
|
|
List of filters:
|
|
|
|
|
|
.. filtersmarker
|
|
|
|
|
|
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:
|
|
|
|
|
|
- date(date[, fmt])
|
|
|
|
|
|
- fill(text[, width])
|
|
|
|
|
|
- get(dict, key)
|
|
|
|
|
|
- if(expr, then[, else])
|
|
|
|
|
|
- ifeq(expr, expr, then[, else])
|
|
|
|
|
|
- join(list, sep)
|
|
|
|
|
|
- label(label, expr)
|
|
|
|
|
|
- rstdoc(text, style)
|
|
|
|
|
|
- strip(text[, chars])
|
|
|
|
|
|
- sub(pat, repl, expr)
|
|
|
|
|
|
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"
|
|
|
|
|
|
- Display the contents of the 'extra' field, one per line::
|
|
|
|
|
|
$ hg log -r 0 --template "{join(extras, '\n')}\n"
|
|
|
|