## Copyright (C) 2010 The Android Open Source Project
##
## Licensed under the Apache License, Version 2.0 (the "License");
## you may not use this file except in compliance with the License.
## You may obtain a copy of the License at
##
## http://www.apache.org/licenses/LICENSE-2.0
##
## Unless required by applicable law or agreed to in writing, software
## distributed under the License is distributed on an "AS IS" BASIS,
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.
##
##
## Template Type:
## -------------
## This is a velocity mail template, see: http://velocity.apache.org and the
## gerrit-docs:config-mail.txt for more info on modifying gerrit mail templates.
##
## Template File Names and extensions:
## ----------------------------------
## Gerrit will use templates ending in ".vm" but will ignore templates ending
## in ".vm.example".  If a .vm template does not exist, the default internal
## gerrit template which is the same as the .vm.example will be used.  If you
## want to override the default template, copy the .vm.example file to a .vm
## file and edit it appropriately.
##
## This Template:
## --------------
## The ChangeFooter.vm template will determine the contents of the footer
## text that will be appended to ALL emails related to changes.
##
#set ($SPACE = " ")
--$SPACE
#if ($email.changeUrl)
To view, visit $email.changeUrl
#set ($notblank = 1)
#end
#if ($email.settingsUrl)
To unsubscribe, visit $email.settingsUrl
#set ($notblank = 1)
#end
#if ($notblank == 1)

#end
Gerrit-MessageType: $messageClass
Gerrit-Change-Id: $changeId
Gerrit-PatchSet: $patchSet.patchSetId
Gerrit-Project: $projectName
Gerrit-Branch: $branch.shortName
Gerrit-Owner: $email.getNameEmailFor($change.owner)
