Index change when combined state changes
Bug: Issue 12927
Change-Id: I570939fa1f6cabefa143d7de359866c5309bb9d6
diff --git a/java/com/google/gerrit/plugins/checks/ChecksUpdate.java b/java/com/google/gerrit/plugins/checks/ChecksUpdate.java
index 63df867..6191cd2 100644
--- a/java/com/google/gerrit/plugins/checks/ChecksUpdate.java
+++ b/java/com/google/gerrit/plugins/checks/ChecksUpdate.java
@@ -17,12 +17,16 @@
import com.google.common.collect.ImmutableMap;
import com.google.common.flogger.FluentLogger;
import com.google.gerrit.common.Nullable;
+import com.google.gerrit.entities.Change;
import com.google.gerrit.entities.PatchSet;
+import com.google.gerrit.entities.Project;
import com.google.gerrit.exceptions.DuplicateKeyException;
+import com.google.gerrit.extensions.api.changes.Changes;
import com.google.gerrit.extensions.api.changes.NotifyHandling;
import com.google.gerrit.extensions.api.changes.NotifyInfo;
import com.google.gerrit.extensions.api.changes.RecipientType;
import com.google.gerrit.extensions.restapi.BadRequestException;
+import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.plugins.checks.Checks.GetCheckOptions;
import com.google.gerrit.plugins.checks.api.CombinedCheckState;
import com.google.gerrit.plugins.checks.email.CombinedCheckStateUpdatedSender;
@@ -64,6 +68,7 @@
private final Checks checks;
private final Checkers checkers;
private final NotifyResolver notifyResolver;
+ private final Changes changes;
private final Optional<IdentifiedUser> currentUser;
@AssistedInject
@@ -76,6 +81,7 @@
Checks checks,
Checkers checkers,
NotifyResolver notifyResolver,
+ Changes changes,
@Assisted IdentifiedUser currentUser) {
this.checksStorageUpdate = checksStorageUpdate;
this.combinedCheckStateCache = combinedCheckStateCache;
@@ -85,6 +91,7 @@
this.checks = checks;
this.checkers = checkers;
this.notifyResolver = notifyResolver;
+ this.changes = changes;
this.currentUser = Optional.of(currentUser);
}
@@ -97,7 +104,8 @@
PatchSetUtil psUtil,
Checks checks,
Checkers checkers,
- NotifyResolver notifyResolver) {
+ NotifyResolver notifyResolver,
+ Changes changes) {
this.checksStorageUpdate = checksStorageUpdate;
this.combinedCheckStateCache = combinedCheckStateCache;
this.combinedCheckStateUpdatedSenderFactory = combinedCheckStateUpdatedSenderFactory;
@@ -106,6 +114,7 @@
this.checks = checks;
this.checkers = checkers;
this.notifyResolver = notifyResolver;
+ this.changes = changes;
this.currentUser = Optional.empty();
}
@@ -122,6 +131,8 @@
CombinedCheckState newCombinedCheckState =
combinedCheckStateCache.get(key.repository(), key.patchSet());
+ maybeIndexChange(
+ oldCombinedCheckState, newCombinedCheckState, key.repository(), key.patchSet().changeId());
maybeSendEmail(
notifyHandling, notifyDetails, check, oldCombinedCheckState, newCombinedCheckState);
@@ -141,12 +152,28 @@
CombinedCheckState newCombinedCheckState =
combinedCheckStateCache.get(key.repository(), key.patchSet());
+ maybeIndexChange(
+ oldCombinedCheckState, newCombinedCheckState, key.repository(), key.patchSet().changeId());
maybeSendEmail(
notifyHandling, notifyDetails, check, oldCombinedCheckState, newCombinedCheckState);
return check;
}
+ private void maybeIndexChange(
+ CombinedCheckState oldState,
+ CombinedCheckState newState,
+ Project.NameKey project,
+ Change.Id changeId) {
+ if (oldState != newState) {
+ try {
+ changes.id(project.get(), changeId.get()).index();
+ } catch (RestApiException e) {
+ logger.atSevere().withCause(e).log("Cannot index change: %s after check update.", changeId);
+ }
+ }
+ }
+
private void maybeSendEmail(
@Nullable NotifyHandling notifyHandling,
@Nullable Map<RecipientType, NotifyInfo> notifyDetails,