Merge branch 'stable-2.14' into stable-2.15
* stable-2.14:
Update to latest bazlets on stable-2.14 branch
Ignore inactive reviewers in groups
Use latest bazlets
Change-Id: I609c1057898f4ecd88b175ad0c4e14b1ee417d68
diff --git a/WORKSPACE b/WORKSPACE
index cd9ae96..90f8239 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -3,7 +3,7 @@
load("//:bazlets.bzl", "load_bazlets")
load_bazlets(
- commit = "fb374c7a27fd94b94e5109906c09bc459355cff2",
+ commit = "28d12c28df242b21855d4bebf8cca12b9ffcb900",
# local_path = "/home/<user>/projects/bazlets",
)
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/ChangeEventListener.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/ChangeEventListener.java
index f83f025..47916a0 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/ChangeEventListener.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/ChangeEventListener.java
@@ -21,12 +21,12 @@
import com.google.common.collect.Sets;
import com.google.gerrit.common.errors.NoSuchGroupException;
import com.google.gerrit.extensions.annotations.PluginName;
-import com.google.gerrit.extensions.client.ChangeStatus;
import com.google.gerrit.extensions.common.AccountInfo;
import com.google.gerrit.extensions.common.ChangeInfo;
-import com.google.gerrit.extensions.events.DraftPublishedListener;
import com.google.gerrit.extensions.events.RevisionCreatedListener;
import com.google.gerrit.extensions.restapi.UnprocessableEntityException;
+import com.google.gerrit.index.query.Predicate;
+import com.google.gerrit.index.query.QueryParseException;
import com.google.gerrit.reviewdb.client.Account;
import com.google.gerrit.reviewdb.client.Change;
import com.google.gerrit.reviewdb.client.Project;
@@ -40,8 +40,6 @@
import com.google.gerrit.server.git.WorkQueue;
import com.google.gerrit.server.group.GroupsCollection;
import com.google.gerrit.server.project.NoSuchProjectException;
-import com.google.gerrit.server.query.Predicate;
-import com.google.gerrit.server.query.QueryParseException;
import com.google.gerrit.server.query.change.ChangeData;
import com.google.gerrit.server.query.change.ChangeQueryBuilder;
import com.google.gerrit.server.util.RequestContext;
@@ -55,13 +53,14 @@
import java.io.IOException;
import java.util.List;
import java.util.Set;
+import org.eclipse.jgit.errors.ConfigInvalidException;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevWalk;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Singleton
-class ChangeEventListener implements RevisionCreatedListener, DraftPublishedListener {
+class ChangeEventListener implements RevisionCreatedListener {
private static final Logger log = LoggerFactory.getLogger(ChangeEventListener.class);
private final AccountResolver accountResolver;
@@ -77,7 +76,6 @@
private final ReviewersConfig.Factory configFactory;
private final Provider<CurrentUser> user;
private final ChangeQueryBuilder queryBuilder;
- private final boolean ignoreDrafts;
@Inject
ChangeEventListener(
@@ -109,25 +107,11 @@
this.configFactory = configFactory;
this.user = user;
this.queryBuilder = queryBuilder;
- this.ignoreDrafts =
- cfgFactory
- .getGlobalPluginConfig(pluginName)
- .getBoolean(pluginName, null, "ignoreDrafts", false);
}
@Override
public void onRevisionCreated(RevisionCreatedListener.Event event) {
ChangeInfo c = event.getChange();
- if (ignoreDrafts && c.status == ChangeStatus.DRAFT) {
- log.debug("Ignoring draft change");
- return;
- }
- onEvent(new Project.NameKey(c.project), c._number, event.getWho());
- }
-
- @Override
- public void onDraftPublished(DraftPublishedListener.Event event) {
- ChangeInfo c = event.getChange();
onEvent(new Project.NameKey(c.project), c._number, event.getWho());
}
@@ -152,7 +136,7 @@
final Change change = changeData.change();
final Runnable task =
- reviewersFactory.create(change, toAccounts(reviewDb, reviewers, projectName, uploader));
+ reviewersFactory.create(change, toAccounts(reviewers, projectName, uploader));
workQueue
.getDefaultQueue()
@@ -239,18 +223,17 @@
return filterPredicate.asMatchable().match(changeData);
}
- private Set<Account> toAccounts(
- ReviewDb reviewDb, Set<String> in, Project.NameKey p, AccountInfo uploader) {
+ private Set<Account> toAccounts(Set<String> in, Project.NameKey p, AccountInfo uploader) {
Set<Account> reviewers = Sets.newHashSetWithExpectedSize(in.size());
GroupMembers groupMembers = null;
for (String r : in) {
try {
- Account account = accountResolver.find(reviewDb, r);
+ Account account = accountResolver.find(r);
if (account != null) {
reviewers.add(account);
continue;
}
- } catch (OrmException e) {
+ } catch (OrmException | IOException | ConfigInvalidException e) {
// If the account doesn't exist, find() will return null. We only
// get here if something went wrong accessing the database
log.error("Failed to resolve account " + r, e);
@@ -261,12 +244,12 @@
// "Full name <email>" to increase chance of finding only one.
String uploaderNameEmail = String.format("%s <%s>", uploader.name, uploader.email);
try {
- Account uploaderAccount = accountResolver.findByNameOrEmail(reviewDb, uploaderNameEmail);
+ Account uploaderAccount = accountResolver.findByNameOrEmail(uploaderNameEmail);
if (uploaderAccount != null) {
groupMembers =
groupMembersFactory.create(identifiedUserFactory.create(uploaderAccount.getId()));
}
- } catch (OrmException e) {
+ } catch (OrmException | IOException e) {
log.warn(
String.format(
"Failed to list accounts for group %s, cannot retrieve uploader account %s",
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/Module.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/Module.java
index 0764524..98dad1b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/Module.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/Module.java
@@ -18,7 +18,6 @@
import com.google.gerrit.extensions.annotations.PluginName;
import com.google.gerrit.extensions.config.FactoryModule;
-import com.google.gerrit.extensions.events.DraftPublishedListener;
import com.google.gerrit.extensions.events.RevisionCreatedListener;
import com.google.gerrit.extensions.registration.DynamicSet;
import com.google.gerrit.extensions.restapi.RestApiModule;
@@ -53,7 +52,6 @@
}
DynamicSet.bind(binder(), RevisionCreatedListener.class).to(ChangeEventListener.class);
- DynamicSet.bind(binder(), DraftPublishedListener.class).to(ChangeEventListener.class);
factory(DefaultReviewers.Factory.class);
factory(ReviewersConfig.Factory.class);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/PutReviewers.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/PutReviewers.java
index 48c35fb..69eba6a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/PutReviewers.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/PutReviewers.java
@@ -56,7 +56,6 @@
private final ProjectCache projectCache;
private final AccountResolver accountResolver;
private final Provider<GroupsCollection> groupsCollection;
- private final Provider<ReviewDb> reviewDbProvider;
@Inject
PutReviewers(
@@ -73,7 +72,6 @@
this.projectCache = projectCache;
this.accountResolver = accountResolver;
this.groupsCollection = groupsCollection;
- this.reviewDbProvider = reviewDbProvider;
}
@Override
@@ -136,7 +134,7 @@
private void validateReviewer(String reviewer) throws RestApiException {
try {
- Account account = accountResolver.find(reviewDbProvider.get(), reviewer);
+ Account account = accountResolver.find(reviewer);
if (account == null) {
try {
groupsCollection.get().parse(reviewer);
@@ -144,7 +142,7 @@
throw new ResourceNotFoundException("Account or group " + reviewer + " not found");
}
}
- } catch (OrmException e) {
+ } catch (OrmException | IOException | ConfigInvalidException e) {
log.error("Failed to resolve account " + reviewer);
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewers/SuggestProjectReviewers.java b/src/main/java/com/googlesource/gerrit/plugins/reviewers/SuggestProjectReviewers.java
index f71c591..4212e61 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewers/SuggestProjectReviewers.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewers/SuggestProjectReviewers.java
@@ -14,6 +14,7 @@
package com.googlesource.gerrit.plugins.reviewers;
+import com.google.gerrit.extensions.common.AccountVisibility;
import com.google.gerrit.extensions.common.SuggestedReviewerInfo;
import com.google.gerrit.extensions.restapi.BadRequestException;
import com.google.gerrit.extensions.restapi.RestReadView;
@@ -22,41 +23,50 @@
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.ReviewersUtil;
import com.google.gerrit.server.ReviewersUtil.VisibilityControl;
-import com.google.gerrit.server.account.AccountVisibility;
import com.google.gerrit.server.change.SuggestReviewers;
import com.google.gerrit.server.config.GerritServerConfig;
+import com.google.gerrit.server.permissions.PermissionBackend;
+import com.google.gerrit.server.permissions.ProjectPermission;
import com.google.gerrit.server.project.ProjectResource;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
import com.google.inject.Provider;
import java.io.IOException;
import java.util.List;
+import org.eclipse.jgit.errors.ConfigInvalidException;
import org.eclipse.jgit.lib.Config;
public class SuggestProjectReviewers extends SuggestReviewers
implements RestReadView<ProjectResource> {
+ private final PermissionBackend permissionBackend;
+
@Inject
SuggestProjectReviewers(
AccountVisibility av,
IdentifiedUser.GenericFactory identifiedUserFactory,
Provider<ReviewDb> dbProvider,
@GerritServerConfig Config cfg,
- ReviewersUtil reviewersUtil) {
+ ReviewersUtil reviewersUtil,
+ PermissionBackend permissionBackend) {
super(av, identifiedUserFactory, dbProvider, cfg, reviewersUtil);
+ this.permissionBackend = permissionBackend;
}
@Override
public List<SuggestedReviewerInfo> apply(ProjectResource rsrc)
- throws BadRequestException, OrmException, IOException {
- return reviewersUtil.suggestReviewers(null, this, rsrc.getControl(), getVisibility(rsrc), true);
+ throws BadRequestException, OrmException, IOException, ConfigInvalidException {
+ return reviewersUtil.suggestReviewers(
+ null, this, rsrc.getProjectState(), getVisibility(rsrc), true);
}
private VisibilityControl getVisibility(final ProjectResource rsrc) {
return new VisibilityControl() {
@Override
public boolean isVisibleTo(Account.Id account) throws OrmException {
- IdentifiedUser who = identifiedUserFactory.create(account);
- return rsrc.getControl().forUser(who).isVisible();
+ return permissionBackend
+ .user(identifiedUserFactory.create(account))
+ .project(rsrc.getNameKey())
+ .testOrFalse(ProjectPermission.ACCESS);
}
};
}
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md
index 5fe2cb8..e2112fb 100644
--- a/src/main/resources/Documentation/config.md
+++ b/src/main/resources/Documentation/config.md
@@ -8,7 +8,6 @@
[reviewers]
enableREST = true
enableUI = false
- ignoreDrafts = true
```
reviewers.enableREST
@@ -19,12 +18,6 @@
: Enable the UI. When set to false, the 'Reviewers' menu is not displayed
on the project screen. Defaults to true, or false when `enableREST` is false.
-reviewers.ignoreDrafts
-: Ignore draft changes. When set to true draft changes are not considered when
- adding reviewers. Defaults to false. To ignore drafts on a per-project basis
- set this value to false and add "-status:draft" to filter in relevant projects.
-
-
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
@@ -42,8 +35,6 @@
[filter "branch:stable-2.10"]
reviewer = QAGroup
- [filter "-status:draft"]
- reviewer = DevGroup
```
filter.\<filter\>.reviewer