= Gerrit Code Review - Mail Templates

Gerrit uses link:https://developers.google.com/closure/templates/[Closure Templates]
(Soy) 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.

*Compatibility Note:* previously, Velocity Template Language (VTL) was used as
the template language for Gerrit emails. VTL has now been deprecated in favor of
Soy, but Velocity templates that modify text emails remain supported for now.

== Template Locations and Extensions

The default example templates reside under:  `'$site_path'/etc/mail` and are
terminated with the double extension `.soy.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.soy` and `ChangeFooter.soy` below.)

Many types of Gerrit email message support HTML in addition to plain-text. Where
both are supported, templates to control the HTML part have `...Html` appended
in their file names. For example, for "Abandoned" emails, the `Abandoned.soy`
template determines the text part of the message, whereas `AbandonedHtml.soy`
determines the HTML part.

=== Abandoned.soy and AbandonedHtml.soy

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

=== AddKey.soy and AddKeyHtml.soy

AddKey templates will determine the contents of the email related to SSH and GPG
keys being added to a user account. This notification is not sent when the key
is administratively added to another user account.

=== ChangeFooter.soy and ChangeFooterHtml.soy

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

=== ChangeSubject.soy

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

=== Comment.soy

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

=== CommentFooter.soy and CommentFooterHtml.soy

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

=== DeleteVote.soy and DeleteVoteHtml.soy

The DeleteVote templates will determine the contents of the email related to
removing votes on changes.  It is a `ChangeEmail`: see `ChangeSubject.soy`
and ChangeFooter.

=== DeleteReviewer.soy and DeleteReviewerHtml.soy

The DeleteReviewer templates will determine the contents of the email related to
a user removing a reviewer (with a vote) from a change.  It is a
`ChangeEmail`: see `ChangeSubject.soy` and ChangeFooter.

=== Footer.soy and FooterHtml.soy

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

=== Merged.soy and MergedHtml.soy

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

=== NewChange.soy and NewChangeHtml.soy

The NewChange templates 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.soy` and
ChangeFooter.

=== RegisterNewEmail.soy

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

=== ReplacePatchSet.soy and ReplacePatchSetHtml.soy

The ReplacePatchSet templates 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.soy` and ChangeFooter.

=== Restored.soy and RestoredHtml.soy

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

=== Reverted.soy and RevertedHtml.soy

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

=== SetAssignee.soy and SetAssigneeHtml.soy

The SetAssignee templates will determine the contents of the email related to a
user being assigned to a change. It is a `ChangeEmail`: see `ChangeSubject.soy`
and ChangeFooter.


== Mail Variables and Methods

Mail templates can access and display objects currently made available to them
via the Soy context.

=== Warning

Be aware that modifying templates can cause them to fail to parse and therefore
not send out the actual email.

=== All OutgoingEmails

All outgoing emails have the following variables available to them:

$email.settingsUrl::
+
The URL to view the user's settings in the Gerrit web UI.

$email.gerritHost::
+
The name of the Gerrit instance.

$email.gerritUrl::
+
The URL to the Gerrit web UI.

$messageClass::
+
A String containing the messageClass.

=== Change Emails

Change related emails have the following template data available to them, in
addition to what's available to all outgoing emails.

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

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

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

$email.unifiedDiff::
+
The diff of the change.

$email.changeDetail::
+
The details of the change, including the commit message.

$email.changeUrl::
+
The URL to the change in the web UI.

$email.includeDiff::
+
Whether the Gerrit instance is configured to include diffs in emails.

$change.subject::
+
The subject of the current change.

$change.originalSubject::
+
The subject corresponding to the first patch set of the current change.

$change.shortSubject::
+
The subject limited to 72 characters, with an ellipsis if it exceeds that.

$change.ownerEmail::
+
The email address of the owner of the change.

$branch.shortName::
+
The name of the branch targeted by the current change.

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

$shortProjectName::
+
The project name with the path abbreviated.

$sshHost::
+
SSH hostname for the Gerrit instance.

$patchSet.patchSetId::
+
The current patch set number.

$patchSet.refname::
+
The refname of the patch set.

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

SEARCHBOX
---------
