Merge branch 'stable-2.14' into stable-2.15

* stable-2.14:
  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

Change-Id: Ibe5c6e51e21961c3ce9b47253810978c25a8436d
This commit is contained in:
David Pursehouse 2018-03-06 16:25:55 +09:00
commit 48a3ae7168
18 changed files with 58 additions and 6 deletions

View File

@ -3,7 +3,7 @@
[[installation]]
== Installation
You need to use Java 8 and Node.js for building gerrit.
You need to use Python 2, Java 8, and Node.js for building gerrit.
You can install Bazel from the bazel.io:
https://www.bazel.io/versions/master/docs/install.html

View File

@ -52,7 +52,9 @@ import com.google.gerrit.server.config.DisableReverseDnsLookupProvider;
import com.google.gerrit.server.config.GerritServerConfig;
import com.google.gerrit.server.config.GitReceivePackGroups;
import com.google.gerrit.server.config.GitUploadPackGroups;
import com.google.gerrit.server.extensions.events.EventUtil;
import com.google.gerrit.server.extensions.events.GitReferenceUpdated;
import com.google.gerrit.server.extensions.events.RevisionCreated;
import com.google.gerrit.server.git.MergeUtil;
import com.google.gerrit.server.git.SearchingChangeCacheImpl;
import com.google.gerrit.server.git.TagCache;
@ -172,7 +174,9 @@ public class BatchProgramModule extends FactoryModule {
factory(SubmitRuleEvaluator.Factory.class);
bind(ChangeJson.Factory.class).toProvider(Providers.<ChangeJson.Factory>of(null));
bind(AccountVisibility.class).toProvider(AccountVisibilityProvider.class).in(SINGLETON);
bind(EventUtil.class).toProvider(Providers.<EventUtil>of(null));
bind(GitReferenceUpdated.class).toInstance(GitReferenceUpdated.DISABLED);
bind(RevisionCreated.class).toInstance(RevisionCreated.DISABLED);
bind(AccountVisibility.class).toProvider(AccountVisibilityProvider.class).in(SINGLETON);
}
}

View File

@ -19,7 +19,9 @@ import com.google.gerrit.extensions.events.AgreementSignupListener;
import com.google.gerrit.extensions.registration.DynamicSet;
import com.google.gerrit.reviewdb.client.Account;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@Singleton
public class AgreementSignup {
private final DynamicSet<AgreementSignupListener> listeners;
private final EventUtil util;

View File

@ -23,10 +23,12 @@ import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import java.sql.Timestamp;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Singleton
public class AssigneeChanged {
private static final Logger log = LoggerFactory.getLogger(AssigneeChanged.class);

View File

@ -29,11 +29,13 @@ 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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Singleton
public class ChangeAbandoned {
private static final Logger log = LoggerFactory.getLogger(ChangeAbandoned.class);

View File

@ -29,11 +29,13 @@ 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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Singleton
public class ChangeMerged {
private static final Logger log = LoggerFactory.getLogger(ChangeMerged.class);

View File

@ -29,11 +29,13 @@ 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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Singleton
public class ChangeRestored {
private static final Logger log = LoggerFactory.getLogger(ChangeRestored.class);

View File

@ -21,10 +21,12 @@ import com.google.gerrit.extensions.registration.DynamicSet;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import java.sql.Timestamp;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Singleton
public class ChangeReverted {
private static final Logger log = LoggerFactory.getLogger(ChangeReverted.class);

View File

@ -30,12 +30,14 @@ 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.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Singleton
public class CommentAdded {
private static final Logger log = LoggerFactory.getLogger(CommentAdded.class);

View File

@ -34,6 +34,7 @@ import com.google.gerrit.server.query.change.ChangeData;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
import java.io.IOException;
import java.sql.Timestamp;
import java.util.EnumSet;
@ -42,6 +43,7 @@ import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Singleton
public class EventUtil {
private static final Logger log = LoggerFactory.getLogger(EventUtil.class);
@ -64,7 +66,7 @@ public class EventUtil {
private final ChangeData.Factory changeDataFactory;
private final Provider<ReviewDb> db;
private final ChangeJson changeJson;
private final ChangeJson.Factory changeJsonFactory;
@Inject
EventUtil(
@ -73,11 +75,11 @@ public class EventUtil {
Provider<ReviewDb> db) {
this.changeDataFactory = changeDataFactory;
this.db = db;
this.changeJson = changeJsonFactory.create(CHANGE_OPTIONS);
this.changeJsonFactory = changeJsonFactory;
}
public ChangeInfo changeInfo(Change change) throws OrmException {
return changeJson.format(change);
return changeJsonFactory.create(CHANGE_OPTIONS).format(change);
}
public RevisionInfo revisionInfo(Project project, PatchSet ps)
@ -90,7 +92,7 @@ public class EventUtil {
throws OrmException, PatchListNotAvailableException, GpgException, IOException,
PermissionBackendException {
ChangeData cd = changeDataFactory.create(db.get(), project, ps.getId().getParentKey());
return changeJson.getRevisionInfo(cd, ps);
return changeJsonFactory.create(CHANGE_OPTIONS).getRevisionInfo(cd, ps);
}
public AccountInfo accountInfo(Account a) {

View File

@ -21,11 +21,13 @@ import com.google.gerrit.extensions.registration.DynamicSet;
import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.client.Project;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import org.eclipse.jgit.lib.BatchRefUpdate;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.RefUpdate;
import org.eclipse.jgit.transport.ReceiveCommand;
@Singleton
public class GitReferenceUpdated {
public static final GitReferenceUpdated DISABLED =
new GitReferenceUpdated() {

View File

@ -24,12 +24,14 @@ import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import java.sql.Timestamp;
import java.util.Collection;
import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Singleton
public class HashtagsEdited {
private static final Logger log = LoggerFactory.getLogger(HashtagsEdited.class);

View File

@ -17,7 +17,9 @@ package com.google.gerrit.server.extensions.events;
import com.google.gerrit.extensions.events.PluginEventListener;
import com.google.gerrit.extensions.registration.DynamicSet;
import com.google.inject.Inject;
import com.google.inject.Singleton;
@Singleton
public class PluginEvent {
private final DynamicSet<PluginEventListener> listeners;

View File

@ -30,12 +30,14 @@ 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);

View File

@ -30,12 +30,14 @@ 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.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Singleton
public class ReviewerDeleted {
private static final Logger log = LoggerFactory.getLogger(ReviewerDeleted.class);

View File

@ -29,14 +29,27 @@ 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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Singleton
public class RevisionCreated {
private static final Logger log = LoggerFactory.getLogger(RevisionCreated.class);
public static final RevisionCreated DISABLED =
new RevisionCreated() {
@Override
public void fire(
Change change,
PatchSet patchSet,
Account uploader,
Timestamp when,
NotifyHandling notify) {}
};
private final DynamicSet<RevisionCreatedListener> listeners;
private final EventUtil util;
@ -46,6 +59,11 @@ public class RevisionCreated {
this.util = util;
}
private RevisionCreated() {
this.listeners = null;
this.util = null;
}
public void fire(
Change change, PatchSet patchSet, Account uploader, Timestamp when, NotifyHandling notify) {
if (!listeners.iterator().hasNext()) {

View File

@ -23,10 +23,12 @@ import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import java.sql.Timestamp;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Singleton
public class TopicEdited {
private static final Logger log = LoggerFactory.getLogger(TopicEdited.class);

View File

@ -30,12 +30,14 @@ 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.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Singleton
public class VoteDeleted {
private static final Logger log = LoggerFactory.getLogger(VoteDeleted.class);