Use project specific settings
Change-Id: I415058b3b9b6cfd040248fa287feb0d2715c2b9e
Signed-off-by: Jan Srnicek <jsrnicek@cisco.com>
diff --git a/src/main/java/io/fd/maintainer/plugin/events/OnCommittersToBeAddedListener.java b/src/main/java/io/fd/maintainer/plugin/events/OnCommittersToBeAddedListener.java
index a0df89f..a310b50 100644
--- a/src/main/java/io/fd/maintainer/plugin/events/OnCommittersToBeAddedListener.java
+++ b/src/main/java/io/fd/maintainer/plugin/events/OnCommittersToBeAddedListener.java
@@ -18,6 +18,7 @@
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.PatchSet;
+import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.change.ChangesCollection;
import com.google.gerrit.server.change.PostReview;
@@ -95,8 +96,9 @@
final PatchSetCreatedEvent patchSetCreatedEvent = PatchSetCreatedEvent.class.cast(event);
final ChangeAttribute changeAttributes = patchSetCreatedEvent.change.get();
+ final Project.NameKey projectKey = new Project.NameKey(changeAttributes.project);
final PluginBranchSpecificSettings settings =
- settingsProvider.getBranchSpecificSettings(changeAttributes.branch);
+ settingsProvider.getBranchSpecificSettings(changeAttributes.branch, projectKey);
if (!settings.isAutoAddReviewers()) {
LOG.warn("Auto add reviewers option turned off");
@@ -104,7 +106,7 @@
}
try (final ReviewDb reviewDb = schemaFactory.open()) {
- final Change.Id changeId = new Change.Id(changeAttributes.number);
+ final Change.Id changeId = new Change.Id(Integer.valueOf(changeAttributes.number));
final Change change = reviewDb.changes().get(changeId);
final PatchSet mostCurrentPatchSet = reviewDb.patchSets().get(change.currentPatchSetId());
@@ -112,7 +114,8 @@
LOG.info("Processing change {} | patchset {}", change.getId(), mostCurrentPatchSet.getId());
final MaintainersIndex index =
new MaintainersIndex(
- maintainersProvider.getMaintainersInfo(changeAttributes.branch, changeAttributes.number));
+ maintainersProvider.getMaintainersInfo(changeAttributes.branch,
+ Integer.valueOf(changeAttributes.number), projectKey));
reviewerPusher.addRelevantReviewers(index, change, mostCurrentPatchSet, settings.getPluginUserName());
LOG.info("Reviewers for change {} successfully added", change.getId());
diff --git a/src/main/java/io/fd/maintainer/plugin/events/OnPatchsetVerifiedListener.java b/src/main/java/io/fd/maintainer/plugin/events/OnPatchsetVerifiedListener.java
index 194d626..9063859 100644
--- a/src/main/java/io/fd/maintainer/plugin/events/OnPatchsetVerifiedListener.java
+++ b/src/main/java/io/fd/maintainer/plugin/events/OnPatchsetVerifiedListener.java
@@ -24,6 +24,7 @@
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.PatchSet;
import com.google.gerrit.reviewdb.client.PatchSetApproval;
+import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.change.ChangesCollection;
import com.google.gerrit.server.data.AccountAttribute;
@@ -83,8 +84,9 @@
protected void consumeDescribedEvent(final Event event) {
CommentAddedEvent commentAddedEvent = CommentAddedEvent.class.cast(event);
+ final Project.NameKey projectKey = new Project.NameKey(commentAddedEvent.change.get().project);
final PluginBranchSpecificSettings settings =
- settingsProvider.getBranchSpecificSettings(commentAddedEvent.change.get().branch);
+ settingsProvider.getBranchSpecificSettings(commentAddedEvent.change.get().branch, projectKey);
if (!settings.isAllowMaintainersSubmit()) {
LOG.warn("Maintainers submit is turned off");
@@ -125,7 +127,7 @@
final MaintainersIndex maintainersIndex =
new MaintainersIndex(maintainersProvider
.getMaintainersInfo(commentAddedEvent.getBranchNameKey().get(),
- changeNumber));
+ changeNumber, projectKey));
LOG.info("Getting current patch list for patchset {}", currentPatchset.getId());
final PatchList patchList = getPatchList(patchListCache, change, currentPatchset);
@@ -156,8 +158,7 @@
} else if (patchsetReviewInfo.getReviewState() == COMMITTER_ATTENTION_NEEDED) {
LOG.info("Patchset {} affects no configured components, committers attention needed",
currentPatchset.getId());
- }
- else {
+ } else {
LOG.info(
"Patchset {} does not have verifications from following components yet : {}",
currentPatchset.getId(), patchsetReviewInfo.getMissingComponentReview());
diff --git a/src/main/java/io/fd/maintainer/plugin/service/MaintainersProvider.java b/src/main/java/io/fd/maintainer/plugin/service/MaintainersProvider.java
index b2d940a..4e8acb1 100644
--- a/src/main/java/io/fd/maintainer/plugin/service/MaintainersProvider.java
+++ b/src/main/java/io/fd/maintainer/plugin/service/MaintainersProvider.java
@@ -20,6 +20,7 @@
import static java.util.Objects.nonNull;
import com.google.gerrit.reviewdb.client.Change;
+import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.reviewdb.server.ReviewDb;
import com.google.gerrit.server.git.GitRepositoryManager;
import com.google.gwtorm.server.OrmException;
@@ -65,10 +66,12 @@
}
@Nonnull
- public List<ComponentInfo> getMaintainersInfo(@Nonnull final String branchName, final int changeNumber) {
+ public List<ComponentInfo> getMaintainersInfo(@Nonnull final String branchName, final int changeNumber,
+ @Nonnull final Project.NameKey projectKey) {
// get configuration for branch of change
- final PluginBranchSpecificSettings settings = settingsProvider.getBranchSpecificSettings(branchName);
+ final PluginBranchSpecificSettings settings =
+ settingsProvider.getBranchSpecificSettings(branchName, projectKey);
try (final ReviewDb reviewDb = schemaFactory.open()) {
final Change change = reviewDb.changes().get(new Change.Id(changeNumber));
diff --git a/src/main/java/io/fd/maintainer/plugin/service/SettingsProvider.java b/src/main/java/io/fd/maintainer/plugin/service/SettingsProvider.java
index 9c3f6fd..8dc9ca0 100644
--- a/src/main/java/io/fd/maintainer/plugin/service/SettingsProvider.java
+++ b/src/main/java/io/fd/maintainer/plugin/service/SettingsProvider.java
@@ -18,8 +18,10 @@
import static java.lang.String.format;
+import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.reviewdb.client.RefNames;
import com.google.gerrit.server.config.PluginConfigFactory;
+import com.google.gerrit.server.project.NoSuchProjectException;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import io.fd.maintainer.plugin.service.dto.PluginBranchSpecificSettings;
@@ -62,26 +64,28 @@
@Inject
private PluginConfigFactory cfg;
- public PluginBranchSpecificSettings getBranchSpecificSettings(@Nonnull final String branchName) {
+ public PluginBranchSpecificSettings getBranchSpecificSettings(@Nonnull final String branchName,
+ @Nonnull final Project.NameKey projectKey) {
final String fullBranchName = branchName.startsWith(RefNames.REFS_HEADS)
? branchName
: RefNames.REFS_HEADS.concat(branchName);
LOG.info("Reading configuration for branch {}", fullBranchName);
- return getSettingsForBranch(fullBranchName, closesBranchMatch(fullBranchName));
+ return getSettingsForBranch(fullBranchName, closesBranchMatch(fullBranchName, projectKey), projectKey);
}
- private PluginBranchSpecificSettings getSettingsForBranch(final String branchName, final String closestBranch) {
+ private PluginBranchSpecificSettings getSettingsForBranch(final String branchName, final String closestBranch,
+ final Project.NameKey projectKey) {
return new PluginBranchSpecificSettings.PluginSettingsBuilder()
- .setPluginUserName(pluginUserOrThrow(branchName, closestBranch))
- .setLocalFilePath(fileNameRefOrDefault(branchName, closestBranch))
- .setFileRef(filePathRefOrDefault(branchName, closestBranch))
- .setAllowMaintainersSubmit(allowMaintainersSubmitOrDefault(branchName, closestBranch))
- .setAutoAddReviewers(autoAddReviewersOrDefault(branchName, closestBranch))
- .setAutoSubmit(autoSubmitOrDefault(branchName, closestBranch))
- .setDislikeWarnings(dislikeWarningsOrDefault(branchName, closestBranch))
- .setBranch(globalPluginConfig().getSubsections(BRANCH_SECTION)
+ .setPluginUserName(pluginUserOrThrow(branchName, closestBranch, projectKey))
+ .setLocalFilePath(fileNameRefOrDefault(branchName, closestBranch, projectKey))
+ .setFileRef(filePathRefOrDefault(branchName, closestBranch, projectKey))
+ .setAllowMaintainersSubmit(allowMaintainersSubmitOrDefault(branchName, closestBranch, projectKey))
+ .setAutoAddReviewers(autoAddReviewersOrDefault(branchName, closestBranch, projectKey))
+ .setAutoSubmit(autoSubmitOrDefault(branchName, closestBranch, projectKey))
+ .setDislikeWarnings(dislikeWarningsOrDefault(branchName, closestBranch, projectKey))
+ .setBranch(projectSpecificPluginConfig(projectKey).getSubsections(BRANCH_SECTION)
.stream()
.filter(subSection -> subSection.equals(branchName))
.findAny()
@@ -89,34 +93,43 @@
.createPluginSettings();
}
- private Boolean autoAddReviewersOrDefault(final String branch, final String closesBranch) {
- return getKey(branch, closesBranch, AUTO_ADD_REVIEWERS, DEFAULT_AUTO_ADD_REVIEWERS, Boolean::valueOf);
+ private Boolean autoAddReviewersOrDefault(final String branch, final String closesBranch,
+ final Project.NameKey projectKey) {
+ return getKey(projectKey, branch, closesBranch, AUTO_ADD_REVIEWERS, DEFAULT_AUTO_ADD_REVIEWERS,
+ Boolean::valueOf);
}
- private Boolean autoSubmitOrDefault(final String branch, final String closestBranch) {
- return getKey(branch, closestBranch, AUTO_SUBMIT, DEFAULT_AUTO_SUBMIT, Boolean::valueOf);
+ private Boolean autoSubmitOrDefault(final String branch, final String closestBranch,
+ final Project.NameKey projectKey) {
+ return getKey(projectKey, branch, closestBranch, AUTO_SUBMIT, DEFAULT_AUTO_SUBMIT, Boolean::valueOf);
}
- private Boolean allowMaintainersSubmitOrDefault(final String branch, final String closesBranch) {
- return getKey(branch, closesBranch, ALLOW_SUBMIT, DEFAULT_ALLOW_SUBMIT, Boolean::valueOf);
+ private Boolean allowMaintainersSubmitOrDefault(final String branch, final String closesBranch,
+ final Project.NameKey projectKey) {
+ return getKey(projectKey, branch, closesBranch, ALLOW_SUBMIT, DEFAULT_ALLOW_SUBMIT, Boolean::valueOf);
}
- private Boolean dislikeWarningsOrDefault(final String branch, final String closesBranch){
- return getKey(branch, closesBranch, DISLIKE_WARNINGS, DEFAULT_DISLIKE_WARNINGS, Boolean::valueOf);
+ private Boolean dislikeWarningsOrDefault(final String branch, final String closesBranch,
+ final Project.NameKey projectKey) {
+ return getKey(projectKey, branch, closesBranch, DISLIKE_WARNINGS, DEFAULT_DISLIKE_WARNINGS, Boolean::valueOf);
}
- private String fileNameRefOrDefault(final String branch, final String closesBranch) {
- return getKey(branch, closesBranch, MAINTAINERS_FILE_REF, DEFAULT_MAINTAINERS_FILE_REF, String::valueOf);
+ private String fileNameRefOrDefault(final String branch, final String closesBranch,
+ final Project.NameKey projectKey) {
+ return getKey(projectKey, branch, closesBranch, MAINTAINERS_FILE_REF, DEFAULT_MAINTAINERS_FILE_REF,
+ String::valueOf);
}
- private String filePathRefOrDefault(final String branch, final String closesBranch) {
- return getKey(branch, closesBranch, MAINTAINERS_FILE_PATH_REF, DEFAULT_MAINTAINERS_FILE_PATH_REF,
+ private String filePathRefOrDefault(final String branch, final String closesBranch,
+ final Project.NameKey projectKey) {
+ return getKey(projectKey, branch, closesBranch, MAINTAINERS_FILE_PATH_REF, DEFAULT_MAINTAINERS_FILE_PATH_REF,
String::valueOf);
}
private String pluginUserOrThrow(final String branch,
- final String alternativeBranch) {
- final Config config = globalPluginConfig();
+ final String alternativeBranch,
+ final Project.NameKey projectKey) {
+ final Config config = projectSpecificPluginConfig(projectKey);
return Optional.ofNullable(config.getString(BRANCH_SECTION, branch, PLUGIN_USER))
.orElse(Optional.ofNullable(config.getString(BRANCH_SECTION, alternativeBranch, PLUGIN_USER))
.orElseThrow(() -> {
@@ -125,27 +138,32 @@
}));
}
- private <T> T getKey(final String branch,
+ private <T> T getKey(final Project.NameKey projectKey,
+ final String branch,
final String alternativeBranch,
final String subKey,
final T defaultValue,
final Function<String, T> mapTo) {
- return Optional.ofNullable(globalPluginConfig()
+ return Optional.ofNullable(projectSpecificPluginConfig(projectKey)
.getString(BRANCH_SECTION, branch, subKey))
.map(mapTo)
.orElse(Optional.ofNullable(
- globalPluginConfig().getString(BRANCH_SECTION, alternativeBranch, subKey))
+ projectSpecificPluginConfig(projectKey).getString(BRANCH_SECTION, alternativeBranch, subKey))
.map(mapTo)
.orElse(defaultValue));
}
- private Config globalPluginConfig() {
- return cfg.getGlobalPluginConfig(MAINTAINER_PLUGIN);
+ private Config projectSpecificPluginConfig(final Project.NameKey projectKey) {
+ try {
+ return cfg.getProjectPluginConfig(projectKey, MAINTAINER_PLUGIN);
+ } catch (NoSuchProjectException e) {
+ throw new IllegalStateException(format("Project %s not found", projectKey));
+ }
}
// match by the number of changes needed to change one String into another
- private String closesBranchMatch(final String branchName) {
- return globalPluginConfig().getSubsections(BRANCH_SECTION).stream()
+ private String closesBranchMatch(final String branchName, final Project.NameKey projectKey) {
+ return projectSpecificPluginConfig(projectKey).getSubsections(BRANCH_SECTION).stream()
.reduce((branchOne, branchTwo) -> closestMatch(branchName, branchOne, branchTwo))
// if non use default
.orElse(RefNames.REFS_HEADS);