Don't add reviewers to merged changes If a change goes directly from WIP to MERGED due to the push of a WIP change (e.g.) 1. Upload a change with %wip. 2. Push the commit, thus closing the change automatically. Reviewers are added and put in Attention-Set, because the change goes public as soon as it is merged. Now they have notifications to act on a change that is merged. To avoid this, simply don't automatically add reviewers to merged changes. Change-Id: I8eb03a0507624a4e09f837e59eb764e8e6548c69
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/Reviewers.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/Reviewers.java index 188cb77..bdbee0e 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/Reviewers.java +++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/Reviewers.java
@@ -14,6 +14,8 @@ package com.googlesource.gerrit.plugins.reviewers; +import static com.google.gerrit.extensions.client.ChangeStatus.MERGED; + import com.google.common.flogger.FluentLogger; import com.google.gerrit.entities.Change; import com.google.gerrit.entities.Project; @@ -96,6 +98,9 @@ if (config.ignoreWip() && Boolean.TRUE.equals(c.workInProgress)) { return; } + if (c.status.equals(MERGED)) { + return; + } Project.NameKey projectName = Project.nameKey(c.project); List<ReviewerFilter> filters = getFilters(projectName);
diff --git a/src/test/java/com/googlesource/gerrit/plugins/reviewers/ReviewersIT.java b/src/test/java/com/googlesource/gerrit/plugins/reviewers/ReviewersIT.java index bedd4de..6e4df58 100644 --- a/src/test/java/com/googlesource/gerrit/plugins/reviewers/ReviewersIT.java +++ b/src/test/java/com/googlesource/gerrit/plugins/reviewers/ReviewersIT.java
@@ -104,7 +104,7 @@ } @Test - public void privateBitFlippedAndReviewersAddedOnSubmit() throws Exception { + public void reviewersNotAddedOnSubmitOfPrivateChange() throws Exception { createFilters(filter("*").reviewer(user)); PushOneCommit.Result r = createChange("refs/for/master%private"); assertThat(r.getChange().change().isPrivate()).isTrue(); @@ -113,14 +113,29 @@ // This adds admin as reviewer gApi.changes().id(changeId).current().review(ReviewInput.approve()); gApi.changes().id(changeId).current().submit(); - assertThat(reviewersFor(changeId)) - .containsExactlyElementsIn(ImmutableSet.of(admin.id(), user.id())); + assertThat(reviewersFor(changeId)).containsExactlyElementsIn(ImmutableSet.of(admin.id())); ChangeInfo info = gApi.changes().id(changeId).get(); assertThat(info.status).isEqualTo(ChangeStatus.MERGED); assertThat(info.isPrivate).isNull(); } @Test + public void reviewersNotAddedOnPushOfWIPChange() throws Exception { + createFilters(filter("*").reviewer(user)); + PushOneCommit.Result r = createChange("refs/for/master%wip"); + assertThat(r.getChange().change().isWorkInProgress()).isTrue(); + String changeId = r.getChangeId(); + assertNoReviewersAddedFor(changeId); + // This adds admin as reviewer + gApi.changes().id(changeId).current().review(ReviewInput.approve()); + pushToHeads("refs/heads/master", changeId); + assertThat(reviewersFor(changeId)).containsExactlyElementsIn(ImmutableSet.of(admin.id())); + ChangeInfo info = gApi.changes().id(changeId).get(); + assertThat(info.status).isEqualTo(ChangeStatus.MERGED); + assertThat(info.workInProgress).isNull(); + } + + @Test public void reviewerAddedOnPrivateBitFlip() throws Exception { createFilters(filter("*").reviewer(user)); PushOneCommit.Result r = createChange("refs/for/master%private"); @@ -203,4 +218,9 @@ assertThat(gApi.changes().id(changeId).get().reviewers.get(REVIEWER)).isNull(); assertThat(gApi.changes().id(changeId).get().reviewers.get(CC)).isNull(); } + + private PushOneCommit.Result pushToHeads(String ref, String changeId) throws Exception { + PushOneCommit push = pushFactory.create(admin.newIdent(), testRepo, changeId); + return push.to(ref); + } }