Merge branch 'stable-2.14' into stable-2.15
* stable-2.14:
Format Java files with google-java-format 1.5
Update bazlets to latest stable-2.14 to use 2.14.8 API
Use log built-in string formatting
Change-Id: Ic8cbf2e99b7becfb5bdafe3e8a5c9651e959917c
diff --git a/WORKSPACE b/WORKSPACE
index aabfbe8..df10b0e 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -3,24 +3,24 @@
load("//:bazlets.bzl", "load_bazlets")
load_bazlets(
- commit = "80add197d1cb9a89fa906dde2d26d804697517f6",
+ commit = "df6622a4e725b4d0bad99377f05749171a8c94b9",
# local_path = "/home/<user>/projects/bazlets",
)
#Snapshot Plugin API
-#load(
-# "@com_googlesource_gerrit_bazlets//:gerrit_api_maven_local.bzl",
-# "gerrit_api_maven_local",
-#)
-
-# Load snapshot Plugin API
-#gerrit_api_maven_local()
-
-# Release Plugin API
load(
- "@com_googlesource_gerrit_bazlets//:gerrit_api.bzl",
- "gerrit_api",
+ "@com_googlesource_gerrit_bazlets//:gerrit_api_maven_local.bzl",
+ "gerrit_api_maven_local",
)
+# Load snapshot Plugin API
+gerrit_api_maven_local()
+
+# Release Plugin API
+#load(
+# "@com_googlesource_gerrit_bazlets//:gerrit_api.bzl",
+# "gerrit_api",
+#)
+
# Load release Plugin API
-gerrit_api()
+#gerrit_api()
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteAction.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteAction.java
index 73cad25..67ef40a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteAction.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteAction.java
@@ -19,6 +19,8 @@
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.config.AllProjectsNameProvider;
import com.google.gerrit.server.config.PluginConfigFactory;
+import com.google.gerrit.server.notedb.NotesMigration;
+import com.google.gerrit.server.permissions.PermissionBackend;
import com.google.gerrit.server.project.ProjectResource;
import com.google.inject.Inject;
import com.google.inject.Provider;
@@ -39,7 +41,9 @@
@PluginName String pluginName,
DeleteLog deleteLog,
PluginConfigFactory cfgFactory,
- HideProject hideProject) {
+ HideProject hideProject,
+ PermissionBackend permissionBackend,
+ NotesMigration migration) {
super(
allProjectsNameProvider,
dbHandler,
@@ -50,7 +54,9 @@
pluginName,
deleteLog,
cfgFactory,
- hideProject);
+ hideProject,
+ permissionBackend,
+ migration);
}
@Override
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteProject.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteProject.java
index 8081cd3..fe02aeb 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteProject.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteProject.java
@@ -18,6 +18,7 @@
import static com.googlesource.gerrit.plugins.deleteproject.DeleteProjectCapability.DELETE_PROJECT;
import com.google.gerrit.extensions.annotations.PluginName;
+import com.google.gerrit.extensions.api.access.PluginPermission;
import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.extensions.restapi.ResourceConflictException;
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
@@ -26,10 +27,12 @@
import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.IdentifiedUser;
-import com.google.gerrit.server.account.CapabilityControl;
import com.google.gerrit.server.config.AllProjectsName;
import com.google.gerrit.server.config.AllProjectsNameProvider;
import com.google.gerrit.server.config.PluginConfigFactory;
+import com.google.gerrit.server.notedb.NotesMigration;
+import com.google.gerrit.server.permissions.GlobalPermission;
+import com.google.gerrit.server.permissions.PermissionBackend;
import com.google.gerrit.server.project.ProjectResource;
import com.google.gwtorm.server.OrmException;
import com.google.inject.Inject;
@@ -59,6 +62,8 @@
private final DeleteLog deleteLog;
private final PluginConfigFactory cfgFactory;
private final HideProject hideProject;
+ private PermissionBackend permissionBackend;
+ private NotesMigration migration;
@Inject
DeleteProject(
@@ -71,7 +76,9 @@
@PluginName String pluginName,
DeleteLog deleteLog,
PluginConfigFactory cfgFactory,
- HideProject hideProject) {
+ HideProject hideProject,
+ PermissionBackend permissionBackend,
+ NotesMigration migration) {
this.allProjectsName = allProjectsNameProvider.get();
this.dbHandler = dbHandler;
this.fsHandler = fsHandler;
@@ -82,6 +89,8 @@
this.deleteLog = deleteLog;
this.cfgFactory = cfgFactory;
this.hideProject = hideProject;
+ this.permissionBackend = permissionBackend;
+ this.migration = migration;
}
@Override
@@ -110,10 +119,11 @@
}
protected boolean canDelete(ProjectResource rsrc) {
- CapabilityControl ctl = userProvider.get().getCapabilities();
- return ctl.canAdministrateServer()
- || ctl.canPerform(pluginName + "-" + DELETE_PROJECT)
- || (ctl.canPerform(pluginName + "-" + DELETE_OWN_PROJECT) && rsrc.getControl().isOwner());
+ PermissionBackend.WithUser userPermission = permissionBackend.user(userProvider);
+ return userPermission.testOrFalse(GlobalPermission.ADMINISTRATE_SERVER)
+ || userPermission.testOrFalse(new PluginPermission(pluginName, DELETE_PROJECT))
+ || (userPermission.testOrFalse(new PluginPermission(pluginName, DELETE_OWN_PROJECT))
+ && rsrc.getControl().isOwner());
}
public void assertCanDelete(ProjectResource rsrc, Input input) throws ResourceConflictException {
@@ -140,7 +150,9 @@
|| !cfgFactory
.getFromGerritConfig(pluginName)
.getBoolean("hideProjectOnPreserve", false)) {
- dbHandler.delete(project);
+ if (!migration.disableChangeReviewDb()) {
+ dbHandler.delete(project);
+ }
try {
fsHandler.delete(project, preserve);
} catch (RepositoryNotFoundException e) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/HideProject.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/HideProject.java
index 6897a29..97a4627 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/HideProject.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/HideProject.java
@@ -26,6 +26,7 @@
import com.google.gerrit.server.config.PluginConfigFactory;
import com.google.gerrit.server.git.MetaDataUpdate;
import com.google.gerrit.server.git.ProjectConfig;
+import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.gerrit.server.project.CreateProject;
import com.google.gerrit.server.project.ProjectCache;
import com.google.gerrit.server.project.ProjectResource;
@@ -97,7 +98,8 @@
} catch (BadRequestException
| UnprocessableEntityException
| ResourceNotFoundException
- | ConfigInvalidException e) {
+ | ConfigInvalidException
+ | PermissionBackendException e) {
throw new ResourceConflictException(
String.format("Failed to create project %s", projectName));
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/database/DatabaseDeleteHandler.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/database/DatabaseDeleteHandler.java
index 11e146e..5eecef6 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/database/DatabaseDeleteHandler.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/database/DatabaseDeleteHandler.java
@@ -34,6 +34,7 @@
import com.google.gerrit.server.change.AccountPatchReviewStore;
import com.google.gerrit.server.git.GitRepositoryManager;
import com.google.gerrit.server.git.MergeOpRepoManager;
+import com.google.gerrit.server.git.SubmoduleException;
import com.google.gerrit.server.git.SubmoduleOp;
import com.google.gerrit.server.index.change.ChangeIndexer;
import com.google.gerrit.server.project.NoSuchChangeException;
@@ -188,6 +189,8 @@
} catch (RepositoryNotFoundException e) {
// we're trying to delete the repository,
// so this exception should not stop us
+ } catch (SubmoduleException e) {
+ throw new CannotDeleteProjectException("Project has submodule.");
} catch (IOException e) {
throw new CannotDeleteProjectException("Project is subscribed by other projects.");
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/projectconfig/ProjectConfigDeleteHandler.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/projectconfig/ProjectConfigDeleteHandler.java
index 21038e2..30486da 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/projectconfig/ProjectConfigDeleteHandler.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/projectconfig/ProjectConfigDeleteHandler.java
@@ -22,6 +22,7 @@
import com.google.gerrit.server.config.AllProjectsName;
import com.google.gerrit.server.config.AllProjectsNameProvider;
import com.google.gerrit.server.config.SitePaths;
+import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.gerrit.server.project.ListChildProjects;
import com.google.gerrit.server.project.ProjectResource;
import com.google.inject.Inject;
@@ -59,21 +60,26 @@
}
private void assertHasNoChildProjects(ProjectResource rsrc) throws CannotDeleteProjectException {
- List<ProjectInfo> children = listChildProjectsProvider.get().apply(rsrc);
- if (!children.isEmpty()) {
- String childrenString =
- Joiner.on(", ")
- .join(
- Iterables.transform(
- children,
- new Function<ProjectInfo, String>() {
- @Override
- public String apply(ProjectInfo info) {
- return info.name;
- }
- }));
+ try {
+ List<ProjectInfo> children = listChildProjectsProvider.get().apply(rsrc);
+ if (!children.isEmpty()) {
+ String childrenString =
+ Joiner.on(", ")
+ .join(
+ Iterables.transform(
+ children,
+ new Function<ProjectInfo, String>() {
+ @Override
+ public String apply(ProjectInfo info) {
+ return info.name;
+ }
+ }));
+ throw new CannotDeleteProjectException(
+ "Cannot delete project because it has children: " + childrenString);
+ }
+ } catch (PermissionBackendException e) {
throw new CannotDeleteProjectException(
- "Cannot delete project because it has children: " + childrenString);
+ "Cannot delete project because of failure in permission backend.");
}
}
}