git-interpret-trailers(1)
=========================

NAME
----
git-interpret-trailers - add or parse structured information in commit messages

SYNOPSIS
--------
[verse]
'git interpret-trailers' [options] [(--trailer <token>[(=|:)<value>])...] [<file>...]
'git interpret-trailers' [options] [--parse] [<file>...]

DESCRIPTION
-----------
Help parsing or adding 'trailers' lines, that look similar to RFC 822 e-mail
headers, at the end of the otherwise free-form part of a commit
message.

This command reads some patches or commit messages from either the
<file> arguments or the standard input if no <file> is specified. If
`--parse` is specified, the output consists of the parsed trailers.

Otherwise, this command applies the arguments passed using the
`--trailer` option, if any, to the commit message part of each input
file. The result is emitted on the standard output.

Some configuration variables control the way the `--trailer` arguments
are applied to each commit message and the way any existing trailer in
the commit message is changed. They also make it possible to
automatically add some trailers.

By default, a '<token>=<value>' or '<token>:<value>' argument given
using `--trailer` will be appended after the existing trailers only if
the last trailer has a different (<token>, <value>) pair (or if there
is no existing trailer). The <token> and <value> parts will be trimmed
to remove starting and trailing whitespace, and the resulting trimmed
<token> and <value> will appear in the message like this:

------------------------------------------------
token: value
------------------------------------------------

This means that the trimmed <token> and <value> will be separated by
`': '` (one colon followed by one space).

By default the new trailer will appear at the end of all the existing
trailers. If there is no existing trailer, the new trailer will appear
after the commit message part of the output, and, if there is no line
with only spaces at the end of the commit message part, one blank line
will be added before the new trailer.

Existing trailers are extracted from the input message by looking for
a group of one or more lines that (i) is all trailers, or (ii) contains at
least one Git-generated or user-configured trailer and consists of at
least 25% trailers.
The group must be preceded by one or more empty (or whitespace-only) lines.
The group must either be at the end of the message or be the last
non-whitespace lines before a line that starts with '---'. Such three
minus signs start the patch part of the message.

When reading trailers, there can be whitespaces after the
token, the separator and the value. There can also be whitespaces
inside the token and the value. The value may be split over multiple lines with
each subsequent line starting with whitespace, like the "folding" in RFC 822.

Note that 'trailers' do not follow and are not intended to follow many
rules for RFC 822 headers. For example they do not follow
the encoding rules and probably many other rules.

OPTIONS
-------
--in-place::
	Edit the files in place.

--trim-empty::
	If the <value> part of any trailer contains only whitespace,
	the whole trailer will be removed from the resulting message.
	This applies to existing trailers as well as new trailers.

--trailer <token>[(=|:)<value>]::
	Specify a (<token>, <value>) pair that should be applied as a
	trailer to the input messages. See the description of this
	command.

--where <placement>::
--no-where::
	Specify where all new trailers will be added.  A setting
	provided with '--where' overrides all configuration variables
	and applies to all '--trailer' options until the next occurrence of
	'--where' or '--no-where'.

--if-exists <action>::
--no-if-exists::
	Specify what action will be performed when there is already at
	least one trailer with the same <token> in the message.  A setting
	provided with '--if-exists' overrides all configuration variables
	and applies to all '--trailer' options until the next occurrence of
	'--if-exists' or '--no-if-exists'.

--if-missing <action>::
--no-if-missing::
	Specify what action will be performed when there is no other
	trailer with the same <token> in the message.  A setting
	provided with '--if-missing' overrides all configuration variables
	and applies to all '--trailer' options until the next occurrence of
	'--if-missing' or '--no-if-missing'.

--only-trailers::
	Output only the trailers, not any other parts of the input.

--only-input::
	Output only trailers that exist in the input; do not add any
	from the command-line or by following configured `trailer.*`
	rules.

--unfold::
	Remove any whitespace-continuation in trailers, so that each
	trailer appears on a line by itself with its full content.

