diff options
author | Shawn O. Pearce <sop@google.com> | 2009-03-19 14:09:38 -0700 |
---|---|---|
committer | Shawn O. Pearce <sop@google.com> | 2009-03-19 14:09:38 -0700 |
commit | 1ade22ca8852e25fb2175a94829416f309c2f60d (patch) | |
tree | c183ab3d37d3d7cba48713f36cff4f8c6d3731d6 | |
parent | 20c399d0ea1acda04b3cdfbafef5109a056290a6 (diff) |
BCC any user who has starred a change when sending related emails
If the user has starred the change, they are quite likely interested
in seeing updates to it, and following its progress. BCC them on any
emails we generate so they can be kept current.
Signed-off-by: Shawn O. Pearce <sop@google.com>
4 files changed, 27 insertions, 0 deletions
diff --git a/src/main/java/com/google/gerrit/client/reviewdb/StarredChangeAccess.java b/src/main/java/com/google/gerrit/client/reviewdb/StarredChangeAccess.java index 98e932855c..8c249593a0 100644 --- a/src/main/java/com/google/gerrit/client/reviewdb/StarredChangeAccess.java +++ b/src/main/java/com/google/gerrit/client/reviewdb/StarredChangeAccess.java @@ -27,4 +27,7 @@ public interface StarredChangeAccess extends @Query("WHERE key.accountId = ?") ResultSet<StarredChange> byAccount(Account.Id id) throws OrmException; + + @Query("WHERE key.changeId = ?") + ResultSet<StarredChange> byChange(Change.Id id) throws OrmException; } diff --git a/src/main/java/com/google/gerrit/server/ChangeMail.java b/src/main/java/com/google/gerrit/server/ChangeMail.java index e9370d9ff2..1b1d668e43 100644 --- a/src/main/java/com/google/gerrit/server/ChangeMail.java +++ b/src/main/java/com/google/gerrit/server/ChangeMail.java @@ -27,6 +27,7 @@ import com.google.gerrit.client.reviewdb.PatchSet; import com.google.gerrit.client.reviewdb.PatchSetInfo; import com.google.gerrit.client.reviewdb.Project; import com.google.gerrit.client.reviewdb.ReviewDb; +import com.google.gerrit.client.reviewdb.StarredChange; import com.google.gerrit.client.reviewdb.UserIdentity; import com.google.gerrit.client.rpc.Common; import com.google.gwtorm.client.OrmException; @@ -199,6 +200,7 @@ public class ChangeMail { return; } newChangeCc(); + starredTo(); body.append("Uploaded replacement patch set "); body.append(patchSet.getPatchSetId()); @@ -260,6 +262,7 @@ public class ChangeMail { initInReplyToChange(); commentTo(); + starredTo(); send(); } } @@ -320,6 +323,7 @@ public class ChangeMail { initInReplyToChange(); submittedTo(); + starredTo(); send(); } } @@ -355,6 +359,7 @@ public class ChangeMail { initInReplyToChange(); commentTo(); + starredTo(); send(); } } @@ -500,6 +505,20 @@ public class ChangeMail { } } + private void starredTo() throws MessagingException { + try { + // BCC anyone else who has starred this change. + // + for (StarredChange w : db.starredChanges().byChange(change.getId())) { + add(RecipientType.BCC, w.getAccountId()); + } + } catch (OrmException err) { + // Just don't CC everyone. Better to send a partial message to those + // we already have queued up then to fail deliver entirely to people + // who have a lower interest in the change. + } + } + private boolean begin(final String messageClass) throws MessagingException { if (transport != null) { msg = new MimeMessage(transport); diff --git a/src/main/webapp/WEB-INF/sql/query_index.sql b/src/main/webapp/WEB-INF/sql/query_index.sql index 012a69fbc3..3eb8df1f78 100644 --- a/src/main/webapp/WEB-INF/sql/query_index.sql +++ b/src/main/webapp/WEB-INF/sql/query_index.sql @@ -202,3 +202,6 @@ ON project_rights (category_id); -- ********************************************************************* -- StarredChangeAccess -- @PrimaryKey covers: byAccount + +CREATE INDEX starred_changes_byChange +ON starred_changes (change_id); diff --git a/src/main/webapp/WEB-INF/sql/upgrade006_007.sql b/src/main/webapp/WEB-INF/sql/upgrade006_007.sql index 1f2a872f25..0187db693c 100644 --- a/src/main/webapp/WEB-INF/sql/upgrade006_007.sql +++ b/src/main/webapp/WEB-INF/sql/upgrade006_007.sql @@ -17,5 +17,7 @@ CREATE INDEX account_project_watches_ntSub ON account_project_watches (project_id) WHERE notify_submitted_changes = 'Y'; +CREATE INDEX starred_changes_byChange +ON starred_changes (change_id); UPDATE schema_version SET version_nbr = 7; |