= Gerrit Code Review - Mail Templates

Gerrit uses velocity templates for the bulk of the standard mails it sends out.
There are builtin default templates which are used if they are not overridden.
These defaults are also provided as examples so that administrators may copy
them and easily modify them to tweak their contents.


== Template Locations and Extensions:

The default example templates reside under:  `'$site_path'/etc/mail` and are
terminated with the double extension `.vm.example`. Modifying these example
files will have no effect on the behavior of Gerrit.  However, copying an
example template to an equivalently named file without the `.example` extension
and modifying it will allow an administrator to customize the template.


== Supported Mail Templates:

Each mail that Gerrit sends out is controlled by at least one template.  These
are listed below.  Change emails are influenced by two additional templates,
one to set the subject line, and one to set the footer which gets appended to
all the change emails (see `ChangeSubject.vm` and `ChangeFooter.vm` below.)

=== Abandoned.vm

The `Abandoned.vm` template will determine the contents of the email related
to a change being abandoned.  It is a `ChangeEmail`: see `ChangeSubject.vm` and
`ChangeFooter.vm`.

=== ChangeFooter.vm

The `ChangeFooter.vm` template will determine the contents of the footer
text that will be appended to emails related to changes (all `ChangeEmail`s).

=== ChangeSubject.vm

The `ChangeSubject.vm` template will determine the contents of the email
subject line for ALL emails related to changes.

=== Comment.vm

The `Comment.vm` template will determine the contents of the email related to
a user submitting comments on changes.  It is a `ChangeEmail`: see
`ChangeSubject.vm`, `ChangeFooter.vm` and `CommentFooter.vm`.

=== CommentFooter.vm

The `CommentFooter.vm` template will determine the contents of the footer
text that will be appended to emails related to a user submitting comments on
changes.  See `ChangeSubject.vm`, `Comment.vm` and `ChangeFooter.vm`.

=== Footer.vm

The `Footer.vm` template will determine the contents of the footer text
appended to the end of all outgoing emails after the ChangeFooter and
CommentFooter.

=== Merged.vm

The `Merged.vm` template will determine the contents of the email related to
a change successfully merged to the head.  It is a `ChangeEmail`: see
`ChangeSubject.vm` and `ChangeFooter.vm`.

=== MergeFail.vm

The `MergeFail.vm` template will determine the contents of the email related
to a failure upon attempting to merge a change to the head.  It is a
`ChangeEmail`: see `ChangeSubject.vm` and `ChangeFooter.vm`.

=== NewChange.vm

The `NewChange.vm` template will determine the contents of the email related
to a user submitting a new change for review. This includes changes created
by actions made by the user in the Web UI such as cherry picking a commit or
reverting a change.  It is a `ChangeEmail`: see `ChangeSubject.vm` and
`ChangeFooter.vm`.

=== RegisterNewEmail.vm

The `RegisterNewEmail.vm` template will determine the contents of the email
related to registering new email accounts.

=== ReplacePatchSet.vm

The `ReplacePatchSet.vm` template will determine the contents of the email
related to a user submitting a new patchset for a change.  This includes
patchsets created by actions made by the user in the Web UI such as editing
the commit message, cherry picking a commit, or rebasing a change.  It is a
`ChangeEmail`: see `ChangeSubject.vm` and `ChangeFooter.vm`.

=== Restored.vm

The `Restored.vm` template will determine the contents of the email related
to a change being restored.  It is a `ChangeEmail`: see `ChangeSubject.vm` and
`ChangeFooter.vm`.

=== Reverted.vm

The `Reverted.vm` template will determine the contents of the email related
to a change being reverted.  It is a `ChangeEmail`: see `ChangeSubject.vm` and
`ChangeFooter.vm`.


== Mail Variables and Methods

Mail templates can access and display objects currently made available to them
via the velocity context.  While the base objects are documented here, it is
possible to call public methods on these objects from templates.  Those methods
are not documented here since they could change with every release.  As these
templates are meant to be modified only by a qualified sysadmin, it is accepted
that writing templates for Gerrit emails is likely to require some basic
knowledge of the class structure to be useful.  Browsing the source code might
be necessary for anything more than a minor formatting change.

=== Warning

Be aware that modifying templates can cause them to fail to parse and therefore
not send out the actual email, or worse, calling methods on the available
objects could have internal side effects which would adversely affect the
health of your Gerrit server and/or data.

=== All OutgoingEmails

All outgoing emails have the following variables available to them:

$email::
+
A reference to the class constructing the current `OutgoingEmail`.  With this
reference it is possible to call any public method on the OutgoingEmail class
or the current child class inherited from it.

$messageClass::
+
A String containing the messageClass.

$StringUtils::
+
A reference to the Apache `StringUtils` class.  This can be very useful for
formatting strings.

=== Change Emails

All change related emails have the following additional variables available to them:

$change::
+
A reference to the current `Change` object.

$changeId::
+
Id of the current change (a `Change.Key`).

$coverLetter::
+
The text of the `ChangeMessage`.

$branch::
+
A reference to the branch of this change (a `Branch.NameKey`).

$fromName::
+
The name of the from user.

$projectName::
+
The name of this change's project.

$patchSet::
+
A reference to the current `PatchSet`.

$patchSetInfo::
+
A reference to the current `PatchSetInfo`.


== SEE ALSO

* link:http://velocity.apache.org/[velocity]

GERRIT
------
Part of link:index.html[Gerrit Code Review]

SEARCHBOX
---------