--parse::
	A convenience alias for `--only-trailers --only-input
	--unfold`.

CONFIGURATION VARIABLES
-----------------------

trailer.separators::
	This option tells which characters are recognized as trailer
	separators. By default only ':' is recognized as a trailer
	separator, except that '=' is always accepted on the command
	line for compatibility with other git commands.
+
The first character given by this option will be the default character
used when another separator is not specified in the config for this
trailer.
+
For example, if the value for this option is "%=$", then only lines
using the format '<token><sep><value>' with <sep> containing '%', '='
or '$' and then spaces will be considered trailers. And '%' will be
the default separator used, so by default trailers will appear like:
'<token>% <value>' (one percent sign and one space will appear between
the token and the value).

trailer.where::
	This option tells where a new trailer will be added.
+
This can be `end`, which is the default, `start`, `after` or `before`.
+
If it is `end`, then each new trailer will appear at the end of the
existing trailers.
+
If it is `start`, then each new trailer will appear at the start,
instead of the end, of the existing trailers.
+
If it is `after`, then each new trailer will appear just after the
last trailer with the same <token>.
+
If it is `before`, then each new trailer will appear just before the
first trailer with the same <token>.

trailer.ifexists::
	This option makes it possible to choose what action will be
	performed when there is already at least one trailer with the
	same <token> in the message.
+
The valid values for this option are: `addIfDifferentNeighbor` (this
is the default), `addIfDifferent`, `add`, `replace` or `doNothing`.
+
With `addIfDifferentNeighbor`, a new trailer will be added only if no
trailer with the same (<token>, <value>) pair is above or below the line
where the new trailer will be added.
+
With `addIfDifferent`, a new trailer will be added only if no trailer
with the same (<token>, <value>) pair is already in the message.
+
With `add`, a new trailer will be added, even if some trailers with
the same (<token>, <value>) pair are already in the message.
+
With `replace`, an existing trailer with the same <token> will be
deleted and the new trailer will be added. The deleted trailer will be
the closest one (with the same <token>) to the place where the new one
will be added.
+
With `doNothing`, nothing will be done; that is no new trailer will be
added if there is already one with the same <token> in the message.

trailer.ifmissing::
	This option makes it possible to choose what action will be
	performed when there is not yet any trailer with the same
	<token> in the message.
+
The valid values for this option are: `add` (this is the default) and
`doNothing`.
+
With `add`, a new trailer will be added.
+
With `doNothing`, nothing will be done.

trailer.<token>.key::
	This `key` will be used instead of <token> in the trailer. At
	the end of this key, a separator can appear and then some
	space characters. By default the only valid separator is ':',
	but this can be changed using the `trailer.separators` config
	variable.
+
If there is a separator, then the key will be used instead of both the
<token> and the default separator when adding the trailer.

trailer.<token>.where::
	This option takes the same values as the 'trailer.where'
	configuration variable and it overrides what is specified by
	that option for trailers with the specified <token>.

trailer.<token>.ifexists::
	This option takes the same values as the 'trailer.ifexists'
	configuration variable and it overrides what is specified by
	that option for trailers with the specified <token>.

trailer.<token>.ifmissing::
	This option takes the same values as the 'trailer.ifmissing'
	configuration variable and it overrides what is specified by
	that option for trailers with the specified <token>.

trailer.<token>.command::
	This option can be used to specify a shell command that will
	be called to automatically add or modify a trailer with the
	specified <token>.
+
When this option is specified, the behavior is as if a special
'<token>=<value>' argument were added at the beginning of the command
line, where <value> is taken to be the standard output of the
specified command with any leading and trailing whitespace trimmed
off.
+
If the command contains the `$ARG` string, this string will be
replaced with the <value> part of an existing trailer with the same
<token>, if any, before the command is launched.
+
If some '<token>=<value>' arguments are also passed on the command
line, when a 'trailer.<token>.command' is configured, the command will
also be executed for each of these arguments. And the <value> part of
these arguments, if any, will be used to replace the `$ARG` string in
the command.

