Include Gerrit-Owner, Gerrit-Reviewer in email footers

Dan requested that we embed the Gerrit-Owner and the Gerrit-Reviewer
into the footer of each message sent, so that GMail can be used to
filter for changes he created ("Gerrit-Owner: dan@...") or that is
reviewing ("Gerrit-Reviewer: dan@...").

Bug: issue 623
Change-Id: I7fd1a97f316d74b38bb38045fc2aab6c5c73401f
Signed-off-by: Shawn O. Pearce <sop@google.com>
This commit is contained in:
Shawn O. Pearce
2010-07-13 08:02:07 -07:00
parent e7d485ccc4
commit 25c25a969f

View File

@@ -28,6 +28,7 @@ import com.google.gerrit.reviewdb.StarredChange;
import com.google.gerrit.reviewdb.UserIdentity;
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.account.AccountCache;
import com.google.gerrit.server.account.AccountState;
import com.google.gerrit.server.config.CanonicalWebUrl;
import com.google.gerrit.server.config.WildProjectName;
import com.google.gerrit.server.git.GitRepositoryManager;
@@ -56,6 +57,7 @@ import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import java.util.TreeSet;
import javax.annotation.Nullable;
@@ -191,6 +193,27 @@ public abstract class OutgoingEmail {
appendText("Gerrit-MessageType: " + messageClass + "\n");
appendText("Gerrit-Project: " + projectName + "\n");
appendText("Gerrit-Branch: " + change.getDest().getShortName() + "\n");
appendText("Gerrit-Owner: " + getNameEmailFor(change.getOwner()) + "\n");
if (db != null) {
try {
HashSet<Account.Id> reviewers = new HashSet<Account.Id>();
for (PatchSetApproval p : db.patchSetApprovals().byChange(
change.getId())) {
reviewers.add(p.getAccountId());
}
TreeSet<String> names = new TreeSet<String>();
for (Account.Id who : reviewers) {
names.add(getNameEmailFor(who));
}
for (String name : names) {
appendText("Gerrit-Reviewer: " + name + "\n");
}
} catch (OrmException e) {
}
}
}
if (headers.get("Message-ID").isEmpty()) {
@@ -489,6 +512,24 @@ public abstract class OutgoingEmail {
return name;
}
private String getNameEmailFor(Account.Id accountId) {
AccountState who = accountCache.get(accountId);
String name = who.getAccount().getFullName();
String email = who.getAccount().getPreferredEmail();
if (name != null && email != null) {
return name + " <" + email + ">";
} else if (name != null) {
return name;
} else if (email != null) {
return email;
} else /* (name == null && email == null) */{
return "Anonymous Coward #" + accountId;
}
}
protected boolean shouldSendMessage() {
if (body.length() == 0) {
// If we have no message body, don't send.