From f94255f94e4da752d8e85ca06b37565c52e8c3af Mon Sep 17 00:00:00 2001 From: Wyatt Allen Date: Fri, 2 Sep 2016 10:56:05 -0700 Subject: [PATCH] Upgrade most change emails with HTML Add HTML templates for change emails which do not require additional template data to be provided in order for it to be formatted in HTML. Introduces a HeaderHtml template counterpart to FooterHtml. In this change, there are minimal visual deviations from the plain-text emails. URLs are added as anchor tags. Commit messages, diffs and "cover letter"s are set in PRE tags to preserve whitespace and to use monospace fonts. HR tags are used instead of the text-based horizontal rules in the text emails. Change email types upgraded with this change: * Abandon Change * Delete Reviewer * Delete Vote * New Change * New Patch Set * Restore Change * Revert Change Change-Id: Ic1171d6288335aa69e12f076558e861934bfa150 --- .../gerrit/pgm/init/SitePathInitializer.java | 10 +++ .../gerrit/server/mail/AbandonedSender.java | 6 ++ .../gerrit/server/mail/ChangeEmail.java | 3 + .../server/mail/DeleteReviewerSender.java | 6 ++ .../gerrit/server/mail/DeleteVoteSender.java | 6 ++ .../server/mail/MailSoyTofuProvider.java | 12 ++- .../gerrit/server/mail/NewChangeSender.java | 6 ++ .../gerrit/server/mail/OutgoingEmail.java | 3 + .../server/mail/ReplacePatchSetSender.java | 6 ++ .../gerrit/server/mail/RestoredSender.java | 6 ++ .../gerrit/server/mail/RevertedSender.java | 6 ++ .../gerrit/server/mail/AbandonedHtml.soy | 44 +++++++++++ .../gerrit/server/mail/ChangeFooterHtml.soy | 49 ++++++++++++ .../gerrit/server/mail/DeleteReviewerHtml.soy | 49 ++++++++++++ .../gerrit/server/mail/DeleteVoteHtml.soy | 44 +++++++++++ .../google/gerrit/server/mail/HeaderHtml.soy | 20 +++++ .../gerrit/server/mail/NewChangeHtml.soy | 78 +++++++++++++++++++ .../server/mail/ReplacePatchSetHtml.soy | 72 +++++++++++++++++ .../gerrit/server/mail/RestoredHtml.soy | 44 +++++++++++ .../gerrit/server/mail/RevertedHtml.soy | 44 +++++++++++ .../gerrit/server/mail/ViewChangeButton.soy | 25 ++++++ 21 files changed, 538 insertions(+), 1 deletion(-) create mode 100644 gerrit-server/src/main/resources/com/google/gerrit/server/mail/AbandonedHtml.soy create mode 100644 gerrit-server/src/main/resources/com/google/gerrit/server/mail/ChangeFooterHtml.soy create mode 100644 gerrit-server/src/main/resources/com/google/gerrit/server/mail/DeleteReviewerHtml.soy create mode 100644 gerrit-server/src/main/resources/com/google/gerrit/server/mail/DeleteVoteHtml.soy create mode 100644 gerrit-server/src/main/resources/com/google/gerrit/server/mail/HeaderHtml.soy create mode 100644 gerrit-server/src/main/resources/com/google/gerrit/server/mail/NewChangeHtml.soy create mode 100644 gerrit-server/src/main/resources/com/google/gerrit/server/mail/ReplacePatchSetHtml.soy create mode 100644 gerrit-server/src/main/resources/com/google/gerrit/server/mail/RestoredHtml.soy create mode 100644 gerrit-server/src/main/resources/com/google/gerrit/server/mail/RevertedHtml.soy create mode 100644 gerrit-server/src/main/resources/com/google/gerrit/server/mail/ViewChangeButton.soy diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/SitePathInitializer.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/SitePathInitializer.java index 978b87cc52..1d7195bd65 100644 --- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/SitePathInitializer.java +++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/init/SitePathInitializer.java @@ -100,20 +100,30 @@ public class SitePathInitializer { chmod(0700, site.tmp_dir); extractMailExample("Abandoned.soy"); + extractMailExample("AbandonedHtml.soy"); extractMailExample("AddKey.soy"); extractMailExample("ChangeFooter.soy"); + extractMailExample("ChangeFooterHtml.soy"); extractMailExample("ChangeSubject.soy"); extractMailExample("Comment.soy"); extractMailExample("CommentFooter.soy"); extractMailExample("DeleteReviewer.soy"); + extractMailExample("DeleteReviewerHtml.soy"); extractMailExample("DeleteVote.soy"); + extractMailExample("DeleteVoteHtml.soy"); extractMailExample("Footer.soy"); + extractMailExample("FooterHtml.soy"); + extractMailExample("HeaderHtml.soy"); extractMailExample("Merged.soy"); extractMailExample("NewChange.soy"); + extractMailExample("NewChangeHtml.soy"); extractMailExample("RegisterNewEmail.soy"); extractMailExample("ReplacePatchSet.soy"); + extractMailExample("ReplacePatchSetHtml.soy"); extractMailExample("Restored.soy"); + extractMailExample("RestoredHtml.soy"); extractMailExample("Reverted.soy"); + extractMailExample("RevertedHtml.soy"); if (!ui.isBatch()) { System.err.println(); diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/AbandonedSender.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/AbandonedSender.java index eafa74dbf8..a828098c19 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/AbandonedSender.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/AbandonedSender.java @@ -51,5 +51,11 @@ public class AbandonedSender extends ReplyToChangeSender { @Override protected void formatChange() throws EmailException { appendText(textTemplate("Abandoned")); + appendHtml(soyHtmlTemplate("AbandonedHtml")); + } + + @Override + protected boolean useHtml() { + return true; } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/ChangeEmail.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/ChangeEmail.java index b310feb17d..cbd2ec9a00 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/ChangeEmail.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/ChangeEmail.java @@ -122,6 +122,9 @@ public abstract class ChangeEmail extends NotificationEmail { protected void format() throws EmailException { formatChange(); appendText(textTemplate("ChangeFooter")); + if (useHtml()) { + appendHtml(soyHtmlTemplate("ChangeFooterHtml")); + } try { TreeSet names = new TreeSet<>(); for (Account.Id who : changeData.reviewers().all()) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/DeleteReviewerSender.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/DeleteReviewerSender.java index 8a26a1012d..008f343e9c 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/DeleteReviewerSender.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/DeleteReviewerSender.java @@ -66,6 +66,7 @@ public class DeleteReviewerSender extends ReplyToChangeSender { @Override protected void formatChange() throws EmailException { appendText(textTemplate("DeleteReviewer")); + appendHtml(soyHtmlTemplate("DeleteReviewerHtml")); } public List getReviewerNames() { @@ -84,4 +85,9 @@ public class DeleteReviewerSender extends ReplyToChangeSender { super.setupSoyContext(); soyContextEmailData.put("reviewerNames", getReviewerNames()); } + + @Override + protected boolean useHtml() { + return true; + } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/DeleteVoteSender.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/DeleteVoteSender.java index 66f8123333..214c6557d1 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/DeleteVoteSender.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/DeleteVoteSender.java @@ -50,5 +50,11 @@ public class DeleteVoteSender extends ReplyToChangeSender { @Override protected void formatChange() throws EmailException { appendText(textTemplate("DeleteVote")); + appendHtml(soyHtmlTemplate("DeleteVoteHtml")); + } + + @Override + protected boolean useHtml() { + return true; } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/MailSoyTofuProvider.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/MailSoyTofuProvider.java index 5e0d8b65cf..9aef496d0d 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/MailSoyTofuProvider.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/MailSoyTofuProvider.java @@ -37,22 +37,32 @@ public class MailSoyTofuProvider implements Provider { // Note: will fail to construct the tofu object if this array is empty. private static final String[] TEMPLATES = { "Abandoned.soy", + "AbandonedHtml.soy", "AddKey.soy", "AddKeyHtml.soy", - "ChangeSubject.soy", "ChangeFooter.soy", + "ChangeFooterHtml.soy", + "ChangeSubject.soy", "Comment.soy", "CommentFooter.soy", "DeleteReviewer.soy", + "DeleteReviewerHtml.soy", "DeleteVote.soy", + "DeleteVoteHtml.soy", "Footer.soy", "FooterHtml.soy", + "HeaderHtml.soy", "Merged.soy", "NewChange.soy", + "NewChangeHtml.soy", "RegisterNewEmail.soy", "ReplacePatchSet.soy", + "ReplacePatchSetHtml.soy", "Restored.soy", + "RestoredHtml.soy", "Reverted.soy", + "RevertedHtml.soy", + "ViewChangeButton.soy", }; private final SitePaths site; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/NewChangeSender.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/NewChangeSender.java index a7eb0af68c..6adbdb4acd 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/NewChangeSender.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/NewChangeSender.java @@ -68,6 +68,7 @@ public abstract class NewChangeSender extends ChangeEmail { @Override protected void formatChange() throws EmailException { appendText(textTemplate("NewChange")); + appendHtml(soyHtmlTemplate("NewChangeHtml")); } public List getReviewerNames() { @@ -86,4 +87,9 @@ public abstract class NewChangeSender extends ChangeEmail { super.setupSoyContext(); soyContextEmailData.put("reviewerNames", getReviewerNames()); } + + @Override + protected boolean useHtml() { + return true; + } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/OutgoingEmail.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/OutgoingEmail.java index 78fe631a4c..1ea84c6bc6 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/OutgoingEmail.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/OutgoingEmail.java @@ -109,6 +109,9 @@ public abstract class OutgoingEmail { } init(); + if (useHtml()) { + appendHtml(soyHtmlTemplate("HeaderHtml")); + } format(); appendText(textTemplate("Footer")); if (useHtml()) { diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/ReplacePatchSetSender.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/ReplacePatchSetSender.java index d86aed38bc..916e0dac4c 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/ReplacePatchSetSender.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/ReplacePatchSetSender.java @@ -73,6 +73,7 @@ public class ReplacePatchSetSender extends ReplyToChangeSender { @Override protected void formatChange() throws EmailException { appendText(textTemplate("ReplacePatchSet")); + appendHtml(soyHtmlTemplate("ReplacePatchSetHtml")); } public List getReviewerNames() { @@ -94,4 +95,9 @@ public class ReplacePatchSetSender extends ReplyToChangeSender { super.setupSoyContext(); soyContextEmailData.put("reviewerNames", getReviewerNames()); } + + @Override + protected boolean useHtml() { + return true; + } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/RestoredSender.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/RestoredSender.java index 5b6d9bc0d1..10564cf439 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/RestoredSender.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/RestoredSender.java @@ -50,5 +50,11 @@ public class RestoredSender extends ReplyToChangeSender { @Override protected void formatChange() throws EmailException { appendText(textTemplate("Restored")); + appendHtml(soyHtmlTemplate("RestoredHtml")); + } + + @Override + protected boolean useHtml() { + return true; } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/RevertedSender.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/RevertedSender.java index 7d1690c052..e383d31302 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/RevertedSender.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/RevertedSender.java @@ -48,5 +48,11 @@ public class RevertedSender extends ReplyToChangeSender { @Override protected void formatChange() throws EmailException { appendText(textTemplate("Reverted")); + appendHtml(soyHtmlTemplate("RevertedHtml")); + } + + @Override + protected boolean useHtml() { + return true; } } diff --git a/gerrit-server/src/main/resources/com/google/gerrit/server/mail/AbandonedHtml.soy b/gerrit-server/src/main/resources/com/google/gerrit/server/mail/AbandonedHtml.soy new file mode 100644 index 0000000000..0f16890982 --- /dev/null +++ b/gerrit-server/src/main/resources/com/google/gerrit/server/mail/AbandonedHtml.soy @@ -0,0 +1,44 @@ +/** + * Copyright (C) 2016 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. + */ + +{namespace com.google.gerrit.server.mail.template} + +/** + * @param change + * @param coverLetter + * @param email + * @param fromName + */ +{template .AbandonedHtml autoescape="strict" kind="html"} +

+ {$fromName} has abandoned this change. +

+ + {if $email.changeUrl} +

+ {call .ViewChangeButton data="all" /} +

+ {/if} + +

+ Change subject: {$change.subject} +

+
+ + {if $coverLetter} +
{$coverLetter}
+ {/if} +{/template} diff --git a/gerrit-server/src/main/resources/com/google/gerrit/server/mail/ChangeFooterHtml.soy b/gerrit-server/src/main/resources/com/google/gerrit/server/mail/ChangeFooterHtml.soy new file mode 100644 index 0000000000..6d04ac3d28 --- /dev/null +++ b/gerrit-server/src/main/resources/com/google/gerrit/server/mail/ChangeFooterHtml.soy @@ -0,0 +1,49 @@ +/** + * Copyright (C) 2016 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. + */ + +{namespace com.google.gerrit.server.mail.template} + +/** + * @param branch + * @param change + * @param changeId + * @param email + * @param messageClass + * @param patchSet + * @param projectName + */ +{template .ChangeFooterHtml autoescape="strict" kind="html"} + {if $email.changeUrl or $email.settingsUrl} +

+ {if $email.changeUrl} + To view, visit this change. + {/if} + {if $email.changeUrl and $email.settingsUrl}{sp}{/if} + {if $email.settingsUrl} + To unsubscribe, visit settings. + {/if} +

+ {/if} + +

+ Gerrit-MessageType: {$messageClass}
+ Gerrit-Change-Id: {$changeId}
+ Gerrit-PatchSet: {$patchSet.patchSetId}
+ Gerrit-Project: {$projectName}
+ Gerrit-Branch: {$branch.shortName}
+ Gerrit-Owner: {$change.ownerEmail} +

+{/template} diff --git a/gerrit-server/src/main/resources/com/google/gerrit/server/mail/DeleteReviewerHtml.soy b/gerrit-server/src/main/resources/com/google/gerrit/server/mail/DeleteReviewerHtml.soy new file mode 100644 index 0000000000..2985ef88db --- /dev/null +++ b/gerrit-server/src/main/resources/com/google/gerrit/server/mail/DeleteReviewerHtml.soy @@ -0,0 +1,49 @@ +/** + * Copyright (C) 2016 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. + */ + +{namespace com.google.gerrit.server.mail.template} + +/** + * @param change + * @param coverLetter + * @param email + * @param fromName + */ +{template .DeleteReviewerHtml autoescape="strict" kind="html"} +

+ {$fromName} has removed{sp} + {foreach $reviewerName in $email.reviewerNames} + {if not isFirst($reviewerName)},{sp}{/if} + {$reviewerName} + {/foreach}{sp} + from this change. +

+ + {if $email.changeUrl} +

+ {call .ViewChangeButton data="all" /} +

+ {/if} + +

+ Change subject: {$change.subject} +

+
+ + {if $coverLetter} +
{$coverLetter}
+ {/if} +{/template} diff --git a/gerrit-server/src/main/resources/com/google/gerrit/server/mail/DeleteVoteHtml.soy b/gerrit-server/src/main/resources/com/google/gerrit/server/mail/DeleteVoteHtml.soy new file mode 100644 index 0000000000..8aa430ae4a --- /dev/null +++ b/gerrit-server/src/main/resources/com/google/gerrit/server/mail/DeleteVoteHtml.soy @@ -0,0 +1,44 @@ +/** + * Copyright (C) 2016 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. + */ + +{namespace com.google.gerrit.server.mail.template} + +/** + * @param change + * @param coverLetter + * @param email + * @param fromName + */ +{template .DeleteVoteHtml autoescape="strict" kind="html"} +

+ {$fromName} removed a vote on this change. +

+ + {if $email.changeUrl} +

+ {call .ViewChangeButton data="all" /} +

+ {/if} + +

+ Change subject: {$change.subject} +

+
+ + {if $coverLetter} +
{$coverLetter}
+ {/if} +{/template} diff --git a/gerrit-server/src/main/resources/com/google/gerrit/server/mail/HeaderHtml.soy b/gerrit-server/src/main/resources/com/google/gerrit/server/mail/HeaderHtml.soy new file mode 100644 index 0000000000..fdc3fee02a --- /dev/null +++ b/gerrit-server/src/main/resources/com/google/gerrit/server/mail/HeaderHtml.soy @@ -0,0 +1,20 @@ +/** + * Copyright (C) 2016 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. +*/ + +{namespace com.google.gerrit.server.mail.template} + +{template .HeaderHtml autoescape="strict" kind="html"} +{/template} diff --git a/gerrit-server/src/main/resources/com/google/gerrit/server/mail/NewChangeHtml.soy b/gerrit-server/src/main/resources/com/google/gerrit/server/mail/NewChangeHtml.soy new file mode 100644 index 0000000000..fda960d1d9 --- /dev/null +++ b/gerrit-server/src/main/resources/com/google/gerrit/server/mail/NewChangeHtml.soy @@ -0,0 +1,78 @@ +/** + * Copyright (C) 2016 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. + */ + +{namespace com.google.gerrit.server.mail.template} + +/** + * @param change + * @param email + * @param fromName + * @param patchSet + * @param projectName + */ +{template .NewChangeHtml autoescape="strict" kind="html"} + {if $email.reviewerNames} +

+ Hello{sp} + {foreach $reviewerName in $email.reviewerNames} + {if not isFirst($reviewerName)},{sp}{/if} + {$reviewerName} + {/foreach}, +

+ +

+ I'd like you to do a code review. +

+ + {if $email.changeUrl} +

+ Please visit this change to review. +

+ {/if} + {else} +

+ {$fromName} has uploaded a new change for review. +

+ + {if $email.changeUrl} +

+ {call .ViewChangeButton data="all" /} +

+ {/if} + {/if} + +

+ Change subject: {$change.subject} +

+
+ +
+    {$email.changeDetail}
+  
+ + {if $email.sshHost} +
+      git pull ssh:{print '//'}{$email.sshHost}/{$projectName}
+          {sp}{$patchSet.refName}
+    
+ {/if} + + {if $email.includeDiff} +
+      {$email.unifiedDiff}
+    
+ {/if} +{/template} diff --git a/gerrit-server/src/main/resources/com/google/gerrit/server/mail/ReplacePatchSetHtml.soy b/gerrit-server/src/main/resources/com/google/gerrit/server/mail/ReplacePatchSetHtml.soy new file mode 100644 index 0000000000..9df9a71585 --- /dev/null +++ b/gerrit-server/src/main/resources/com/google/gerrit/server/mail/ReplacePatchSetHtml.soy @@ -0,0 +1,72 @@ +/** + * Copyright (C) 2016 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. + */ + +{namespace com.google.gerrit.server.mail.template} + +/** + * @param change + * @param email + * @param fromName + * @param patchSet + * @param projectName + */ +{template .ReplacePatchSetHtml autoescape="strict" kind="html"} + {if $email.reviewerNames} +

+ Hello{sp} + {foreach $reviewerName in $email.reviewerNames} + {$reviewerName},{sp} + {/foreach} +

+ +

+ I'd like you to reexamine a change. +

+ + {if $email.changeUrl} +

+ Please visit this change to look at{sp} + the new patch set (#{$patchSet.patchSetId}). +

+ {/if} + {else} +

+ {$fromName} has uploaded a new patch set (#{$patchSet.patchSetId}). +

+ + {if $email.changeUrl} +

+ {call .ViewChangeButton data="all" /} +

+ {/if} + {/if} + +

+ Change subject: {$change.subject} +

+
+ +
+    {$email.changeDetail}
+  
+ + {if $email.sshHost} +
+      git pull ssh:{print '//'}{$email.sshHost}/{$projectName}{sp}
+          {$patchSet.refName}
+    
+ {/if} +{/template} diff --git a/gerrit-server/src/main/resources/com/google/gerrit/server/mail/RestoredHtml.soy b/gerrit-server/src/main/resources/com/google/gerrit/server/mail/RestoredHtml.soy new file mode 100644 index 0000000000..8a7dcc2b19 --- /dev/null +++ b/gerrit-server/src/main/resources/com/google/gerrit/server/mail/RestoredHtml.soy @@ -0,0 +1,44 @@ +/** + * Copyright (C) 2016 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. + */ + +{namespace com.google.gerrit.server.mail.template} + +/** + * @param change + * @param coverLetter + * @param email + * @param fromName + */ +{template .RestoredHtml autoescape="strict" kind="html"} +

+ {$fromName} has restored this change. +

+ + {if $email.changeUrl} +

+ {call .ViewChangeButton data="all" /} +

+ {/if} + +

+ Change subject: {$change.subject} +

+
+ + {if $coverLetter} +
{$coverLetter}
+ {/if} +{/template} diff --git a/gerrit-server/src/main/resources/com/google/gerrit/server/mail/RevertedHtml.soy b/gerrit-server/src/main/resources/com/google/gerrit/server/mail/RevertedHtml.soy new file mode 100644 index 0000000000..03d4dea988 --- /dev/null +++ b/gerrit-server/src/main/resources/com/google/gerrit/server/mail/RevertedHtml.soy @@ -0,0 +1,44 @@ +/** + * Copyright (C) 2016 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. + */ + +{namespace com.google.gerrit.server.mail.template} + +/** + * @param change + * @param coverLetter + * @param email + * @param fromName + */ +{template .RevertedHtml autoescape="strict" kind="html"} +

+ {$fromName} has reverted this change. +

+ + {if $email.changeUrl} +

+ {call .ViewChangeButton data="all" /} +

+ {/if} + +

+ Change subject: {$change.subject} +

+
+ + {if $coverLetter} +
{$coverLetter}
+ {/if} +{/template} diff --git a/gerrit-server/src/main/resources/com/google/gerrit/server/mail/ViewChangeButton.soy b/gerrit-server/src/main/resources/com/google/gerrit/server/mail/ViewChangeButton.soy new file mode 100644 index 0000000000..defde55077 --- /dev/null +++ b/gerrit-server/src/main/resources/com/google/gerrit/server/mail/ViewChangeButton.soy @@ -0,0 +1,25 @@ +/** + * Copyright (C) 2016 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. + */ + +{namespace com.google.gerrit.server.mail.template} + +/** + * Private template to generate "View Change" buttons. + * @param email + */ +{template .ViewChangeButton private="true" autoescape="strict" kind="html"} + View Change +{/template}