EXAMPLES
--------

* Configure a 'sign' trailer with a 'Signed-off-by' key, and then
  add two of these trailers to a message:
+
------------
$ git config trailer.sign.key "Signed-off-by"
$ cat msg.txt
subject

message
$ cat msg.txt | git interpret-trailers --trailer 'sign: Alice <alice@example.com>' --trailer 'sign: Bob <bob@example.com>'
subject

message

Signed-off-by: Alice <alice@example.com>
Signed-off-by: Bob <bob@example.com>
------------

* Use the `--in-place` option to edit a message file in place:
+
------------
$ cat msg.txt
subject

message

Signed-off-by: Bob <bob@example.com>
$ git interpret-trailers --trailer 'Acked-by: Alice <alice@example.com>' --in-place msg.txt
$ cat msg.txt
subject

message

Signed-off-by: Bob <bob@example.com>
Acked-by: Alice <alice@example.com>
------------

* Extract the last commit as a patch, and add a 'Cc' and a
  'Reviewed-by' trailer to it:
+
------------
$ git format-patch -1
0001-foo.patch
$ git interpret-trailers --trailer 'Cc: Alice <alice@example.com>' --trailer 'Reviewed-by: Bob <bob@example.com>' 0001-foo.patch >0001-bar.patch
------------

* Configure a 'sign' trailer with a command to automatically add a
  'Signed-off-by: ' with the author information only if there is no
  'Signed-off-by: ' already, and show how it works:
+
------------
$ git config trailer.sign.key "Signed-off-by: "
$ git config trailer.sign.ifmissing add
$ git config trailer.sign.ifexists doNothing
$ git config trailer.sign.command 'echo "$(git config user.name) <$(git config user.email)>"'
$ git interpret-trailers <<EOF
> EOF

Signed-off-by: Bob <bob@example.com>
$ git interpret-trailers <<EOF
> Signed-off-by: Alice <alice@example.com>
> EOF

Signed-off-by: Alice <alice@example.com>
------------

* Configure a 'fix' trailer with a key that contains a '#' and no
  space after this character, and show how it works:
+
------------
$ git config trailer.separators ":#"
$ git config trailer.fix.key "Fix #"
$ echo "subject" | git interpret-trailers --trailer fix=42
subject

Fix #42
------------

* Configure a 'see' trailer with a command to show the subject of a
  commit that is related, and show how it works:
+
------------
$ git config trailer.see.key "See-also: "
$ git config trailer.see.ifExists "replace"
$ git config trailer.see.ifMissing "doNothing"
$ git config trailer.see.command "git log -1 --oneline --format=\"%h (%s)\" --abbrev-commit --abbrev=14 \$ARG"
$ git interpret-trailers <<EOF
> subject
> 
> message
> 
> see: HEAD~2
> EOF
subject

message

See-also: fe3187489d69c4 (subject of related commit)
------------

* Configure a commit template with some trailers with empty values
  (using sed to show and keep the trailing spaces at the end of the
  trailers), then configure a commit-msg hook that uses
  'git interpret-trailers' to remove trailers with empty values and
  to add a 'git-version' trailer:
+
------------
$ sed -e 's/ Z$/ /' >commit_template.txt <<EOF
> ***subject***
> 
> ***message***
> 
> Fixes: Z
> Cc: Z
> Reviewed-by: Z
> Signed-off-by: Z
> EOF
$ git config commit.template commit_template.txt
$ cat >.git/hooks/commit-msg <<EOF
> #!/bin/sh
> git interpret-trailers --trim-empty --trailer "git-version: \$(git describe)" "\$1" > "\$1.new"
> mv "\$1.new" "\$1"
> EOF
$ chmod +x .git/hooks/commit-msg
------------

SEE ALSO
--------
linkgit:git-commit[1], linkgit:git-format-patch[1], linkgit:git-config[1]

GIT
---
Part of the linkgit:git[1] suite
