Merge branch 'stable-2.14' into stable-2.15
* stable-2.14:
Format Configuration class with google-java-format
Extract configuration to a separate class
Change-Id: Ib896fc90ae27cb89b3a55ecd8ed7bd326bbde582
diff --git a/BUILD b/BUILD
index 89f3d06..89097bb 100644
--- a/BUILD
+++ b/BUILD
@@ -31,5 +31,6 @@
visibility = ["//visibility:public"],
exports = PLUGIN_DEPS + PLUGIN_TEST_DEPS + [
":delete-project__plugin",
+ "@mockito//jar",
],
)
diff --git a/WORKSPACE b/WORKSPACE
index 5b3dbc5..f8451b4 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -24,3 +24,7 @@
# Load release Plugin API
gerrit_api()
+
+load("//:external_plugin_deps.bzl", "external_plugin_deps")
+
+external_plugin_deps()
diff --git a/external_plugin_deps.bzl b/external_plugin_deps.bzl
new file mode 100644
index 0000000..43d72aa
--- /dev/null
+++ b/external_plugin_deps.bzl
@@ -0,0 +1,33 @@
+load("//tools/bzl:maven_jar.bzl", "maven_jar")
+
+def external_plugin_deps():
+ maven_jar(
+ name = "mockito",
+ artifact = "org.mockito:mockito-core:2.16.0",
+ sha1 = "a022ee494c753789a1e7cae75099de81d8a5cea6",
+ deps = [
+ "@byte_buddy//jar",
+ "@byte_buddy_agent//jar",
+ "@objenesis//jar",
+ ],
+ )
+
+ BYTE_BUDDY_VERSION = "1.7.9"
+
+ maven_jar(
+ name = "byte_buddy",
+ artifact = "net.bytebuddy:byte-buddy:" + BYTE_BUDDY_VERSION,
+ sha1 = "51218a01a882c04d0aba8c028179cce488bbcb58",
+ )
+
+ maven_jar(
+ name = "byte_buddy_agent",
+ artifact = "net.bytebuddy:byte-buddy-agent:" + BYTE_BUDDY_VERSION,
+ sha1 = "a6c65f9da7f467ee1f02ff2841ffd3155aee2fc9",
+ )
+
+ maven_jar(
+ name = "objenesis",
+ artifact = "org.objenesis:objenesis:2.6",
+ sha1 = "639033469776fd37c08358c6b92a4761feb2af4b",
+ )
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/Configuration.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/Configuration.java
new file mode 100644
index 0000000..be7186d
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/Configuration.java
@@ -0,0 +1,50 @@
+// Copyright (C) 2018 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.googlesource.gerrit.plugins.deleteproject;
+
+import com.google.gerrit.extensions.annotations.PluginName;
+import com.google.gerrit.server.config.PluginConfig;
+import com.google.gerrit.server.config.PluginConfigFactory;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+@Singleton
+public class Configuration {
+ private static String DELETED_PROJECTS_PARENT = "Deleted-Projects";
+
+ private final boolean allowDeletionWithTags;
+ private final boolean hideProjectOnPreserve;
+ private final String deletedProjectsParent;
+
+ @Inject
+ public Configuration(PluginConfigFactory pluginConfigFactory, @PluginName String pluginName) {
+ PluginConfig cfg = pluginConfigFactory.getFromGerritConfig(pluginName);
+ allowDeletionWithTags = cfg.getBoolean("allowDeletionOfReposWithTags", true);
+ hideProjectOnPreserve = cfg.getBoolean("hideProjectOnPreserve", false);
+ deletedProjectsParent = cfg.getString("parentForDeletedProjects", DELETED_PROJECTS_PARENT);
+ }
+
+ public boolean deletionWithTagsAllowed() {
+ return allowDeletionWithTags;
+ }
+
+ public boolean projectOnPreserveHidden() {
+ return hideProjectOnPreserve;
+ }
+
+ public String getDeletedProjectsParent() {
+ return deletedProjectsParent;
+ }
+}
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 67ef40a..9ebfd34 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteAction.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteAction.java
@@ -18,7 +18,6 @@
import com.google.gerrit.extensions.webui.UiAction;
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;
@@ -40,7 +39,7 @@
Provider<CurrentUser> userProvider,
@PluginName String pluginName,
DeleteLog deleteLog,
- PluginConfigFactory cfgFactory,
+ Configuration cfg,
HideProject hideProject,
PermissionBackend permissionBackend,
NotesMigration migration) {
@@ -53,7 +52,7 @@
userProvider,
pluginName,
deleteLog,
- cfgFactory,
+ cfg,
hideProject,
permissionBackend,
migration);
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 fe02aeb..97c3726 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteProject.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteProject.java
@@ -29,7 +29,6 @@
import com.google.gerrit.server.IdentifiedUser;
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;
@@ -60,7 +59,7 @@
private final Provider<CurrentUser> userProvider;
private final String pluginName;
private final DeleteLog deleteLog;
- private final PluginConfigFactory cfgFactory;
+ private final Configuration cfg;
private final HideProject hideProject;
private PermissionBackend permissionBackend;
private NotesMigration migration;
@@ -75,7 +74,7 @@
Provider<CurrentUser> userProvider,
@PluginName String pluginName,
DeleteLog deleteLog,
- PluginConfigFactory cfgFactory,
+ Configuration cfg,
HideProject hideProject,
PermissionBackend permissionBackend,
NotesMigration migration) {
@@ -87,7 +86,7 @@
this.userProvider = userProvider;
this.pluginName = pluginName;
this.deleteLog = deleteLog;
- this.cfgFactory = cfgFactory;
+ this.cfg = cfg;
this.hideProject = hideProject;
this.permissionBackend = permissionBackend;
this.migration = migration;
@@ -146,10 +145,7 @@
boolean preserve = input != null && input.preserve;
Exception ex = null;
try {
- if (!preserve
- || !cfgFactory
- .getFromGerritConfig(pluginName)
- .getBoolean("hideProjectOnPreserve", false)) {
+ if (!preserve || !cfg.projectOnPreserveHidden()) {
if (!migration.disableChangeReviewDb()) {
dbHandler.delete(project);
}
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 97a4627..8b60ae3 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/HideProject.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/HideProject.java
@@ -15,7 +15,6 @@
package com.googlesource.gerrit.plugins.deleteproject;
import com.google.gerrit.common.data.AccessSection;
-import com.google.gerrit.extensions.annotations.PluginName;
import com.google.gerrit.extensions.client.ProjectState;
import com.google.gerrit.extensions.restapi.BadRequestException;
import com.google.gerrit.extensions.restapi.ResourceConflictException;
@@ -23,7 +22,6 @@
import com.google.gerrit.extensions.restapi.TopLevelResource;
import com.google.gerrit.extensions.restapi.UnprocessableEntityException;
import com.google.gerrit.reviewdb.client.Project;
-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;
@@ -38,26 +36,22 @@
@Singleton
class HideProject {
- private static String DEFAULT_PARENT_FOR_DELETED_PROJECTS = "Deleted-Projects";
private final MetaDataUpdate.Server metaDataUpdateFactory;
private final ProjectCache projectCache;
private final CreateProject.Factory createProjectFactory;
- private final PluginConfigFactory cfgFactory;
- private final String pluginName;
+ private final Configuration cfg;
@Inject
HideProject(
MetaDataUpdate.Server metaDataUpdateFactory,
ProjectCache projectCache,
CreateProject.Factory createProjectFactory,
- PluginConfigFactory cfgFactory,
- @PluginName String pluginName) {
+ Configuration cfg) {
this.metaDataUpdateFactory = metaDataUpdateFactory;
this.projectCache = projectCache;
this.createProjectFactory = createProjectFactory;
- this.cfgFactory = cfgFactory;
- this.pluginName = pluginName;
+ this.cfg = cfg;
}
public void apply(ProjectResource rsrc)
@@ -73,10 +67,7 @@
projectConfig.remove(as);
}
- String parentForDeletedProjects =
- cfgFactory
- .getFromGerritConfig(pluginName)
- .getString("parentForDeletedProjects", DEFAULT_PARENT_FOR_DELETED_PROJECTS);
+ String parentForDeletedProjects = cfg.getDeletedProjectsParent();
createProjectIfMissing(parentForDeletedProjects);
p.setParentName(parentForDeletedProjects);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/fs/FilesystemDeleteHandler.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/fs/FilesystemDeleteHandler.java
index c36ce1a..063a6f9 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/fs/FilesystemDeleteHandler.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/fs/FilesystemDeleteHandler.java
@@ -14,16 +14,15 @@
package com.googlesource.gerrit.plugins.deleteproject.fs;
-import com.google.gerrit.extensions.annotations.PluginName;
import com.google.gerrit.extensions.api.changes.NotifyHandling;
import com.google.gerrit.extensions.events.ProjectDeletedListener;
import com.google.gerrit.extensions.registration.DynamicSet;
import com.google.gerrit.reviewdb.client.Project;
-import com.google.gerrit.server.config.PluginConfigFactory;
import com.google.gerrit.server.git.GitRepositoryManager;
import com.google.gerrit.server.project.ProjectResource;
import com.google.inject.Inject;
import com.googlesource.gerrit.plugins.deleteproject.CannotDeleteProjectException;
+import com.googlesource.gerrit.plugins.deleteproject.Configuration;
import java.io.File;
import java.io.IOException;
import java.nio.file.FileVisitResult;
@@ -45,19 +44,16 @@
private final GitRepositoryManager repoManager;
private final DynamicSet<ProjectDeletedListener> deletedListener;
- private final PluginConfigFactory cfgFactory;
- private final String pluginName;
+ private final Configuration config;
@Inject
public FilesystemDeleteHandler(
GitRepositoryManager repoManager,
DynamicSet<ProjectDeletedListener> deletedListener,
- PluginConfigFactory cfgFactory,
- @PluginName String pluginName) {
+ Configuration config) {
this.repoManager = repoManager;
this.deletedListener = deletedListener;
- this.cfgFactory = cfgFactory;
- this.pluginName = pluginName;
+ this.config = config;
}
public void delete(Project project, boolean preserveGitRepository)
@@ -73,10 +69,7 @@
public void assertCanDelete(ProjectResource rsrc, boolean preserveGitRepository)
throws CannotDeleteProjectException {
- if (!preserveGitRepository
- && !cfgFactory
- .getFromGerritConfig(pluginName)
- .getBoolean("allowDeletionOfReposWithTags", true)) {
+ if (!preserveGitRepository && !config.deletionWithTagsAllowed()) {
assertHasNoTags(rsrc);
}
}
diff --git a/src/test/java/com/googlesource/gerrit/plugins/deleteproject/ConfigurationTest.java b/src/test/java/com/googlesource/gerrit/plugins/deleteproject/ConfigurationTest.java
new file mode 100644
index 0000000..3d069ef
--- /dev/null
+++ b/src/test/java/com/googlesource/gerrit/plugins/deleteproject/ConfigurationTest.java
@@ -0,0 +1,61 @@
+// Copyright (C) 2018 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.googlesource.gerrit.plugins.deleteproject;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.when;
+
+import com.google.gerrit.server.config.PluginConfig;
+import com.google.gerrit.server.config.PluginConfigFactory;
+import org.eclipse.jgit.lib.Config;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+@RunWith(MockitoJUnitRunner.class)
+public class ConfigurationTest {
+ private static final String CUSTOM_PARENT = "customParent";
+ private static final String PLUGIN_NAME = "delete-project";
+
+ @Mock private PluginConfigFactory pluginConfigFactoryMock;
+
+ private Configuration deleteConfig;
+
+ @Test
+ public void defaultValuesAreLoaded() {
+ when(pluginConfigFactoryMock.getFromGerritConfig(PLUGIN_NAME))
+ .thenReturn(new PluginConfig(PLUGIN_NAME, new Config()));
+ deleteConfig = new Configuration(pluginConfigFactoryMock, PLUGIN_NAME);
+
+ assertThat(deleteConfig.getDeletedProjectsParent()).isEqualTo("Deleted-Projects");
+ assertThat(deleteConfig.deletionWithTagsAllowed()).isTrue();
+ assertThat(deleteConfig.projectOnPreserveHidden()).isFalse();
+ }
+
+ @Test
+ public void customValuesAreLoaded() {
+ PluginConfig pluginConfig = new PluginConfig(PLUGIN_NAME, new Config());
+ pluginConfig.setString("parentForDeletedProjects", CUSTOM_PARENT);
+ pluginConfig.setBoolean("allowDeletionOfReposWithTags", false);
+ pluginConfig.setBoolean("hideProjectOnPreserve", true);
+ when(pluginConfigFactoryMock.getFromGerritConfig(PLUGIN_NAME)).thenReturn(pluginConfig);
+ deleteConfig = new Configuration(pluginConfigFactoryMock, PLUGIN_NAME);
+
+ assertThat(deleteConfig.getDeletedProjectsParent()).isEqualTo(CUSTOM_PARENT);
+ assertThat(deleteConfig.deletionWithTagsAllowed()).isFalse();
+ assertThat(deleteConfig.projectOnPreserveHidden()).isTrue();
+ }
+}
diff --git a/tools/bzl/maven_jar.bzl b/tools/bzl/maven_jar.bzl
new file mode 100644
index 0000000..2eabedb
--- /dev/null
+++ b/tools/bzl/maven_jar.bzl
@@ -0,0 +1 @@
+load("@com_googlesource_gerrit_bazlets//tools:maven_jar.bzl", "maven_jar")