From 02aacbc43ccd6bf3fa26843bacd04185e90a385c Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Tue, 12 Jun 2012 13:44:22 -0700 Subject: [PATCH] sendemail.includeDiff: Enable $email.UnifiedDiff in NewChange.vm Instead of making site administrators hack the email template, allow admins to enable the diff feature by setting a configuration variable in gerrit.config. Change-Id: I378485ca076cd9c56bc5149a0aaa202b20ba82d4 --- Documentation/config-gerrit.txt | 8 +++++ .../gerrit/server/mail/EmailArguments.java | 5 ++- .../gerrit/server/mail/EmailSettings.java | 31 +++++++++++++++++++ .../gerrit/server/mail/NewChangeSender.java | 4 +++ .../google/gerrit/server/mail/NewChange.vm | 5 +-- 5 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 gerrit-server/src/main/java/com/google/gerrit/server/mail/EmailSettings.java diff --git a/Documentation/config-gerrit.txt b/Documentation/config-gerrit.txt index 6e50ef4cf1..e0418ec14a 100644 --- a/Documentation/config-gerrit.txt +++ b/Documentation/config-gerrit.txt @@ -1879,6 +1879,14 @@ email from Gerrit. + By default, unset, permitting delivery to any email address. +[[sendemail.includeDiff]]sendemail.includeDiff:: ++ +If true, new change emails from Gerrit will include the complete +unified diff of the change. There is no upper limit on how large +the email can get when this option is enabled. ++ +By default, false. + [[sendemail.importance]]sendemail.importance:: + If present, emails sent from Gerrit will have the given level diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/EmailArguments.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/EmailArguments.java index e6c96a386e..e6eda8242e 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/mail/EmailArguments.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/EmailArguments.java @@ -55,6 +55,7 @@ class EmailArguments { final Provider queryRewriter; final Provider db; final RuntimeInstance velocityRuntime; + final EmailSettings settings; @Inject EmailArguments(GitRepositoryManager server, ProjectCache projectCache, @@ -68,7 +69,8 @@ class EmailArguments { AllProjectsName allProjectsName, ChangeQueryBuilder.Factory queryBuilder, Provider queryRewriter, Provider db, - RuntimeInstance velocityRuntime) { + RuntimeInstance velocityRuntime, + EmailSettings settings) { this.server = server; this.projectCache = projectCache; this.groupBackend = groupBackend; @@ -86,5 +88,6 @@ class EmailArguments { this.queryRewriter = queryRewriter; this.db = db; this.velocityRuntime = velocityRuntime; + this.settings = settings; } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/mail/EmailSettings.java b/gerrit-server/src/main/java/com/google/gerrit/server/mail/EmailSettings.java new file mode 100644 index 0000000000..145da629ee --- /dev/null +++ b/gerrit-server/src/main/java/com/google/gerrit/server/mail/EmailSettings.java @@ -0,0 +1,31 @@ +// Copyright (C) 2012 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. + +package com.google.gerrit.server.mail; + +import com.google.gerrit.server.config.GerritServerConfig; +import com.google.inject.Inject; +import com.google.inject.Singleton; + +import org.eclipse.jgit.lib.Config; + +@Singleton +class EmailSettings { + final boolean includeDiff; + + @Inject + EmailSettings(@GerritServerConfig Config cfg) { + includeDiff = cfg.getBoolean("sendemail", "includeDiff", false); + } +} 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 f1f83bb62c..e7eb7440fc 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 @@ -101,6 +101,10 @@ public abstract class NewChangeSender extends ChangeEmail { return host; } + public boolean getIncludeDiff() { + return args.settings.includeDiff; + } + /** Show patch set as unified difference. */ public String getUnifiedDiff() { ByteArrayOutputStream out = new ByteArrayOutputStream(); diff --git a/gerrit-server/src/main/resources/com/google/gerrit/server/mail/NewChange.vm b/gerrit-server/src/main/resources/com/google/gerrit/server/mail/NewChange.vm index 3e3257f6bf..43a9aacd41 100644 --- a/gerrit-server/src/main/resources/com/google/gerrit/server/mail/NewChange.vm +++ b/gerrit-server/src/main/resources/com/google/gerrit/server/mail/NewChange.vm @@ -52,6 +52,7 @@ $email.changeDetail #if($email.sshHost) git pull ssh://$email.sshHost/$projectName $patchSet.refName #end +#if($email.includeDiff) -## It is possible to include the patch as a unified diff in the email: -#$email.UnifiedDiff +$email.UnifiedDiff +#end \ No newline at end of file