Nutzung von Vorlagen

Mercurial allows you to customize output of commands through templates. You can either pass in a template or select an existing template-style from the command line, via the --template option.

You can customize output for any "log-like" command: log, outgoing, incoming, tip, parents, and heads.

Some built-in styles are packaged with Mercurial. These can be listed with 'hg log --template list'. Example usage:

$ hg log -r1.0::1.1 --template changelog

Ein Template ist ein Stück Text, der Markierungen enthält, die bei der Ausgabe mit den eigentlichen Informationen ersetzt werden:

$ hg log -r1 --template "{node}\n"
b56ce7b07c52de7d5fd79fb89701ea538af65746

Keywords

Zeichenketten in geschweiften Klammern werden als Schlüsselwörter bezeichnet. Die Verfügbarkeit von Schlüsselwörtern hängt von dem ausgeführten Befehl ab. Diese Schlüsselwörter stehen üblicherweise für Vorlagen von "log-ähnlichen" Befehlen zur Verfügung:

activebookmark
String. The active bookmark, if it is associated with the changeset.
author
Alias for "{user}"
bisect
Zeichenkette. Der bisect Status des Änderungssatzes.
bookmarks
List of strings. Any bookmarks associated with the changeset. Also sets 'active', the name of the active bookmark.
branch
Zeichenkette. Der Name des Zweiges, in dem der Änderungssatz versioniert wurde.
branches
List of strings. The name of the branch on which the changeset was committed. Will be empty if the branch name was default. (DEPRECATED)
changessincelatesttag
Integer. All ancestors not in the latest tag.
children
Liste von Zeichenketten. Die Kinder dieses Änderungssatzes.
currentbookmark
String. The active bookmark, if it is associated with the changeset. (DEPRECATED)
date
Datumsangabe. Das Datum, wann ein Änderungssatz versioniert wurde.
desc
Zeichenkette. Der Text der Beschreibung eines Änderungssatzes.
diffstat
Zeichenkette. Statistik über die Änderungen in dem folgenden Format: "geänderte Dateien: +hinzugefügt/-entfernte Zeilen"
envvars
A dictionary of environment variables. (EXPERIMENTAL)
extras
List of dicts with key, value entries of the 'extras' field of this changeset.
file_adds
Liste von Zeichenketten. Alle hinzugefügten Dateien.
file_copies_switch
Liste von Zeichenketten. Dateien, die in diesem Änderungssatz kopiert wurden, zusammen mit den Quelldateien.
file_copies_switch
Liste von Zeichenketten. Wie "file_copies", wird aber nur angezeigt, wenn der Schalter --copied gesetzt wurde.
file_dels
Liste von Zeichenketten. Alle gelöschten Dateien.
file_mods
Liste von Zeichenketten. Alle geänderten Dateien.
files
Liste von Zeichenketten. Alle geänderten, hinzugefügten oder gelöschten Dateien dieses Änderungssatzes.
graphnode
String. The character representing the changeset node in an ASCII revision graph.
graphwidth
Integer. The width of the graph drawn by 'log --graph' or zero.
index
Integer. The current iteration of the loop. (0 indexed)
instabilities
List of strings. Evolution instabilities affecting the changeset. (EXPERIMENTAL)
latesttag
List of strings. The global tags on the most recent globally tagged ancestor of this changeset. If no such tags exist, the list consists of the single string "null".
latesttagdistance
Zahl. Längster Pfad zum aktuellsten Tag.
namespaces
Dict of lists. Names attached to this changeset per namespace.
negrev
Integer. The repository-local changeset negative revision number, which counts in the opposite direction.
node
Zeichenkette. Die Prüfsumme, die einen Änderungssatz identifiziert, als 40 Zeichen lange hexadezimale Zeichenkette.
obsolete
String. Whether the changeset is obsolete. (EXPERIMENTAL)
p1
Changeset. The changeset's first parent. "{p1.rev}" for the revision number, and "{p1.node}" for the identification hash.
p1node
String. The identification hash of the changeset's first parent, as a 40 digit hexadecimal string. If the changeset has no parents, all digits are 0. (DEPRECATED)
p1rev
Integer. The repository-local revision number of the changeset's first parent, or -1 if the changeset has no parents. (DEPRECATED)
p2
Changeset. The changeset's second parent. "{p2.rev}" for the revision number, and "{p2.node}" for the identification hash.
p2node
String. The identification hash of the changeset's second parent, as a 40 digit hexadecimal string. If the changeset has no second parent, all digits are 0. (DEPRECATED)
p2rev
Integer. The repository-local revision number of the changeset's second parent, or -1 if the changeset has no second parent. (DEPRECATED)
parents
List of strings. The parents of the changeset in "rev:node" format. If the changeset has only one "natural" parent (the predecessor revision) nothing is shown.
path
String. Repository-absolute path of the current file. (EXPERIMENTAL)
peerurls
A dictionary of repository locations defined in the [paths] section of your configuration file.
phase
Zeichenkette. Der Name der Phase des Änderungssatzes.
phaseidx
Integer. The changeset phase index. (ADVANCED)
predecessors
Returns the list of the closest visible predecessors. (EXPERIMENTAL)
reporoot
String. The root directory of the current repository.
rev
Zahl. Die für dieses Projektarchiv geltende Nummer eines Änderungssatzes.
size
Integer. Size of the current file in bytes. (EXPERIMENTAL)
status
String. Status code of the current file. (EXPERIMENTAL)
subrepos
List of strings. Updated subrepositories in the changeset.
successorssets
Returns a string of sets of successors for a changectx. Format used is: [ctx1, ctx2], [ctx3] if ctx has been split into ctx1 and ctx2 while also diverged into ctx3. (EXPERIMENTAL)
succsandmarkers
Returns a list of dict for each final successor of ctx. The dict contains successors node id in "successors" keys and the list of obs-markers from ctx to the set of successors in "markers". (EXPERIMENTAL)
tags
Liste von Zeichenketten. Alle Tags, die diesem Änderungssatz zugewiesen wurden.
termwidth
Integer. The width of the current terminal.
user
String. The unmodified author of the changeset.
verbosity
String. The current output verbosity in 'debug', 'quiet', 'verbose', or ''.
whyunstable
List of dicts explaining all instabilities of a changeset. (EXPERIMENTAL)

