diff --git a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/events/ReviewerAddedListener.java b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/events/ReviewerAddedListener.java index 3cc3fdc393..bb4ac9db93 100644 --- a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/events/ReviewerAddedListener.java +++ b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/events/ReviewerAddedListener.java @@ -17,12 +17,14 @@ package com.google.gerrit.extensions.events; import com.google.gerrit.extensions.annotations.ExtensionPoint; import com.google.gerrit.extensions.common.AccountInfo; -/** Notified whenever a Reviewer is added to a change. */ +import java.util.List; + +/** Notified whenever one or more Reviewers are added to a change. */ @ExtensionPoint public interface ReviewerAddedListener { interface Event extends ChangeEvent { - AccountInfo getReviewer(); + List getReviewers(); } - void onReviewerAdded(Event event); + void onReviewersAdded(Event event); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReviewers.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReviewers.java index fb37d9d8c1..4166ca3bb5 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReviewers.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/PostReviewers.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.change; import static com.google.gerrit.extensions.client.ReviewerState.CC; import static com.google.gerrit.extensions.client.ReviewerState.REVIEWER; +import com.google.common.base.Function; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; @@ -40,7 +41,6 @@ import com.google.gerrit.reviewdb.server.ReviewDb; import com.google.gerrit.server.ApprovalsUtil; import com.google.gerrit.server.IdentifiedUser; import com.google.gerrit.server.PatchSetUtil; -import com.google.gerrit.server.account.AccountCache; import com.google.gerrit.server.account.AccountLoader; import com.google.gerrit.server.account.AccountsCollection; import com.google.gerrit.server.account.GroupMembers; @@ -96,7 +96,6 @@ public class PostReviewers private final Provider user; private final IdentifiedUser.GenericFactory identifiedUserFactory; private final Config cfg; - private final AccountCache accountCache; private final ReviewerJson json; private final ReviewerAdded reviewerAdded; private final NotesMigration migration; @@ -115,7 +114,6 @@ public class PostReviewers Provider user, IdentifiedUser.GenericFactory identifiedUserFactory, @GerritServerConfig Config cfg, - AccountCache accountCache, ReviewerJson json, ReviewerAdded reviewerAdded, NotesMigration migration) { @@ -132,7 +130,6 @@ public class PostReviewers this.user = user; this.identifiedUserFactory = identifiedUserFactory; this.cfg = cfg; - this.accountCache = accountCache; this.json = json; this.reviewerAdded = reviewerAdded; this.migration = migration; @@ -355,11 +352,15 @@ public class PostReviewers } emailReviewers(rsrc.getChange(), addedReviewers, addedCCs); if (!addedReviewers.isEmpty()) { - for (PatchSetApproval psa : addedReviewers) { - Account account = accountCache.get(psa.getAccountId()).getAccount(); - reviewerAdded.fire(rsrc.getChange(), patchSet, account, + List reviewers = Lists.transform(addedReviewers, + new Function() { + @Override + public Account.Id apply(PatchSetApproval psa) { + return psa.getAccountId(); + } + }); + reviewerAdded.fire(rsrc.getChange(), patchSet, reviewers, ctx.getAccount(), ctx.getWhen()); - } } } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/events/StreamEventsApiListener.java b/gerrit-server/src/main/java/com/google/gerrit/server/events/StreamEventsApiListener.java index 1368bf3cc5..8d093f0ba9 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/events/StreamEventsApiListener.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/events/StreamEventsApiListener.java @@ -321,7 +321,7 @@ public class StreamEventsApiListener implements } @Override - public void onReviewerAdded(ReviewerAddedListener.Event ev) { + public void onReviewersAdded(ReviewerAddedListener.Event ev) { try { ChangeNotes notes = getNotes(ev.getChange()); Change change = notes.getChange(); @@ -330,9 +330,10 @@ public class StreamEventsApiListener implements event.change = changeAttributeSupplier(change); event.patchSet = patchSetAttributeSupplier(change, psUtil.current(db.get(), notes)); - event.reviewer = accountAttributeSupplier(ev.getReviewer()); - - dispatcher.get().postEvent(change, event); + for (AccountInfo reviewer : ev.getReviewers()) { + event.reviewer = accountAttributeSupplier(reviewer); + dispatcher.get().postEvent(change, event); + } } catch (OrmException e) { log.error("Failed to dispatch event", e); } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/ReviewerAdded.java b/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/ReviewerAdded.java index 3ae8135175..c0b3249c21 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/ReviewerAdded.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/extensions/events/ReviewerAdded.java @@ -15,6 +15,8 @@ package com.google.gerrit.server.extensions.events; import com.google.gerrit.extensions.api.changes.NotifyHandling; +import com.google.common.base.Function; +import com.google.common.collect.Lists; import com.google.gerrit.extensions.common.AccountInfo; import com.google.gerrit.extensions.common.ChangeInfo; import com.google.gerrit.extensions.common.RevisionInfo; @@ -33,6 +35,7 @@ import org.slf4j.LoggerFactory; import java.io.IOException; import java.sql.Timestamp; +import java.util.List; public class ReviewerAdded { private static final Logger log = @@ -49,29 +52,38 @@ public class ReviewerAdded { } public void fire(ChangeInfo change, RevisionInfo revision, - AccountInfo reviewer, AccountInfo adder, Timestamp when) { + List reviewers, AccountInfo adder, Timestamp when) { if (!listeners.iterator().hasNext()) { return; } - Event event = new Event(change, revision, reviewer, adder, when); + Event event = new Event(change, revision, reviewers, adder, when); for (ReviewerAddedListener l : listeners) { try { - l.onReviewerAdded(event); + l.onReviewersAdded(event); } catch (Exception e) { log.warn("Error in event listener, e"); } } } - public void fire(Change change, PatchSet patchSet, Account account, + public void fire(Change change, PatchSet patchSet, List reviewers, Account adder, Timestamp when) { - if (!listeners.iterator().hasNext()) { + if (!listeners.iterator().hasNext() || reviewers.isEmpty()) { return; } + + List transformed = Lists.transform(reviewers, + new Function() { + @Override + public AccountInfo apply(Account.Id account) { + return util.accountInfo(account); + } + }); + try { fire(util.changeInfo(change), util.revisionInfo(change.getProject(), patchSet), - util.accountInfo(account), + transformed, util.accountInfo(adder), when); } catch (PatchListNotAvailableException | GpgException | IOException @@ -82,17 +94,17 @@ public class ReviewerAdded { private static class Event extends AbstractRevisionEvent implements ReviewerAddedListener.Event { - private final AccountInfo reviewer; + private final List reviewers; - Event(ChangeInfo change, RevisionInfo revision, AccountInfo reviewer, + Event(ChangeInfo change, RevisionInfo revision, List reviewers, AccountInfo adder, Timestamp when) { super(change, revision, adder, when, NotifyHandling.ALL); - this.reviewer = reviewer; + this.reviewers = reviewers; } @Override - public AccountInfo getReviewer() { - return reviewer; + public List getReviewers() { + return reviewers; } } } diff --git a/plugins/hooks b/plugins/hooks index 3acc14d10d..ac87f18703 160000 --- a/plugins/hooks +++ b/plugins/hooks @@ -1 +1 @@ -Subproject commit 3acc14d10d26678eae6489038fe0d4dad644a9b4 +Subproject commit ac87f187034838e6cf8d5824b2e541cc9b3a0aa4