Move {Ref,Change,Project}Control into permissions package
This is the last commit of a longer series to hide the internal implementation of Gerrit's permission schema and have all calls go through PermissionBackend. This commit moves all Control classes into server/permissions to avoid direct calling from other classes in server/project. Change-Id: Ifc8f0d3838fefafbb69bb4f0dfc5ca513a41b906
This commit is contained in:
@@ -73,10 +73,10 @@ import com.google.gerrit.server.mime.MimeUtil2Module;
|
||||
import com.google.gerrit.server.notedb.GroupsMigration;
|
||||
import com.google.gerrit.server.notedb.NotesMigration;
|
||||
import com.google.gerrit.server.patch.DiffExecutorModule;
|
||||
import com.google.gerrit.server.permissions.DefaultPermissionBackendModule;
|
||||
import com.google.gerrit.server.plugins.PluginGuiceEnvironment;
|
||||
import com.google.gerrit.server.plugins.PluginModule;
|
||||
import com.google.gerrit.server.plugins.PluginRestApiModule;
|
||||
import com.google.gerrit.server.project.DefaultPermissionBackendModule;
|
||||
import com.google.gerrit.server.project.DefaultProjectNameLockManager;
|
||||
import com.google.gerrit.server.restapi.config.RestCacheAdminModule;
|
||||
import com.google.gerrit.server.schema.DataSourceModule;
|
||||
|
@@ -82,10 +82,10 @@ import com.google.gerrit.server.mime.MimeUtil2Module;
|
||||
import com.google.gerrit.server.notedb.rebuild.NoteDbMigrator;
|
||||
import com.google.gerrit.server.notedb.rebuild.OnlineNoteDbMigrator;
|
||||
import com.google.gerrit.server.patch.DiffExecutorModule;
|
||||
import com.google.gerrit.server.permissions.DefaultPermissionBackendModule;
|
||||
import com.google.gerrit.server.plugins.PluginGuiceEnvironment;
|
||||
import com.google.gerrit.server.plugins.PluginModule;
|
||||
import com.google.gerrit.server.plugins.PluginRestApiModule;
|
||||
import com.google.gerrit.server.project.DefaultPermissionBackendModule;
|
||||
import com.google.gerrit.server.project.DefaultProjectNameLockManager;
|
||||
import com.google.gerrit.server.restapi.config.RestCacheAdminModule;
|
||||
import com.google.gerrit.server.schema.DataSourceProvider;
|
||||
|
@@ -60,12 +60,12 @@ import com.google.gerrit.server.mail.send.ReplacePatchSetSender;
|
||||
import com.google.gerrit.server.notedb.NoteDbModule;
|
||||
import com.google.gerrit.server.patch.DiffExecutorModule;
|
||||
import com.google.gerrit.server.patch.PatchListCacheImpl;
|
||||
import com.google.gerrit.server.permissions.DefaultPermissionBackendModule;
|
||||
import com.google.gerrit.server.permissions.SectionSortCache;
|
||||
import com.google.gerrit.server.project.CommentLinkProvider;
|
||||
import com.google.gerrit.server.project.CommitResource;
|
||||
import com.google.gerrit.server.project.DefaultPermissionBackendModule;
|
||||
import com.google.gerrit.server.project.ProjectCacheImpl;
|
||||
import com.google.gerrit.server.project.ProjectState;
|
||||
import com.google.gerrit.server.project.SectionSortCache;
|
||||
import com.google.gerrit.server.project.SubmitRuleEvaluator;
|
||||
import com.google.gerrit.server.query.change.ChangeData;
|
||||
import com.google.gerrit.server.query.change.ChangeQueryProcessor;
|
||||
|
@@ -159,14 +159,14 @@ import com.google.gerrit.server.notedb.NoteDbModule;
|
||||
import com.google.gerrit.server.patch.PatchListCacheImpl;
|
||||
import com.google.gerrit.server.patch.PatchScriptFactory;
|
||||
import com.google.gerrit.server.patch.PatchSetInfoFactory;
|
||||
import com.google.gerrit.server.permissions.PermissionCollection;
|
||||
import com.google.gerrit.server.permissions.SectionSortCache;
|
||||
import com.google.gerrit.server.plugins.ReloadPluginListener;
|
||||
import com.google.gerrit.server.project.AccessControlModule;
|
||||
import com.google.gerrit.server.project.CommentLinkProvider;
|
||||
import com.google.gerrit.server.project.PermissionCollection;
|
||||
import com.google.gerrit.server.project.ProjectCacheImpl;
|
||||
import com.google.gerrit.server.project.ProjectNameLockManager;
|
||||
import com.google.gerrit.server.project.ProjectState;
|
||||
import com.google.gerrit.server.project.SectionSortCache;
|
||||
import com.google.gerrit.server.project.SubmitRuleEvaluator;
|
||||
import com.google.gerrit.server.query.change.ChangeData;
|
||||
import com.google.gerrit.server.query.change.ChangeQueryBuilder;
|
||||
|
@@ -12,7 +12,7 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package com.google.gerrit.server.project;
|
||||
package com.google.gerrit.server.permissions;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkState;
|
||||
import static com.google.gerrit.server.permissions.LabelPermission.ForUser.ON_BEHALF_OF;
|
||||
@@ -34,12 +34,7 @@ import com.google.gerrit.server.ApprovalsUtil;
|
||||
import com.google.gerrit.server.CurrentUser;
|
||||
import com.google.gerrit.server.PatchSetUtil;
|
||||
import com.google.gerrit.server.notedb.ChangeNotes;
|
||||
import com.google.gerrit.server.permissions.ChangePermission;
|
||||
import com.google.gerrit.server.permissions.ChangePermissionOrLabel;
|
||||
import com.google.gerrit.server.permissions.LabelPermission;
|
||||
import com.google.gerrit.server.permissions.PermissionBackend.ForChange;
|
||||
import com.google.gerrit.server.permissions.PermissionBackendException;
|
||||
import com.google.gerrit.server.permissions.RefPermission;
|
||||
import com.google.gerrit.server.query.change.ChangeData;
|
||||
import com.google.gwtorm.server.OrmException;
|
||||
import com.google.inject.Inject;
|
@@ -12,7 +12,7 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package com.google.gerrit.server.project;
|
||||
package com.google.gerrit.server.permissions;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
import static java.util.stream.Collectors.toSet;
|
||||
@@ -28,10 +28,9 @@ import com.google.gerrit.reviewdb.client.Project;
|
||||
import com.google.gerrit.server.CurrentUser;
|
||||
import com.google.gerrit.server.PeerDaemonUser;
|
||||
import com.google.gerrit.server.account.CapabilityCollection;
|
||||
import com.google.gerrit.server.permissions.FailedPermissionBackend;
|
||||
import com.google.gerrit.server.permissions.GlobalPermission;
|
||||
import com.google.gerrit.server.permissions.PermissionBackend;
|
||||
import com.google.gerrit.server.permissions.PermissionBackendException;
|
||||
import com.google.gerrit.server.project.NoSuchProjectException;
|
||||
import com.google.gerrit.server.project.ProjectCache;
|
||||
import com.google.gerrit.server.project.ProjectState;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Singleton;
|
||||
import java.io.IOException;
|
@@ -12,10 +12,9 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package com.google.gerrit.server.project;
|
||||
package com.google.gerrit.server.permissions;
|
||||
|
||||
import com.google.gerrit.extensions.config.FactoryModule;
|
||||
import com.google.gerrit.server.permissions.PermissionBackend;
|
||||
import com.google.inject.AbstractModule;
|
||||
|
||||
/** Binds the default {@link PermissionBackend}. */
|
@@ -27,7 +27,6 @@ import com.google.gerrit.reviewdb.client.Project;
|
||||
import com.google.gerrit.reviewdb.server.ReviewDb;
|
||||
import com.google.gerrit.server.CurrentUser;
|
||||
import com.google.gerrit.server.notedb.ChangeNotes;
|
||||
import com.google.gerrit.server.project.DefaultPermissionBackend;
|
||||
import com.google.gerrit.server.query.change.ChangeData;
|
||||
import com.google.gwtorm.server.OrmException;
|
||||
import com.google.inject.ImplementedBy;
|
||||
|
@@ -12,7 +12,7 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package com.google.gerrit.server.project;
|
||||
package com.google.gerrit.server.permissions;
|
||||
|
||||
import static com.google.common.base.MoreObjects.firstNonNull;
|
||||
import static com.google.gerrit.server.project.RefPattern.isRE;
|
||||
@@ -29,6 +29,9 @@ import com.google.gerrit.common.data.PermissionRule;
|
||||
import com.google.gerrit.reviewdb.client.AccountGroup;
|
||||
import com.google.gerrit.reviewdb.client.Project;
|
||||
import com.google.gerrit.server.CurrentUser;
|
||||
import com.google.gerrit.server.project.RefPattern;
|
||||
import com.google.gerrit.server.project.RefPatternMatcher.ExpandParameters;
|
||||
import com.google.gerrit.server.project.SectionMatcher;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Singleton;
|
||||
import java.util.ArrayList;
|
||||
@@ -91,16 +94,16 @@ public class PermissionCollection {
|
||||
// that will never be shared with non-user references, and the per-user
|
||||
// references are usually less frequent than the non-user references.
|
||||
//
|
||||
if (sm.matcher instanceof RefPatternMatcher.ExpandParameters) {
|
||||
if (!((RefPatternMatcher.ExpandParameters) sm.matcher).matchPrefix(ref)) {
|
||||
if (sm.getMatcher() instanceof ExpandParameters) {
|
||||
if (!((ExpandParameters) sm.getMatcher()).matchPrefix(ref)) {
|
||||
continue;
|
||||
}
|
||||
perUser = true;
|
||||
if (sm.match(ref, user)) {
|
||||
sectionToProject.put(sm.section, sm.project);
|
||||
sectionToProject.put(sm.getSection(), sm.getProject());
|
||||
}
|
||||
} else if (sm.match(ref, null)) {
|
||||
sectionToProject.put(sm.section, sm.project);
|
||||
sectionToProject.put(sm.getSection(), sm.getProject());
|
||||
}
|
||||
}
|
||||
List<AccessSection> sections = Lists.newArrayList(sectionToProject.keySet());
|
@@ -12,7 +12,7 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package com.google.gerrit.server.project;
|
||||
package com.google.gerrit.server.permissions;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkArgument;
|
||||
|
||||
@@ -21,9 +21,6 @@ import com.google.gerrit.common.data.AccessSection;
|
||||
import com.google.gerrit.common.data.Permission;
|
||||
import com.google.gerrit.common.data.PermissionRule;
|
||||
import com.google.gerrit.extensions.restapi.AuthException;
|
||||
import com.google.gerrit.metrics.Counter0;
|
||||
import com.google.gerrit.metrics.Description;
|
||||
import com.google.gerrit.metrics.MetricMaker;
|
||||
import com.google.gerrit.reviewdb.client.AccountGroup;
|
||||
import com.google.gerrit.reviewdb.client.Branch;
|
||||
import com.google.gerrit.reviewdb.client.Change;
|
||||
@@ -36,18 +33,14 @@ import com.google.gerrit.server.config.GitReceivePackGroups;
|
||||
import com.google.gerrit.server.config.GitUploadPackGroups;
|
||||
import com.google.gerrit.server.group.SystemGroupBackend;
|
||||
import com.google.gerrit.server.notedb.ChangeNotes;
|
||||
import com.google.gerrit.server.permissions.FailedPermissionBackend;
|
||||
import com.google.gerrit.server.permissions.GlobalPermission;
|
||||
import com.google.gerrit.server.permissions.PermissionBackend;
|
||||
import com.google.gerrit.server.permissions.PermissionBackend.ForChange;
|
||||
import com.google.gerrit.server.permissions.PermissionBackend.ForProject;
|
||||
import com.google.gerrit.server.permissions.PermissionBackend.ForRef;
|
||||
import com.google.gerrit.server.permissions.PermissionBackendException;
|
||||
import com.google.gerrit.server.permissions.ProjectPermission;
|
||||
import com.google.gerrit.server.project.ProjectState;
|
||||
import com.google.gerrit.server.project.SectionMatcher;
|
||||
import com.google.gerrit.server.query.change.ChangeData;
|
||||
import com.google.gwtorm.server.OrmException;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Singleton;
|
||||
import com.google.inject.assistedinject.Assisted;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
@@ -64,19 +57,6 @@ class ProjectControl {
|
||||
ProjectControl create(CurrentUser who, ProjectState ps);
|
||||
}
|
||||
|
||||
@Singleton
|
||||
protected static class Metrics {
|
||||
final Counter0 claCheckCount;
|
||||
|
||||
@Inject
|
||||
Metrics(MetricMaker metricMaker) {
|
||||
claCheckCount =
|
||||
metricMaker.newCounter(
|
||||
"license/cla_check_count",
|
||||
new Description("Total number of CLA check requests").setRate().setUnit("requests"));
|
||||
}
|
||||
}
|
||||
|
||||
private final Set<AccountGroup.UUID> uploadGroups;
|
||||
private final Set<AccountGroup.UUID> receiveGroups;
|
||||
private final PermissionBackend permissionBackend;
|
||||
@@ -227,7 +207,7 @@ class ProjectControl {
|
||||
|
||||
private boolean canCreateChanges() {
|
||||
for (SectionMatcher matcher : access()) {
|
||||
AccessSection section = matcher.section;
|
||||
AccessSection section = matcher.getSection();
|
||||
if (section.getName().startsWith("refs/for/")) {
|
||||
Permission permission = section.getPermission(Permission.PUSH);
|
||||
if (permission != null && controlForRef(section.getName()).canPerform(Permission.PUSH)) {
|
||||
@@ -248,7 +228,7 @@ class ProjectControl {
|
||||
|
||||
private boolean canPerformOnAnyRef(String permissionName) {
|
||||
for (SectionMatcher matcher : access()) {
|
||||
AccessSection section = matcher.section;
|
||||
AccessSection section = matcher.getSection();
|
||||
Permission permission = section.getPermission(permissionName);
|
||||
if (permission == null) {
|
||||
continue;
|
||||
@@ -297,7 +277,7 @@ class ProjectControl {
|
||||
private Set<String> allRefPatterns(String permissionName) {
|
||||
Set<String> all = new HashSet<>();
|
||||
for (SectionMatcher matcher : access()) {
|
||||
AccessSection section = matcher.section;
|
||||
AccessSection section = matcher.getSection();
|
||||
Permission permission = section.getPermission(permissionName);
|
||||
if (permission != null) {
|
||||
all.add(section.getName());
|
@@ -12,7 +12,7 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package com.google.gerrit.server.project;
|
||||
package com.google.gerrit.server.permissions;
|
||||
|
||||
import com.google.auto.value.AutoValue;
|
||||
import com.google.gerrit.reviewdb.client.Project;
|
@@ -12,7 +12,7 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package com.google.gerrit.server.project;
|
||||
package com.google.gerrit.server.permissions;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkArgument;
|
||||
|
||||
@@ -26,11 +26,8 @@ import com.google.gerrit.reviewdb.client.Project;
|
||||
import com.google.gerrit.reviewdb.client.RefNames;
|
||||
import com.google.gerrit.server.CurrentUser;
|
||||
import com.google.gerrit.server.notedb.ChangeNotes;
|
||||
import com.google.gerrit.server.permissions.FailedPermissionBackend;
|
||||
import com.google.gerrit.server.permissions.PermissionBackend.ForChange;
|
||||
import com.google.gerrit.server.permissions.PermissionBackend.ForRef;
|
||||
import com.google.gerrit.server.permissions.PermissionBackendException;
|
||||
import com.google.gerrit.server.permissions.RefPermission;
|
||||
import com.google.gerrit.server.query.change.ChangeData;
|
||||
import com.google.gerrit.server.util.MagicBranch;
|
||||
import com.google.gwtorm.server.OrmException;
|
@@ -12,7 +12,7 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package com.google.gerrit.server.project;
|
||||
package com.google.gerrit.server.permissions;
|
||||
|
||||
import com.google.auto.value.AutoValue;
|
||||
import com.google.common.cache.Cache;
|
@@ -20,6 +20,9 @@ import com.google.gerrit.common.data.ContributorAgreement;
|
||||
import com.google.gerrit.common.data.PermissionRule;
|
||||
import com.google.gerrit.common.data.PermissionRule.Action;
|
||||
import com.google.gerrit.extensions.restapi.AuthException;
|
||||
import com.google.gerrit.metrics.Counter0;
|
||||
import com.google.gerrit.metrics.Description;
|
||||
import com.google.gerrit.metrics.MetricMaker;
|
||||
import com.google.gerrit.reviewdb.client.AccountGroup;
|
||||
import com.google.gerrit.reviewdb.client.AccountGroup.UUID;
|
||||
import com.google.gerrit.reviewdb.client.BooleanProjectConfig;
|
||||
@@ -27,7 +30,6 @@ 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.CanonicalWebUrl;
|
||||
import com.google.gerrit.server.project.ProjectControl.Metrics;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Singleton;
|
||||
import java.io.IOException;
|
||||
@@ -42,6 +44,19 @@ public class ContributorAgreementsChecker {
|
||||
private final ProjectCache projectCache;
|
||||
private final Metrics metrics;
|
||||
|
||||
@Singleton
|
||||
protected static class Metrics {
|
||||
final Counter0 claCheckCount;
|
||||
|
||||
@Inject
|
||||
Metrics(MetricMaker metricMaker) {
|
||||
claCheckCount =
|
||||
metricMaker.newCounter(
|
||||
"license/cla_check_count",
|
||||
new Description("Total number of CLA check requests").setRate().setUnit("requests"));
|
||||
}
|
||||
}
|
||||
|
||||
@Inject
|
||||
ContributorAgreementsChecker(
|
||||
@CanonicalWebUrl @Nullable String canonicalWebUrl,
|
||||
|
@@ -310,7 +310,7 @@ public class ProjectState {
|
||||
* Obtain all local and inherited sections. This collection is looked up dynamically and is not
|
||||
* cached. Callers should try to cache this result per-request as much as possible.
|
||||
*/
|
||||
List<SectionMatcher> getAllSections() {
|
||||
public List<SectionMatcher> getAllSections() {
|
||||
if (isAllProjects) {
|
||||
return getLocalAccessSections();
|
||||
}
|
||||
@@ -520,7 +520,7 @@ public class ProjectState {
|
||||
private static Set<GroupReference> getGroups(List<SectionMatcher> sectionMatcherList) {
|
||||
final Set<GroupReference> all = new HashSet<>();
|
||||
for (SectionMatcher matcher : sectionMatcherList) {
|
||||
final AccessSection section = matcher.section;
|
||||
final AccessSection section = matcher.getSection();
|
||||
for (Permission permission : section.getPermissions()) {
|
||||
for (PermissionRule rule : permission.getRules()) {
|
||||
all.add(rule.getGroup());
|
||||
|
@@ -83,7 +83,7 @@ public abstract class RefPatternMatcher {
|
||||
}
|
||||
}
|
||||
|
||||
static class ExpandParameters extends RefPatternMatcher {
|
||||
public static class ExpandParameters extends RefPatternMatcher {
|
||||
private final ParameterizedString template;
|
||||
private final String prefix;
|
||||
|
||||
@@ -148,7 +148,7 @@ public abstract class RefPatternMatcher {
|
||||
return ImmutableSet.of();
|
||||
}
|
||||
|
||||
boolean matchPrefix(String ref) {
|
||||
public boolean matchPrefix(String ref) {
|
||||
return ref.startsWith(prefix);
|
||||
}
|
||||
|
||||
|
@@ -16,6 +16,7 @@ package com.google.gerrit.server.project;
|
||||
|
||||
import com.google.gerrit.common.data.AccessSection;
|
||||
import com.google.gerrit.reviewdb.client.Project;
|
||||
import com.google.gerrit.reviewdb.client.Project.NameKey;
|
||||
import com.google.gerrit.server.CurrentUser;
|
||||
|
||||
/**
|
||||
@@ -24,7 +25,7 @@ import com.google.gerrit.server.CurrentUser;
|
||||
* <p>These matchers are "compiled" versions of the AccessSection name, supporting faster selection
|
||||
* of which sections are relevant to any given input reference.
|
||||
*/
|
||||
class SectionMatcher extends RefPatternMatcher {
|
||||
public class SectionMatcher extends RefPatternMatcher {
|
||||
static SectionMatcher wrap(Project.NameKey project, AccessSection section) {
|
||||
String ref = section.getName();
|
||||
if (AccessSection.isValid(ref)) {
|
||||
@@ -33,11 +34,11 @@ class SectionMatcher extends RefPatternMatcher {
|
||||
return null;
|
||||
}
|
||||
|
||||
final Project.NameKey project;
|
||||
final AccessSection section;
|
||||
final RefPatternMatcher matcher;
|
||||
private final Project.NameKey project;
|
||||
private final AccessSection section;
|
||||
private final RefPatternMatcher matcher;
|
||||
|
||||
SectionMatcher(Project.NameKey project, AccessSection section, RefPatternMatcher matcher) {
|
||||
public SectionMatcher(Project.NameKey project, AccessSection section, RefPatternMatcher matcher) {
|
||||
this.project = project;
|
||||
this.section = section;
|
||||
this.matcher = matcher;
|
||||
@@ -47,4 +48,16 @@ class SectionMatcher extends RefPatternMatcher {
|
||||
public boolean match(String ref, CurrentUser user) {
|
||||
return this.matcher.match(ref, user);
|
||||
}
|
||||
|
||||
public AccessSection getSection() {
|
||||
return section;
|
||||
}
|
||||
|
||||
public RefPatternMatcher getMatcher() {
|
||||
return matcher;
|
||||
}
|
||||
|
||||
public NameKey getProject() {
|
||||
return project;
|
||||
}
|
||||
}
|
||||
|
@@ -67,9 +67,9 @@ import com.google.gerrit.server.notedb.GwtormChangeBundleReader;
|
||||
import com.google.gerrit.server.notedb.MutableNotesMigration;
|
||||
import com.google.gerrit.server.notedb.NotesMigration;
|
||||
import com.google.gerrit.server.patch.DiffExecutor;
|
||||
import com.google.gerrit.server.permissions.DefaultPermissionBackendModule;
|
||||
import com.google.gerrit.server.plugins.PluginRestApiModule;
|
||||
import com.google.gerrit.server.plugins.ServerInformationImpl;
|
||||
import com.google.gerrit.server.project.DefaultPermissionBackendModule;
|
||||
import com.google.gerrit.server.project.DefaultProjectNameLockManager;
|
||||
import com.google.gerrit.server.schema.DataSourceType;
|
||||
import com.google.gerrit.server.schema.InMemoryAccountPatchReviewStore;
|
||||
|
@@ -12,7 +12,7 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package com.google.gerrit.server.project;
|
||||
package com.google.gerrit.server.permissions;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static com.google.gerrit.common.data.Permission.EDIT_TOPIC_NAME;
|
||||
@@ -55,9 +55,9 @@ import com.google.gerrit.server.config.AllUsersNameProvider;
|
||||
import com.google.gerrit.server.config.SitePaths;
|
||||
import com.google.gerrit.server.git.ProjectConfig;
|
||||
import com.google.gerrit.server.index.SingleVersionModule.SingleVersionListener;
|
||||
import com.google.gerrit.server.permissions.PermissionBackend;
|
||||
import com.google.gerrit.server.permissions.ProjectPermission;
|
||||
import com.google.gerrit.server.permissions.RefPermission;
|
||||
import com.google.gerrit.server.project.ProjectCache;
|
||||
import com.google.gerrit.server.project.ProjectState;
|
||||
import com.google.gerrit.server.project.RefPattern;
|
||||
import com.google.gerrit.server.project.testing.Util;
|
||||
import com.google.gerrit.server.rules.PrologEnvironment;
|
||||
import com.google.gerrit.server.rules.RulesCache;
|
Reference in New Issue
Block a user