Das "date"-Schlüsselwort erzeugt keine menschenlesbare Ausgabe. Wenn Sie ein Datum in Ihrer Ausgabe verwenden wollen, können Sie einen Filter einsetzen, um es zu verarbeiten. Filter sind Funktionen, die eine Zeichenkette basierend auf der Eingabe-Variablen zurückgeben. Stellen Sie sicher, dass Sie den stringify-Filter zuerst anwenden, wenn Sie einen Filter für Zeichenketten auf eine listenartige Variable anwenden möchten. Sie können auch mehrere Filter verketten, um das gewünschte Ergebnis zu erhalten:

$ hg tip --template "{date|isodate}\n"
2008-08-21 18:22 +0000

Filters

Liste aller Filter:

addbreaks
Beliebiger Text. Führt ein XHTML "<br />"-Tag vor das Ende jeder Zeile bis auf die letzte ein.
age
Datumsangabe. Gibt eine menschenlesbare Datums- und Zeitdifferenz zwischen dem gegebenen Datum und der aktuellen Zeit aus.
basename
Any text. Treats the text as a path, and returns the last component of the path after splitting by the path separator. For example, "foo/bar/baz" becomes "baz" and "foo/bar//" becomes "".
cbor
Any object. Serializes the object to CBOR bytes.
commondir
List of text. Treats each list item as file name with / as path separator and returns the longest common directory prefix shared by all list items. Returns the empty string if no common prefix exists.

The list items are not normalized, i.e. "foo/../bar" is handled as file "bar" in the directory "foo/..". Leading slashes are ignored.

For example, ["foo/bar/baz", "foo/baz/bar"] becomes "foo" and ["foo/bar", "baz"] becomes "".

