Merge branch 'stable-3.0' into stable-3.1
* stable-3.0:
Documentation: Fix parentForDeletedProjects in config.md
Bump Bazel version to 2.2.0
Bump required Bazel version to 2.1.0
Upgrade bazlets to latest stable-2.16 to build with 2.16.16 API
Documentation: Refactor to match other plugin documentation
Add an empty tools/BUILD file explicitly for Bazel
Upgrade bazlets to latest stable-2.16
Upgrade bazlets to latest stable-2.16
Upgrade bazlets to latest stable-2.15
Upgrade bazlets to latest stable-2.14
config.md: Correct formatting of config values
Change-Id: Ib60d65a8d278e97e0eb4d98dc115ced9500b7afc
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/CannotDeleteProjectException.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/CannotDeleteProjectException.java
index 3cf3912..04e98bf 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/CannotDeleteProjectException.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/CannotDeleteProjectException.java
@@ -22,7 +22,7 @@
super(message);
}
- public CannotDeleteProjectException(Exception e) {
- super(e);
+ public CannotDeleteProjectException(String message, Throwable why) {
+ super(message, why);
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteLog.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteLog.java
index d3cef9c..5382067 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteLog.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteLog.java
@@ -16,9 +16,9 @@
import com.google.common.collect.ListMultimap;
import com.google.common.collect.MultimapBuilder;
+import com.google.gerrit.entities.Project;
import com.google.gerrit.extensions.systemstatus.ServerInformation;
import com.google.gerrit.json.OutputFormat;
-import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.server.AuditEvent;
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.audit.AuditService;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeletePreconditions.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeletePreconditions.java
index 5bf75c5..05842c4 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeletePreconditions.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeletePreconditions.java
@@ -14,27 +14,25 @@
package com.googlesource.gerrit.plugins.deleteproject;
-import static com.google.gerrit.reviewdb.client.RefNames.REFS_HEADS;
-import static com.google.gerrit.reviewdb.client.RefNames.REFS_TAGS;
+import static com.google.gerrit.entities.RefNames.REFS_HEADS;
+import static com.google.gerrit.entities.RefNames.REFS_TAGS;
import static com.googlesource.gerrit.plugins.deleteproject.DeleteOwnProjectCapability.DELETE_OWN_PROJECT;
import static com.googlesource.gerrit.plugins.deleteproject.DeleteProjectCapability.DELETE_PROJECT;
import static java.util.stream.Collectors.toSet;
import com.google.common.collect.Iterables;
+import com.google.gerrit.entities.BranchNameKey;
+import com.google.gerrit.entities.Project;
import com.google.gerrit.exceptions.StorageException;
import com.google.gerrit.extensions.annotations.PluginName;
import com.google.gerrit.extensions.api.access.PluginPermission;
import com.google.gerrit.extensions.common.ProjectInfo;
import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.extensions.restapi.ResourceConflictException;
-import com.google.gerrit.extensions.restapi.RestApiException;
-import com.google.gerrit.reviewdb.client.Branch;
-import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.git.GitRepositoryManager;
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.permissions.ProjectPermission;
import com.google.gerrit.server.project.ProjectResource;
import com.google.gerrit.server.query.change.ChangeData;
@@ -130,22 +128,23 @@
}
} catch (StorageException e) {
throw new CannotDeleteProjectException(
- String.format("Unable to verify if '%s' has open changes.", projectNameKey.get()));
+ String.format("Unable to verify if '%s' has open changes.", projectNameKey.get()), e);
}
}
}
private void assertHasNoChildProjects(ProjectResource rsrc) throws CannotDeleteProjectException {
+ List<ProjectInfo> children;
try {
- List<ProjectInfo> children = listChildProjectsProvider.get().withLimit(1).apply(rsrc);
- if (!children.isEmpty()) {
- throw new CannotDeleteProjectException(
- "Cannot delete project because it has at least one child: "
- + Iterables.getOnlyElement(children).name);
- }
- } catch (StorageException | PermissionBackendException | RestApiException e) {
+ children = listChildProjectsProvider.get().withLimit(1).apply(rsrc).value();
+ } catch (Exception e) {
throw new CannotDeleteProjectException(
- String.format("Unable to verify if '%s' has children projects.", rsrc.getName()));
+ String.format("Unable to verify if '%s' has children projects.", rsrc.getName()), e);
+ }
+ if (!children.isEmpty()) {
+ throw new CannotDeleteProjectException(
+ "Cannot delete project because it has at least one child: "
+ + Iterables.getOnlyElement(children).name);
}
}
@@ -153,12 +152,12 @@
throws CannotDeleteProjectException {
try (Repository repo = repoManager.openRepository(projectNameKey);
MergeOpRepoManager mergeOp = mergeOpProvider.get()) {
- Set<Branch.NameKey> branches =
+ Set<BranchNameKey> branches =
repo.getRefDatabase().getRefsByPrefix(REFS_HEADS).stream()
- .map(ref -> Branch.nameKey(projectNameKey, ref.getName()))
+ .map(ref -> BranchNameKey.create(projectNameKey, ref.getName()))
.collect(toSet());
SubmoduleOp sub = subOpFactory.create(branches, mergeOp);
- for (Branch.NameKey b : branches) {
+ for (BranchNameKey b : branches) {
if (!sub.superProjectSubscriptionsForSubmoduleBranch(b).isEmpty()) {
throw new CannotDeleteProjectException("Project is subscribed by other projects.");
}
@@ -167,7 +166,7 @@
// we're trying to delete the repository,
// so this exception should not stop us
} catch (IOException | SubmoduleException e) {
- throw new CannotDeleteProjectException("Project is subscribed by other projects.");
+ throw new CannotDeleteProjectException("Project is subscribed by other projects.", e);
}
}
@@ -185,7 +184,8 @@
String.format("Project %s has tags", projectNameKey));
}
} catch (IOException e) {
- throw new CannotDeleteProjectException(e);
+ throw new CannotDeleteProjectException(
+ String.format("Unable to verify if project %s has tags", projectNameKey), e);
}
}
}
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 1590862..4b36826 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteProject.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/DeleteProject.java
@@ -14,11 +14,11 @@
package com.googlesource.gerrit.plugins.deleteproject;
+import com.google.gerrit.entities.Project;
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
import com.google.gerrit.extensions.restapi.Response;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.extensions.restapi.RestModifyView;
-import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.project.ProjectResource;
@@ -70,7 +70,7 @@
}
@Override
- public Object apply(ProjectResource rsrc, Input input) throws IOException, RestApiException {
+ public Response<?> apply(ProjectResource rsrc, Input input) throws IOException, RestApiException {
preConditions.assertDeletePermission(rsrc);
preConditions.assertCanBeDeleted(rsrc, input);
@@ -88,7 +88,7 @@
try {
fsHandler.delete(project, preserve);
} catch (RepositoryNotFoundException e) {
- throw new ResourceNotFoundException();
+ throw new ResourceNotFoundException(project.getName(), e);
}
cacheHandler.delete(project);
} else {
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 5ed2efe..c5bf8ce 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/HideProject.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/HideProject.java
@@ -15,13 +15,13 @@
package com.googlesource.gerrit.plugins.deleteproject;
import com.google.gerrit.common.data.AccessSection;
+import com.google.gerrit.entities.Project;
import com.google.gerrit.extensions.client.ProjectState;
import com.google.gerrit.extensions.restapi.IdString;
import com.google.gerrit.extensions.restapi.ResourceConflictException;
import com.google.gerrit.extensions.restapi.ResourceNotFoundException;
import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.extensions.restapi.TopLevelResource;
-import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.server.git.meta.MetaDataUpdate;
import com.google.gerrit.server.permissions.PermissionBackendException;
import com.google.gerrit.server.project.ProjectCache;
@@ -77,7 +77,7 @@
projectConfig.commit(md);
projectCache.evict(projectConfig.getProject());
} catch (RepositoryNotFoundException e) {
- throw new ResourceNotFoundException();
+ throw new ResourceNotFoundException(rsrc.getNameKey().get(), e);
} catch (ConfigInvalidException e) {
throw new ResourceConflictException(e.getMessage());
}
@@ -89,7 +89,7 @@
createProject.apply(TopLevelResource.INSTANCE, IdString.fromDecoded(projectName), null);
} catch (RestApiException | ConfigInvalidException | PermissionBackendException e) {
throw new ResourceConflictException(
- String.format("Failed to create project %s", projectName));
+ String.format("Failed to create project %s", projectName), e);
}
}
}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/ProtectedProjects.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/ProtectedProjects.java
index c1e697d..75ba2ba 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/ProtectedProjects.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/ProtectedProjects.java
@@ -15,7 +15,7 @@
package com.googlesource.gerrit.plugins.deleteproject;
import com.google.common.annotations.VisibleForTesting;
-import com.google.gerrit.reviewdb.client.Project;
+import com.google.gerrit.entities.Project;
import com.google.gerrit.server.config.AllProjectsName;
import com.google.gerrit.server.config.AllProjectsNameProvider;
import com.google.gerrit.server.config.AllUsersName;
diff --git a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/cache/CacheDeleteHandler.java b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/cache/CacheDeleteHandler.java
index bdf3ff5..db01e18 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/deleteproject/cache/CacheDeleteHandler.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/deleteproject/cache/CacheDeleteHandler.java
@@ -14,7 +14,7 @@
package com.googlesource.gerrit.plugins.deleteproject.cache;
-import com.google.gerrit.reviewdb.client.Project;
+import com.google.gerrit.entities.Project;
import com.google.gerrit.server.project.ProjectCache;
import com.google.inject.Inject;
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 a54b8c0..9ee3cbb 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
@@ -18,9 +18,9 @@
import static java.util.stream.Collectors.toList;
import com.google.common.flogger.FluentLogger;
-import com.google.gerrit.reviewdb.client.Account;
-import com.google.gerrit.reviewdb.client.Change;
-import com.google.gerrit.reviewdb.client.Project;
+import com.google.gerrit.entities.Account;
+import com.google.gerrit.entities.Change;
+import com.google.gerrit.entities.Project;
import com.google.gerrit.server.StarredChangesUtil;
import com.google.gerrit.server.UserInitiated;
import com.google.gerrit.server.account.AccountState;
@@ -81,12 +81,12 @@
return changeIds;
}
- private void deleteChanges(Project.NameKey project, List<Change.Id> changeIds) {
+ private void deleteChanges(List<Change.Id> changeIds) {
for (Change.Id id : changeIds) {
try {
- starredChangesUtil.unstarAll(project, id);
- } catch (NoSuchChangeException e) {
+ starredChangesUtil.unstarAllForChangeDeletion(id);
+ } catch (NoSuchChangeException | IOException e) {
// we can ignore the exception during delete
}
// Delete from the secondary index
@@ -96,11 +96,11 @@
public void atomicDelete(Project project, List<Change.Id> changeIds) {
- deleteChanges(project.getNameKey(), changeIds);
+ deleteChanges(changeIds);
for (AccountState a : accountQueryProvider.get().byWatchedProject(project.getNameKey())) {
- Account.Id accountId = a.getAccount().getId();
- for (ProjectWatchKey watchKey : a.getProjectWatches().keySet()) {
+ Account.Id accountId = a.account().id();
+ for (ProjectWatchKey watchKey : a.projectWatches().keySet()) {
if (project.getNameKey().equals(watchKey.project())) {
try {
accountsUpdateProvider
@@ -112,7 +112,7 @@
} catch (IOException | ConfigInvalidException e) {
log.atSevere().withCause(e).log(
"Removing watch entry for user %s in project %s failed.",
- a.getUserName(), project.getName());
+ a.userName().orElse("[unknown]"), project.getName());
}
}
}
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 ac50295..a5436c1 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
@@ -18,10 +18,10 @@
import com.google.common.flogger.FluentLogger;
import com.google.common.io.MoreFiles;
+import com.google.gerrit.entities.Project;
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.git.GitRepositoryManager;
import com.google.inject.Inject;
import com.googlesource.gerrit.plugins.deleteproject.Configuration;
diff --git a/src/test/java/com/googlesource/gerrit/plugins/deleteproject/DeletePreconditionsTest.java b/src/test/java/com/googlesource/gerrit/plugins/deleteproject/DeletePreconditionsTest.java
index 44bcc8c..235dc3c 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/deleteproject/DeletePreconditionsTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/deleteproject/DeletePreconditionsTest.java
@@ -24,12 +24,13 @@
import static org.mockito.Mockito.when;
import com.google.common.collect.ImmutableList;
+import com.google.gerrit.entities.Project;
import com.google.gerrit.exceptions.StorageException;
import com.google.gerrit.extensions.api.access.PluginPermission;
import com.google.gerrit.extensions.common.ProjectInfo;
import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.extensions.restapi.ResourceConflictException;
-import com.google.gerrit.reviewdb.client.Project;
+import com.google.gerrit.extensions.restapi.Response;
import com.google.gerrit.server.CurrentUser;
import com.google.gerrit.server.git.GitRepositoryManager;
import com.google.gerrit.server.permissions.GlobalPermission;
@@ -137,7 +138,7 @@
ListChildProjects childProjects = mock(ListChildProjects.class);
when(listChildProjectsProvider.get()).thenReturn(childProjects);
when(childProjects.withLimit(1)).thenReturn(childProjects);
- when(childProjects.apply(rsrc)).thenReturn(ImmutableList.of(new ProjectInfo()));
+ when(childProjects.apply(rsrc)).thenReturn(Response.ok(ImmutableList.of(new ProjectInfo())));
ResourceConflictException thrown =
assertThrows(
ResourceConflictException.class,
diff --git a/src/test/java/com/googlesource/gerrit/plugins/deleteproject/DeleteProjectIT.java b/src/test/java/com/googlesource/gerrit/plugins/deleteproject/DeleteProjectIT.java
index 8795fde..d83fac7 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/deleteproject/DeleteProjectIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/deleteproject/DeleteProjectIT.java
@@ -15,7 +15,9 @@
package com.googlesource.gerrit.plugins.deleteproject;
import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth.assertWithMessage;
import static com.google.gerrit.acceptance.GitUtil.pushHead;
+import static com.google.gerrit.acceptance.testsuite.project.TestProjectUpdate.allow;
import static com.google.gerrit.server.group.SystemGroupBackend.REGISTERED_USERS;
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
@@ -26,12 +28,13 @@
import com.google.gerrit.acceptance.TestPlugin;
import com.google.gerrit.acceptance.UseLocalDisk;
import com.google.gerrit.acceptance.UseSsh;
+import com.google.gerrit.acceptance.testsuite.project.ProjectOperations;
import com.google.gerrit.acceptance.testsuite.request.RequestScopeOperations;
import com.google.gerrit.common.data.Permission;
+import com.google.gerrit.entities.Project;
+import com.google.gerrit.entities.RefNames;
import com.google.gerrit.extensions.client.ProjectState;
import com.google.gerrit.extensions.restapi.RestApiException;
-import com.google.gerrit.reviewdb.client.Project;
-import com.google.gerrit.reviewdb.client.RefNames;
import com.google.gerrit.server.project.ProjectConfig;
import com.google.inject.Inject;
import com.googlesource.gerrit.plugins.deleteproject.DeleteProject.Input;
@@ -62,6 +65,7 @@
private static final String ARCHIVE_FOLDER = "archiveFolder";
private static final String PARENT_FOLDER = "parentFolder";
+ @Inject private ProjectOperations projectOperations;
@Inject private RequestScopeOperations requestScopeOperations;
private File archiveFolder;
@@ -208,7 +212,11 @@
@UseLocalDisk
@GerritConfig(name = "plugin.delete-project.allowDeletionOfReposWithTags", value = "false")
public void testDeleteProjWithTags() throws Exception {
- grant(project, "refs/tags/*", Permission.CREATE, false, REGISTERED_USERS);
+ projectOperations
+ .project(project)
+ .forUpdate()
+ .add(allow(Permission.CREATE).ref("refs/tags/*").group(REGISTERED_USERS))
+ .update();
pushTagOldCommitNotForce();
String cmd = createDeleteCommand(project.get());
@@ -298,13 +306,17 @@
commitBuilder().ident(user.newIdent()).message("subject (" + System.nanoTime() + ")").create();
String tagName = "v1_" + System.nanoTime();
- grant(project, "refs/for/refs/heads/master", Permission.SUBMIT, false, REGISTERED_USERS);
+ projectOperations
+ .project(project)
+ .forUpdate()
+ .add(allow(Permission.SUBMIT).ref("refs/for/refs/heads/master").group(REGISTERED_USERS))
+ .update();
pushHead(testRepo, "refs/for/master%submit");
String tagRef = RefNames.REFS_TAGS + tagName;
PushResult r = pushHead(testRepo, tagRef, false, false);
RemoteRefUpdate refUpdate = r.getRemoteUpdate(tagRef);
- assertThat(refUpdate.getStatus()).named("LIGHTWEIGHT").isEqualTo(Status.OK);
+ assertWithMessage("LIGHTWEIGHT").that(refUpdate.getStatus()).isEqualTo(Status.OK);
}
private boolean isEmpty(Path dir) throws IOException {
diff --git a/src/test/java/com/googlesource/gerrit/plugins/deleteproject/ProtectedProjectsTest.java b/src/test/java/com/googlesource/gerrit/plugins/deleteproject/ProtectedProjectsTest.java
index cc6e1f1..c4c370a 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/deleteproject/ProtectedProjectsTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/deleteproject/ProtectedProjectsTest.java
@@ -18,7 +18,7 @@
import static org.mockito.Mockito.when;
import com.google.common.collect.ImmutableList;
-import com.google.gerrit.reviewdb.client.Project;
+import com.google.gerrit.entities.Project;
import com.google.gerrit.server.config.AllProjectsName;
import com.google.gerrit.server.config.AllProjectsNameProvider;
import com.google.gerrit.server.config.AllUsersName;
diff --git a/src/test/java/com/googlesource/gerrit/plugins/deleteproject/fs/FilesystemDeleteHandlerTest.java b/src/test/java/com/googlesource/gerrit/plugins/deleteproject/fs/FilesystemDeleteHandlerTest.java
index de59ac3..ce291e4 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/deleteproject/fs/FilesystemDeleteHandlerTest.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/deleteproject/fs/FilesystemDeleteHandlerTest.java
@@ -17,9 +17,9 @@
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.when;
+import com.google.gerrit.entities.Project;
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.git.GitRepositoryManager;
import com.googlesource.gerrit.plugins.deleteproject.Configuration;
import java.io.IOException;