Add support for ignoring WIP and Private changes
Change-Id: I5b909346c65dbbeb68eed899e244cf8e8ede4f17
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/BackendModule.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/BackendModule.java
index c233d2b..fc98943 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/BackendModule.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/BackendModule.java
@@ -20,7 +20,9 @@
import com.google.gerrit.extensions.annotations.Exports;
import com.google.gerrit.extensions.config.CapabilityDefinition;
import com.google.gerrit.extensions.config.FactoryModule;
+import com.google.gerrit.extensions.events.PrivateStateChangedListener;
import com.google.gerrit.extensions.events.RevisionCreatedListener;
+import com.google.gerrit.extensions.events.WorkInProgressStateChangedListener;
import com.google.gerrit.extensions.registration.DynamicSet;
import com.google.gerrit.extensions.restapi.RestApiModule;
import com.google.gerrit.server.change.ReviewerSuggestion;
@@ -59,6 +61,8 @@
});
} else {
DynamicSet.bind(binder(), RevisionCreatedListener.class).to(Reviewers.class);
+ DynamicSet.bind(binder(), WorkInProgressStateChangedListener.class).to(Reviewers.class);
+ DynamicSet.bind(binder(), PrivateStateChangedListener.class).to(Reviewers.class);
}
factory(AddReviewersByConfiguration.Factory.class);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/Reviewers.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/Reviewers.java
index 430a588..faa5088 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/Reviewers.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/Reviewers.java
@@ -23,8 +23,10 @@
import com.google.gerrit.common.Nullable;
import com.google.gerrit.extensions.common.AccountInfo;
import com.google.gerrit.extensions.common.ChangeInfo;
+import com.google.gerrit.extensions.events.ChangeEvent;
+import com.google.gerrit.extensions.events.PrivateStateChangedListener;
import com.google.gerrit.extensions.events.RevisionCreatedListener;
-import com.google.gerrit.extensions.events.RevisionEvent;
+import com.google.gerrit.extensions.events.WorkInProgressStateChangedListener;
import com.google.gerrit.index.query.QueryParseException;
import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.client.Change;
@@ -45,7 +47,11 @@
import org.slf4j.LoggerFactory;
@Singleton
-class Reviewers implements RevisionCreatedListener, ReviewerSuggestion {
+class Reviewers
+ implements RevisionCreatedListener,
+ PrivateStateChangedListener,
+ WorkInProgressStateChangedListener,
+ ReviewerSuggestion {
private static final Logger log = LoggerFactory.getLogger(Reviewers.class);
private final ReviewersResolver resolver;
@@ -80,6 +86,16 @@
}
@Override
+ public void onWorkInProgressStateChanged(WorkInProgressStateChangedListener.Event event) {
+ onEvent(event);
+ }
+
+ @Override
+ public void onPrivateStateChanged(PrivateStateChangedListener.Event event) {
+ onEvent(event);
+ }
+
+ @Override
public Set<SuggestedReviewer> suggestReviewers(
Project.NameKey projectName,
@Nullable Change.Id changeId,
@@ -118,8 +134,14 @@
return config.forProject(projectName).getReviewerFilterSections();
}
- private void onEvent(RevisionEvent event) {
+ private void onEvent(ChangeEvent event) {
ChangeInfo c = event.getChange();
+ if (config.ignoreWip() && (c.workInProgress != null && c.workInProgress)) {
+ return;
+ }
+ if (config.ignorePrivate() && (c.isPrivate != null && c.isPrivate)) {
+ return;
+ }
Project.NameKey projectName = new Project.NameKey(c.project);
List<ReviewerFilterSection> sections = getSections(projectName);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/ReviewersConfig.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/ReviewersConfig.java
index 8b33070..b3e2ed2 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/ReviewersConfig.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/server/ReviewersConfig.java
@@ -44,12 +44,16 @@
static final String KEY_REVIEWER = "reviewer";
private static final String KEY_ENABLE_REST = "enableREST";
private static final String KEY_SUGGEST_ONLY = "suggestOnly";
+ private static final String KEY_IGNORE_WIP = "ignoreWip";
+ private static final String KEY_IGNORE_PRIVATE = "ignorePrivate";
private final PluginConfigFactory cfgFactory;
private final String pluginName;
private final boolean enableREST;
private final boolean suggestOnly;
+ private final boolean ignoreWip;
+ private final boolean ignorePrivate;
@Inject
ReviewersConfig(PluginConfigFactory cfgFactory, @PluginName String pluginName) {
@@ -58,6 +62,8 @@
Config cfg = cfgFactory.getGlobalPluginConfig(pluginName);
this.enableREST = cfg.getBoolean(pluginName, null, KEY_ENABLE_REST, true);
this.suggestOnly = cfg.getBoolean(pluginName, null, KEY_SUGGEST_ONLY, false);
+ this.ignoreWip = cfg.getBoolean(pluginName, null, KEY_IGNORE_WIP, true);
+ this.ignorePrivate = cfg.getBoolean(pluginName, null, KEY_IGNORE_PRIVATE, true);
}
public ForProject forProject(Project.NameKey projectName) {
@@ -79,6 +85,14 @@
return suggestOnly;
}
+ public boolean ignoreWip() {
+ return ignoreWip;
+ }
+
+ public boolean ignorePrivate() {
+ return ignorePrivate;
+ }
+
static class ForProject extends VersionedMetaData {
private Config cfg;
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index 2c3627a..9180b16 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -8,6 +8,8 @@
[reviewers]
enableREST = true
suggestOnly = false
+ ignoreWip = false
+ ignorePrivate = false
```
reviewers.enableREST
@@ -21,6 +23,16 @@
the suggestions with a weight of 1. To force the suggestions higher in the
list, set a higher value (like 1000) in `addReviewer.@PLUGIN@-reviewer-suggestion.weight`
in `gerrit.config`.
+
+reviewers.ingoreWip
+: Ignore changes in WIP state. When set to true changes in WIP state are not
+ considered when adding reviewers. Defaults to true. To enable adding
+ reviewers on changes in WIP state set this value to false.
+
+revewers.ignorePrivate
+: Ignore changes in private state. When set to true changes in private state
+ are not considered when adding reviewers. Defaults to true. To enable
+ adding reviewers on changes in Private state set this value to false.
Per project configuration of the @PLUGIN@ plugin is done in the
`reviewers.config` file of the project. Missing values are inherited
from the parent projects. This means a global default configuration can