count
List or text. Returns the length as an integer.
dirname
Any text. Treats the text as a path, and strips the last component of the path after splitting by the path separator.
domain
Beliebiger Text. Findet die erste Zeichenkette, die wie eine E-Mail-Adresse aussieht, und extrahiert davon die Domain-Komponente: Beispiel: "Nutzer <user@example.com>" wird zu "example.com".
email
Beliebiger Text. Extrahiert die erste Zeichenkette, die wie eine E-Mail-Adresse aussieht. Beispiel: "Nutzer <user@example.com>" wird zu "user@example.com".
emailuser
Beliebiger Text. Gibt den Nutzerteil einer E-Mail-Adresse (vor dem @-Zeichen) zurück.
escape
Beliebiger Text. Ersetzt die besonderen XML/XHTML-Zeichen "&", "<" und ">" mit XML-Entitäten und entfernt NUL-Zeichen.
fill68
Beliebiger Text. Umbricht den Text bei 68 Zeichen.
fill76
Beliebiger Text. Umbricht den Text bei 76 Zeichen.
firstline
Beliebiger Text. Gibt die erste Zeile des Texts zurück.
hex
Beliebiger Text. Konvertiert eine binäre Mercurial-Knoten-ID in eine lange hexadezimale Repräsentation.
hgdate
Datumsangabe. Gibt das Datum als Zahlpaar zurück: "1157407993 25200" (Unix Zeitstempel, Zeitzonenverschiebung)
isodate
Datumsangabe. Gibt das Datum im ISO 8601-Format zurück: "2009-08-18 13:00 +0200".
isodatesec
Datumsangabe. Gibt das Datum im ISO 8601-Format inklusive Sekunden zurück: "2009-08-18 13:00 +0200". Siehe auch den rfc3339date-Filter.
json
Any object. Serializes the object to a JSON formatted text.
lower
Any text. Converts the text to lowercase.
nonempty
Beliebiger Text. Gibt '(none)' für eine leere Zeichenkette zurück.
obfuscate
Beliebiger Text. Gibt den Text als Folge von XML-Entitäten zurück.
person
Beliebiger Text. Gibt den Text vor einer E-Mail-Adresse zurück, interpretiert als RFC 5322.
revescape
Any text. Escapes all "special" characters, except @. Forward slashes are escaped twice to prevent web servers from prematurely unescaping them. For example, "@foo bar/baz" becomes "@foo%20bar%252Fbaz".
rfc3339date
Datumsangabe. Gibt das Datum im Internet-Datumsformat, spezifiziert im RFC 3339, zurück: "2009-08-18T13:00:13+02:00".
rfc822date
Datumsangabe. Gibt das Datum im gleichen Format zurück, das auch in Kopfzeilen von E-Mails verwendet wird: "Tue, 18 Aug 2009 13:00:13 +0200".
short
Prüfsumme. Gibt die Kurzform der Prüfsumme zurück, d.h. als 12 Zeichen lange hexadezimale Zeichenkette.
shortbisect
Any text. Treats 'label' as a bisection status, and returns a single-character representing the status (G: good, B: bad, S: skipped, U: untested, I: ignored). Returns single space if 'text' is not a valid bisection status.
shortdate
Datumsangabe. Gibt ein Datum wie "2006-09-18" zurück.
slashpath
Any text. Replaces the native path separator with slash.
splitlines
Any text. Split text into a list of lines.
stringify
Beliebiger Typ. Wandelt jeden Wert in einen Text um, indem die Werte in Zeichenketten konvertiert und dann aneinander gehängt werden.
stripdir
Behandelt den Text als Pfadangabe und entfernt das letzte Verzeichnis, wenn möglich. Zum Beispiel wird aus "foo" und "foo/bar//" dann "bar".
tabindent
Beliebiger Text. Gibt den Text zurück, wobei jede Zeile bis auf die erste mit einem Tabulator eingerückt ist.
upper
Any text. Converts the text to uppercase.
urlescape
Beliebiger Text. Maskiert alle "besonderen" Zeichen. Aus "foo bar" wird zum Beispiel "foo%20bar".
user
Beliebiger Text. Gibt die Kurzdarstellung eines Benutzernamens oder einer E-Mail-Adresse zurück.
utf8
Any text. Converts from the local character encoding to UTF-8.

Note that a filter is nothing more than a function call, i.e. "expr|filter" is equivalent to "filter(expr)".

Functions

In addition to filters, there are some basic built-in functions:

