Merge branch 'stable-3.0' into stable-3.1 * stable-3.0: Format Java files with google-java-format Change-Id: I2cf5df394af5b52a96f04ad529343c560f1698ef
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;