## 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 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.
##
#if($email.reviewerNames)
Hello $email.joinStrings($email.reviewerNames, ', '),

I'd like you to reexamine a change.#if($email.changeUrl)  Please visit

    $email.changeUrl

to look at the new patch set (#$patchSet.patchSetId).
#end
#else
$fromName has uploaded a new patch set (#$patchSet.patchSetId).
#end

Change subject: $change.subject
......................................................................

$email.changeDetail
#if($email.sshHost)
  git pull ssh://$email.sshHost/$projectName $patchSet.refName
#end