config(section, name[, default])
Returns the requested hgrc config option as a string.
configbool(section, name[, default])
Returns the requested hgrc config option as a boolean.
configint(section, name[, default])
Returns the requested hgrc config option as an integer.
date(date[, fmt])
Format a date. See 'hg help dates' for formatting strings. The default is a Unix date format, including the timezone: "Mon Sep 04 15:13:13 2006 0700".
dict([[key=]value...])
Construct a dict from key-value pairs. A key may be omitted if a value expression can provide an unambiguous name.
diff([includepattern [, excludepattern]])
Show a diff, optionally specifying files to include or exclude.
extdata(source)
Show a text read from the specified extdata source. (EXPERIMENTAL)
files(pattern)
All files of the current changeset matching the pattern. See 'hg help patterns'.
fill(text[, width[, initialident[, hangindent]]])
Fill many paragraphs with optional indentation. See the "fill" filter.
filter(iterable[, expr])
Remove empty elements from a list or a dict. If expr specified, it's applied to each element to test emptiness.
formatnode(node)
Obtain the preferred form of a changeset hash. (DEPRECATED)
get(dict, key)
Get an attribute/key from an object. Some keywords are complex types. This function allows you to obtain the value of an attribute on these types.
if(expr, then[, else])
Conditionally execute based on the result of an expression.
ifcontains(needle, haystack, then[, else])
Conditionally execute based on whether the item "needle" is in "haystack".
ifeq(expr1, expr2, then[, else])
Conditionally execute based on whether 2 items are equivalent.
indent(text, indentchars[, firstline])
Indents all non-empty lines with the characters given in the indentchars string. An optional third parameter will override the indent for the first line only if present.
join(list, sep)
Join items in a list with a delimiter.
label(label, expr)
Apply a label to generated content. Content with a label applied can result in additional post-processing, such as automatic colorization.
latesttag([pattern])
The global tags matching the given pattern on the most recent globally tagged ancestor of this changeset. If no such tags exist, the "{tag}" template resolves to the string "null". See 'hg help revisions.patterns' for the pattern syntax.
localdate(date[, tz])
Converts a date to the specified timezone. The default is local date.
mailmap(author)
Return the author, updated according to the value set in the .mailmap file
max(iterable)
Return the max of an iterable
min(iterable)
Return the min of an iterable
mod(a, b)
Calculate a mod b such that a / b + a mod b == a
obsfatedate(markers)
Compute obsfate related information based on markers (EXPERIMENTAL)
obsfateoperations(markers)
Compute obsfate related information based on markers (EXPERIMENTAL)
obsfateusers(markers)
Compute obsfate related information based on markers (EXPERIMENTAL)
obsfateverb(successors, markers)
Compute obsfate related information based on successors (EXPERIMENTAL)
pad(text, width[, fillchar=' '[, left=False[, truncate=False]]])
Pad text with a fill character.
relpath(path)
Convert a repository-absolute path into a filesystem path relative to the current working directory.
revset(query[, formatargs...])
Execute a revision set query. See 'hg help revset'.
rstdoc(text, style)
Format reStructuredText.
search(pattern, text)
Look for the first text matching the regular expression pattern. Groups are accessible as "{1}", "{2}", ... in %-mapped template.
separate(sep, args...)
Add a separator between non-empty arguments.
shortest(node, minlength=4)
Obtain the shortest representation of a node.
startswith(pattern, text)
Returns the value from the "text" argument if it begins with the content from the "pattern" argument.
strip(text[, chars])
Strip characters from a string. By default, strips all leading and trailing whitespace.
sub(pattern, replacement, expression)
Perform text substitution using regular expressions.
subsetparents(rev, revset)
Look up parents of the rev in the sub graph given by the revset.
word(number, text[, separator])
Return the nth word from a string.

Operators

We provide a limited set of infix arithmetic operations on integers:

+ for addition
- for subtraction
* for multiplication
/ for floor division (division rounded to integer nearest -infinity)

Division fulfills the law x = x / y + mod(x, y).

Also, for any expression that returns a list, there is a list operator:

expr % "{template}"

As seen in the above example, "{template}" is interpreted as a template. To prevent it from being interpreted, you can use an escape character "\{" or a raw string prefix, "r'...'".

The dot operator can be used as a shorthand for accessing a sub item:

Aliases

New keywords and functions can be defined in the "templatealias" section of a Mercurial configuration file:

<alias> = <definition>

Arguments of the form 'a1', 'a2', etc. are substituted from the alias into the definition.

Zum Beispiel,

[templatealias]
r = rev
rn = "{r}:{node|short}"
leftpad(s, w) = pad(s, w, ' ', True)

defines two symbol aliases, "r" and "rn", and a function alias "leftpad()".

It's also possible to specify complete template strings, using the "templates" section. The syntax used is the general template string syntax.

Zum Beispiel,

[templates]
nodedate = "{node|short}: {date(date, "%Y-%m-%d")}\n"

defines a template, "nodedate", which can be called like:

$ hg log -r . -Tnodedate

A template defined in "templates" section can also be referenced from another template:

$ hg log -r . -T "{rev} {nodedate}"

but be aware that the keywords cannot be overridden by templates. For example, a template defined as "templates.rev" cannot be referenced as "{rev}".

A template defined in "templates" section may have sub templates which are inserted before/after/between items:

[templates]
myjson = ' {dict(rev, node|short)|json}'
myjson:docheader = '\{\n'
myjson:docfooter = '\n}\n'
myjson:separator = ',\n'

Examples

Some sample command line templates: