Merge branch 'stable-2.16' * stable-2.16: Format Java files with google-java-format ChangeUpdatedListener: Extract PluginConfig to a local variable Remove unneeded finals Support adding reviewers in batch mode Change-Id: I0699a0b5e3a0b44d28de9b45e8a263587a9cbb81
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ChangeUpdatedListener.java b/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ChangeUpdatedListener.java index 37cb344..037ceb1 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ChangeUpdatedListener.java +++ b/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ChangeUpdatedListener.java
@@ -20,6 +20,7 @@ import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.IdentifiedUser; +import com.google.gerrit.server.config.PluginConfig; import com.google.gerrit.server.config.PluginConfigFactory; import com.google.gerrit.server.events.Event; import com.google.gerrit.server.events.EventListener; @@ -54,14 +55,14 @@ @Inject ChangeUpdatedListener( - final ReviewersByBlame.Factory reviewersByBlameFactory, - final GitRepositoryManager repoManager, - final WorkQueue workQueue, - final IdentifiedUser.GenericFactory identifiedUserFactory, - final ThreadLocalRequestContext tl, - final PluginConfigFactory cfg, - final ChangeData.Factory changeDataFactory, - final @PluginName String pluginName) { + ReviewersByBlame.Factory reviewersByBlameFactory, + GitRepositoryManager repoManager, + WorkQueue workQueue, + IdentifiedUser.GenericFactory identifiedUserFactory, + ThreadLocalRequestContext tl, + PluginConfigFactory cfg, + ChangeData.Factory changeDataFactory, + @PluginName String pluginName) { this.reviewersByBlameFactory = reviewersByBlameFactory; this.repoManager = repoManager; this.workQueue = workQueue; @@ -84,15 +85,10 @@ String ignoreSubjectRegEx; String ignoreFileRegEx; try { - maxReviewers = - cfg.getFromProjectConfigWithInheritance(projectName, pluginName) - .getInt("maxReviewers", 3); - ignoreSubjectRegEx = - cfg.getFromProjectConfigWithInheritance(projectName, pluginName) - .getString("ignoreSubjectRegEx", ""); - ignoreFileRegEx = - cfg.getFromProjectConfigWithInheritance(projectName, pluginName) - .getString("ignoreFileRegEx", ""); + PluginConfig projectConfig = cfg.getFromProjectConfigWithInheritance(projectName, pluginName); + maxReviewers = projectConfig.getInt("maxReviewers", 3); + ignoreSubjectRegEx = projectConfig.getString("ignoreSubjectRegEx", ""); + ignoreFileRegEx = projectConfig.getString("ignoreFileRegEx", ""); } catch (NoSuchProjectException x) { log.error(x.getMessage(), x); return; @@ -104,7 +100,7 @@ try (Repository git = repoManager.openRepository(projectName); RevWalk rw = new RevWalk(git)) { Change.Id changeId = Change.id(e.change.get().number); - final ChangeData cd = changeDataFactory.create(projectName, changeId); + ChangeData cd = changeDataFactory.create(projectName, changeId); if (cd == null) { log.warn( "Change with id: '{}' on project key: '{}' not found.", @@ -112,7 +108,7 @@ projectName.toString()); return; } - final Change change = cd.change(); + Change change = cd.change(); PatchSet.Id psId = PatchSet.id(changeId, e.patchSet.get().number); PatchSet ps = cd.patchSet(psId); if (ps == null) { @@ -120,13 +116,13 @@ return; } - final RevCommit commit = rw.parseCommit(ObjectId.fromString(e.patchSet.get().revision)); + RevCommit commit = rw.parseCommit(ObjectId.fromString(e.patchSet.get().revision)); if (!ignoreSubjectRegEx.isEmpty() && commit.getShortMessage().matches(ignoreSubjectRegEx)) { return; } - final Runnable task = + Runnable task = reviewersByBlameFactory.create(commit, change, ps, maxReviewers, git, ignoreFileRegEx); workQueue
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ReviewersByBlame.java b/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ReviewersByBlame.java index 2bf2061..89b8450 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ReviewersByBlame.java +++ b/src/main/java/com/googlesource/gerrit/plugins/reviewersbyblame/ReviewersByBlame.java
@@ -17,7 +17,9 @@ import com.google.common.collect.Maps; import com.google.common.collect.Ordering; import com.google.common.collect.Sets; +import com.google.gerrit.extensions.api.GerritApi; import com.google.gerrit.extensions.api.changes.AddReviewerInput; +import com.google.gerrit.extensions.api.changes.ReviewInput; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.Patch.ChangeType; @@ -25,17 +27,14 @@ import com.google.gerrit.server.account.AccountCache; import com.google.gerrit.server.account.AccountState; import com.google.gerrit.server.account.Emails; -import com.google.gerrit.server.change.ChangeResource; import com.google.gerrit.server.patch.PatchList; import com.google.gerrit.server.patch.PatchListCache; import com.google.gerrit.server.patch.PatchListEntry; import com.google.gerrit.server.patch.PatchListNotAvailableException; -import com.google.gerrit.server.restapi.change.ChangesCollection; -import com.google.gerrit.server.restapi.change.PostReviewers; import com.google.inject.Inject; -import com.google.inject.Provider; import com.google.inject.assistedinject.Assisted; import java.io.IOException; +import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Map; @@ -65,8 +64,7 @@ private final Emails emails; private final AccountCache accountCache; private final PatchListCache patchListCache; - private final Provider<PostReviewers> reviewersProvider; - private final ChangesCollection changes; + private final GerritApi gApi; public interface Factory { ReviewersByBlame create( @@ -80,22 +78,20 @@ @Inject public ReviewersByBlame( - final Emails emails, - final AccountCache accountCache, - final ChangesCollection changes, - final Provider<PostReviewers> reviewersProvider, - final PatchListCache patchListCache, - @Assisted final RevCommit commit, - @Assisted final Change change, - @Assisted final PatchSet ps, - @Assisted final int maxReviewers, - @Assisted final Repository repo, - @Assisted final String ignoreFileRegEx) { + Emails emails, + AccountCache accountCache, + PatchListCache patchListCache, + GerritApi gApi, + @Assisted RevCommit commit, + @Assisted Change change, + @Assisted PatchSet ps, + @Assisted int maxReviewers, + @Assisted Repository repo, + @Assisted String ignoreFileRegEx) { this.emails = emails; this.accountCache = accountCache; - this.changes = changes; - this.reviewersProvider = reviewersProvider; this.patchListCache = patchListCache; + this.gApi = gApi; this.commit = commit; this.change = change; this.ps = ps; @@ -140,13 +136,14 @@ */ private void addReviewers(Set<Account.Id> topReviewers, Change change) { try { - ChangeResource changeResource = changes.parse(change.getId()); - PostReviewers post = reviewersProvider.get(); - for (Account.Id accountId : topReviewers) { - AddReviewerInput input = new AddReviewerInput(); - input.reviewer = accountId.toString(); - post.apply(changeResource, input); + ReviewInput in = new ReviewInput(); + in.reviewers = new ArrayList<>(topReviewers.size()); + for (Account.Id account : topReviewers) { + AddReviewerInput addReviewerInput = new AddReviewerInput(); + addReviewerInput.reviewer = account.toString(); + in.reviewers.add(addReviewerInput); } + gApi.changes().id(change.getChangeId()).current().review(in); } catch (Exception ex) { log.error("Couldn't add reviewers to the change", ex); } @@ -160,7 +157,7 @@ * @param reviewers A set of reviewers with their weight mapped to their {@link Account} * @return Reviewers that are best matches for this change, empty if none, never <code>null</code> */ - private Set<Account.Id> findTopReviewers(final Map<Account, Integer> reviewers) { + private Set<Account.Id> findTopReviewers(Map<Account, Integer> reviewers) { Set<Account.Id> topReviewers = Sets.newHashSet(); List<Entry<Account, Integer>> entries = Ordering.from( @@ -185,8 +182,7 @@ * @param blameResult Result of blame computation * @return a set of all possible reviewers, empty if none, never <code>null</code> */ - private Map<Account, Integer> getReviewersForPatch( - final List<Edit> edits, final BlameResult blameResult) { + private Map<Account, Integer> getReviewersForPatch(List<Edit> edits, BlameResult blameResult) { Map<Account, Integer> reviewers = Maps.newHashMap(); for (Edit edit : edits) { for (int i = edit.getBeginA(); i < edit.getEndA(); i++) { @@ -220,7 +216,7 @@ * @param parent Parent {@link RevCommit} * @return Result of blame computation, null if the computation fails */ - private BlameResult computeBlame(final PatchListEntry entry, final RevCommit parent) { + private BlameResult computeBlame(PatchListEntry entry, RevCommit parent) { BlameCommand blameCommand = new BlameCommand(repo); blameCommand.setStartCommit(parent); blameCommand.setFilePath(entry.getNewName());