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` and `ChangeFooter.vm`.

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. 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.  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`.



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]
