* stable-2.15: ChangeIT: Temporarily disable tests related to group matching Align SSH create-project with REST API SubmoduleOp: Fix formatting of submodule update commit message Fix Postgresql JDBC driver leaking memory Document that the build works with Python 2 or 3 merge_jars.py: Fix for python 3 compatibility project.py: decode byte output from check_result license and doc: Add support for python3 Bazel: Make build tool chain python 3 compatible ExternalIds NoteDb migration: Avoid intermediate migration state Make PrivateStateChanged and WorkInProgressStateChanged singletons BatchProgramModule: Bind GitReferenceUpdated.DISABLED BatchProgramModule: Don't bind event classes to null Document that Python 2 is required by the build Make event firing classes singleton Fix ConcurrentModificationException when posting reviews Revert partially "Trim multi-line arguments for task name and ssh_log" BaseCommand: Fix formatting of task description with arguments Add analytics to the list of plugins config-plugins: Consistently use "/+doc/" for documentation links config-plugins: Fix link to ref-protection plugin documentation config-plugins: Add readonly plugin to plugin list Add documentation for SshCreateCommandInterceptor Allow plugins to intercept ssh command creation GWT/Poly: Default to "Create initial commit" during project creation Revert "Reduce chance of deadlock in account cache" commit-msg: Adapt to awk behavior change on Cygwin/MSYS Expand docs on how to include external dependencies in core plugins Document how to bundle custom plugins in release.war Group members can't be added as reviewers if a matched username exists Set version to 2.13.11 StreamEventsApiListener: Prevent NPE when account is null Set version to 2.11.11 Replace links to code.google.com/p/gerrit Update issue tracker URL in documentation Update issue tracker URL in POM files Bump jsch to 0.54 Update jsch to 0.1.53 Bump Jsch to 1.52 Change-Id: Icec3dcfe53146da7d66d4d690afdd9e77ee10380
108 lines
3.5 KiB
Java
108 lines
3.5 KiB
Java
// Copyright (C) 2015 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.extensions.events;
|
|
|
|
import com.google.common.collect.Lists;
|
|
import com.google.gerrit.extensions.api.changes.NotifyHandling;
|
|
import com.google.gerrit.extensions.common.AccountInfo;
|
|
import com.google.gerrit.extensions.common.ChangeInfo;
|
|
import com.google.gerrit.extensions.common.RevisionInfo;
|
|
import com.google.gerrit.extensions.events.ReviewerAddedListener;
|
|
import com.google.gerrit.extensions.registration.DynamicSet;
|
|
import com.google.gerrit.reviewdb.client.Change;
|
|
import com.google.gerrit.reviewdb.client.PatchSet;
|
|
import com.google.gerrit.server.GpgException;
|
|
import com.google.gerrit.server.account.AccountState;
|
|
import com.google.gerrit.server.patch.PatchListNotAvailableException;
|
|
import com.google.gerrit.server.patch.PatchListObjectTooLargeException;
|
|
import com.google.gerrit.server.permissions.PermissionBackendException;
|
|
import com.google.gwtorm.server.OrmException;
|
|
import com.google.inject.Inject;
|
|
import com.google.inject.Singleton;
|
|
import java.io.IOException;
|
|
import java.sql.Timestamp;
|
|
import java.util.List;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
@Singleton
|
|
public class ReviewerAdded {
|
|
private static final Logger log = LoggerFactory.getLogger(ReviewerAdded.class);
|
|
|
|
private final DynamicSet<ReviewerAddedListener> listeners;
|
|
private final EventUtil util;
|
|
|
|
@Inject
|
|
ReviewerAdded(DynamicSet<ReviewerAddedListener> listeners, EventUtil util) {
|
|
this.listeners = listeners;
|
|
this.util = util;
|
|
}
|
|
|
|
public void fire(
|
|
Change change,
|
|
PatchSet patchSet,
|
|
List<AccountState> reviewers,
|
|
AccountState adder,
|
|
Timestamp when) {
|
|
if (!listeners.iterator().hasNext() || reviewers.isEmpty()) {
|
|
return;
|
|
}
|
|
|
|
try {
|
|
Event event =
|
|
new Event(
|
|
util.changeInfo(change),
|
|
util.revisionInfo(change.getProject(), patchSet),
|
|
Lists.transform(reviewers, util::accountInfo),
|
|
util.accountInfo(adder),
|
|
when);
|
|
for (ReviewerAddedListener l : listeners) {
|
|
try {
|
|
l.onReviewersAdded(event);
|
|
} catch (Exception e) {
|
|
util.logEventListenerError(this, l, e);
|
|
}
|
|
}
|
|
} catch (PatchListObjectTooLargeException e) {
|
|
log.warn("Couldn't fire event: " + e.getMessage());
|
|
} catch (PatchListNotAvailableException
|
|
| GpgException
|
|
| IOException
|
|
| OrmException
|
|
| PermissionBackendException e) {
|
|
log.error("Couldn't fire event", e);
|
|
}
|
|
}
|
|
|
|
private static class Event extends AbstractRevisionEvent implements ReviewerAddedListener.Event {
|
|
private final List<AccountInfo> reviewers;
|
|
|
|
Event(
|
|
ChangeInfo change,
|
|
RevisionInfo revision,
|
|
List<AccountInfo> reviewers,
|
|
AccountInfo adder,
|
|
Timestamp when) {
|
|
super(change, revision, adder, when, NotifyHandling.ALL);
|
|
this.reviewers = reviewers;
|
|
}
|
|
|
|
@Override
|
|
public List<AccountInfo> getReviewers() {
|
|
return reviewers;
|
|
}
|
|
}
|
|
}
|