Merge "Plugin API: Provide custom manifest file"
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 3cc3fdc..bb4ac9d 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 @@
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<AccountInfo> 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 fb37d9d..4166ca3 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 @@
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.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 @@
private final Provider<IdentifiedUser> 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 @@
Provider<IdentifiedUser> user,
IdentifiedUser.GenericFactory identifiedUserFactory,
@GerritServerConfig Config cfg,
- AccountCache accountCache,
ReviewerJson json,
ReviewerAdded reviewerAdded,
NotesMigration migration) {
@@ -132,7 +130,6 @@
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 @@
}
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<Account.Id> reviewers = Lists.transform(addedReviewers,
+ new Function<PatchSetApproval, Account.Id>() {
+ @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 1368bf3..8d093f0 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 @@
}
@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 @@
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 3ae8135..c0b3249 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 java.io.IOException;
import java.sql.Timestamp;
+import java.util.List;
public class ReviewerAdded {
private static final Logger log =
@@ -49,29 +52,38 @@
}
public void fire(ChangeInfo change, RevisionInfo revision,
- AccountInfo reviewer, AccountInfo adder, Timestamp when) {
+ List<AccountInfo> 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<Account.Id> reviewers,
Account adder, Timestamp when) {
- if (!listeners.iterator().hasNext()) {
+ if (!listeners.iterator().hasNext() || reviewers.isEmpty()) {
return;
}
+
+ List<AccountInfo> transformed = Lists.transform(reviewers,
+ new Function<Account.Id, AccountInfo>() {
+ @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 @@
private static class Event extends AbstractRevisionEvent
implements ReviewerAddedListener.Event {
- private final AccountInfo reviewer;
+ private final List<AccountInfo> reviewers;
- Event(ChangeInfo change, RevisionInfo revision, AccountInfo reviewer,
+ Event(ChangeInfo change, RevisionInfo revision, List<AccountInfo> 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<AccountInfo> getReviewers() {
+ return reviewers;
}
}
}
diff --git a/plugins/hooks b/plugins/hooks
index 3acc14d..ac87f18 160000
--- a/plugins/hooks
+++ b/plugins/hooks
@@ -1 +1 @@
-Subproject commit 3acc14d10d26678eae6489038fe0d4dad644a9b4
+Subproject commit ac87f187034838e6cf8d5824b2e541cc9b3a0aa4