Merge branch 'stable-3.2' into stable-3.3 * stable-3.2: Introduce an optional configuration to define a regex for naming rules Change-Id: Ia493f7b3b219547e8cc2197d99758e73ab476067
diff --git a/WORKSPACE b/WORKSPACE index 4d7507b..8ec9ae8 100644 --- a/WORKSPACE +++ b/WORKSPACE
@@ -3,7 +3,7 @@ load("//:bazlets.bzl", "load_bazlets") load_bazlets( - commit = "8dc0767541f16b35d2136eccebffd9ebe2b81133", + commit = "a511f3c90129d7de7ae67c0637001162980c08d5", #local_path = "/home/<user>/projects/bazlets", ) @@ -12,7 +12,7 @@ "gerrit_api", ) -gerrit_api() +gerrit_api(version = "3.3.0") load("//:external_plugin_deps.bzl", "external_plugin_deps")
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/LockUnlockProject.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/LockUnlockProject.java index 8904144..91f4d9e 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/LockUnlockProject.java +++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/LockUnlockProject.java
@@ -44,11 +44,11 @@ MetaDataUpdate md = metaDataUpdateFactory.create(key); ProjectConfig projectConfig = projectConfigFactory.read(md); - Project p = projectConfig.getProject(); - p.setState(ProjectState.READ_ONLY); + projectConfig.updateProject(project -> project.setState(ProjectState.READ_ONLY)); md.setMessage(String.format("Lock project while renaming the project %s\n", key.get())); projectConfig.commit(md); + Project p = projectConfig.getProject(); projectCache.evict(p); } @@ -56,11 +56,11 @@ MetaDataUpdate md = metaDataUpdateFactory.create(key); ProjectConfig projectConfig = projectConfigFactory.read(md); - Project p = projectConfig.getProject(); - p.setState(ProjectState.ACTIVE); + projectConfig.updateProject(project -> project.setState(ProjectState.ACTIVE)); md.setMessage(String.format("Unlock project after renaming the project to %s\n", key.get())); projectConfig.commit(md); + Project p = projectConfig.getProject(); projectCache.evict(p); } }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/conditions/RenamePreconditions.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/conditions/RenamePreconditions.java index cab2957..55ed291 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/conditions/RenamePreconditions.java +++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/conditions/RenamePreconditions.java
@@ -14,9 +14,11 @@ package com.googlesource.gerrit.plugins.renameproject.conditions; +import static com.google.gerrit.entities.RefNames.REFS_HEADS; +import static java.util.stream.Collectors.toSet; + import com.google.gerrit.entities.BranchNameKey; import com.google.gerrit.entities.Project; -import com.google.gerrit.entities.RefNames; import com.google.gerrit.extensions.common.ProjectInfo; import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.server.config.AllProjectsName; @@ -26,18 +28,16 @@ import com.google.gerrit.server.restapi.project.ListChildProjects; import com.google.gerrit.server.submit.MergeOpRepoManager; import com.google.gerrit.server.submit.SubmoduleConflictException; -import com.google.gerrit.server.submit.SubmoduleOp; +import com.google.gerrit.server.submit.SubscriptionGraph; import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.Singleton; import com.googlesource.gerrit.plugins.renameproject.CannotRenameProjectException; import java.io.IOException; -import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; import org.eclipse.jgit.errors.RepositoryNotFoundException; -import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Repository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -52,7 +52,7 @@ public final AllUsersName allUsersName; private final Provider<ListChildProjects> listChildProjectsProvider; private final GitRepositoryManager repoManager; - private final SubmoduleOp.Factory subOpFactory; + private final SubscriptionGraph.Factory subscriptionGraphFactory; private final Provider<MergeOpRepoManager> ormProvider; @Inject @@ -61,13 +61,13 @@ AllUsersName allUsersName, Provider<ListChildProjects> listChildProjectsProvider, GitRepositoryManager repoManager, - SubmoduleOp.Factory subOpFactory, + SubscriptionGraph.Factory subscriptionGraphFactory, Provider<MergeOpRepoManager> ormProvider) { this.allProjectsName = allProjectsName; this.allUsersName = allUsersName; this.listChildProjectsProvider = listChildProjectsProvider; this.repoManager = repoManager; - this.subOpFactory = subOpFactory; + this.subscriptionGraphFactory = subscriptionGraphFactory; this.ormProvider = ormProvider; } @@ -109,13 +109,13 @@ private void assertIsNotSubscribed(Project.NameKey key) throws CannotRenameProjectException { try (Repository repo = repoManager.openRepository(key); MergeOpRepoManager orm = ormProvider.get()) { - Set<BranchNameKey> branches = new HashSet<>(); - for (Ref ref : repo.getRefDatabase().getRefsByPrefix(RefNames.REFS_HEADS)) { - branches.add(BranchNameKey.create(key, ref.getName())); - } - SubmoduleOp sub = subOpFactory.create(branches, orm); + Set<BranchNameKey> branches = + repo.getRefDatabase().getRefsByPrefix(REFS_HEADS).stream() + .map(ref -> BranchNameKey.create(key, ref.getName())) + .collect(toSet()); + SubscriptionGraph sub = subscriptionGraphFactory.compute(branches, orm); for (BranchNameKey b : branches) { - if (!sub.superProjectSubscriptionsForSubmoduleBranch(b).isEmpty()) { + if (sub.hasSuperproject(b)) { String message = "Cannot rename a project subscribed to by the other projects"; log.error(message); throw new CannotRenameProjectException(message);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/DatabaseRenameHandler.java b/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/DatabaseRenameHandler.java index 7019327..7afbf11 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/DatabaseRenameHandler.java +++ b/src/main/java/com/googlesource/gerrit/plugins/renameproject/database/DatabaseRenameHandler.java
@@ -18,11 +18,11 @@ import com.google.common.collect.ImmutableSet; import com.google.gerrit.entities.Account; import com.google.gerrit.entities.Change; +import com.google.gerrit.entities.NotifyConfig.NotifyType; import com.google.gerrit.entities.Project; import com.google.gerrit.server.ServerInitiated; import com.google.gerrit.server.account.AccountState; import com.google.gerrit.server.account.AccountsUpdate; -import com.google.gerrit.server.account.ProjectWatches.NotifyType; import com.google.gerrit.server.account.ProjectWatches.ProjectWatchKey; import com.google.gerrit.server.git.GitRepositoryManager; import com.google.gerrit.server.notedb.ChangeNotes;
diff --git a/src/test/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProjectTest.java b/src/test/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProjectTest.java index f33829d..8330748 100644 --- a/src/test/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProjectTest.java +++ b/src/test/java/com/googlesource/gerrit/plugins/renameproject/RevertRenameProjectTest.java
@@ -126,6 +126,8 @@ } private void assertReverted() throws Exception { + evictCaches(); + Optional<ProjectState> oldProjectState = projectCache.get(oldProjectKey); assertThat(oldProjectState.isPresent()).isTrue(); @@ -137,6 +139,8 @@ } private void assertRenamed(Result result) throws Exception { + evictCaches(); + Optional<ProjectState> oldProjectState = projectCache.get(oldProjectKey); assertThat(oldProjectState.isPresent()).isFalse(); @@ -153,4 +157,9 @@ assertThat(queryProvider.get().byProject(oldProjectKey)).isEmpty(); } } + + private void evictCaches() { + projectCache.evict(oldProjectKey); + projectCache.evict(newProjectKey); + } }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/renameproject/SubmoduleUtil.java b/src/test/java/com/googlesource/gerrit/plugins/renameproject/SubmoduleUtil.java index be4dc37..fd59126 100644 --- a/src/test/java/com/googlesource/gerrit/plugins/renameproject/SubmoduleUtil.java +++ b/src/test/java/com/googlesource/gerrit/plugins/renameproject/SubmoduleUtil.java
@@ -16,8 +16,8 @@ import static com.google.common.truth.Truth.assertThat; -import com.google.gerrit.common.data.SubscribeSection; import com.google.gerrit.entities.Project.NameKey; +import com.google.gerrit.entities.SubscribeSection; import com.google.gerrit.server.git.meta.MetaDataUpdate; import com.google.gerrit.server.git.meta.MetaDataUpdate.Server; import com.google.gerrit.server.project.ProjectCache; @@ -54,12 +54,12 @@ throws Exception { try (MetaDataUpdate md = metaDataUpdateFactory.create(sub)) { md.setMessage("Added superproject subscription"); - SubscribeSection s; + SubscribeSection.Builder s; ProjectConfig pc = projectConfigFactory.read(md); if (pc.getSubscribeSections().containsKey(superName)) { - s = pc.getSubscribeSections().get(superName); + s = pc.getSubscribeSections().get(superName).toBuilder(); } else { - s = new SubscribeSection(superName); + s = SubscribeSection.builder(superName); } String refspec; if (superBranch == null) { @@ -72,7 +72,7 @@ } else { s.addMultiMatchRefSpec(refspec); } - pc.addSubscribeSection(s); + pc.addSubscribeSection(s.build()); ObjectId oldId = pc.getRevision(); ObjectId newId = pc.commit(md); assertThat(newId).isNotEqualTo(oldId);
diff --git a/src/test/java/com/googlesource/gerrit/plugins/renameproject/conditions/RenamePreconditionsTest.java b/src/test/java/com/googlesource/gerrit/plugins/renameproject/conditions/RenamePreconditionsTest.java index adc0791..049db6d 100644 --- a/src/test/java/com/googlesource/gerrit/plugins/renameproject/conditions/RenamePreconditionsTest.java +++ b/src/test/java/com/googlesource/gerrit/plugins/renameproject/conditions/RenamePreconditionsTest.java
@@ -30,7 +30,7 @@ import com.google.gerrit.server.project.ProjectState; import com.google.gerrit.server.restapi.project.ListChildProjects; import com.google.gerrit.server.submit.MergeOpRepoManager; -import com.google.gerrit.server.submit.SubmoduleOp; +import com.google.gerrit.server.submit.SubscriptionGraph; import com.google.inject.Provider; import com.googlesource.gerrit.plugins.renameproject.CannotRenameProjectException; import java.util.ArrayList; @@ -48,7 +48,6 @@ @Mock private Provider<ListChildProjects> listChildProjectsProvider; @Mock private GitRepositoryManager repoManager; - @Mock private SubmoduleOp.Factory subOpFactory; @Mock private Provider<MergeOpRepoManager> ormProvider; @Mock private RenamePreconditions preconditions; @Mock private ObjectDatabase objDb; @@ -56,6 +55,7 @@ @Mock private CurrentUser user; @Mock private Repository repo; @Mock private ListChildProjects listChildProjects; + @Mock private SubscriptionGraph.Factory subscriptionGraphFactory; private AllProjectsName allProjects; private AllUsersName allUsersName; @@ -76,7 +76,7 @@ allUsersName, listChildProjectsProvider, repoManager, - subOpFactory, + subscriptionGraphFactory, ormProvider); } @@ -89,7 +89,7 @@ @Test(expected = CannotRenameProjectException.class) public void testAssertCannotRenameAllProjects() throws Exception { - Project oldProject = new Project(allProjects); + Project oldProject = Project.builder(allProjects).build(); when(oldRsrc.getNameKey()).thenReturn(oldProject.getNameKey()); when(objDb.exists()).thenReturn(false); @@ -98,7 +98,7 @@ @Test(expected = CannotRenameProjectException.class) public void testAssertCannotRenameAllUsers() throws Exception { - Project oldProject = new Project(allUsersName); + Project oldProject = Project.builder(allUsersName).build(); when(oldRsrc.getNameKey()).thenReturn(oldProject.getNameKey()); when(objDb.exists()).thenReturn(false); @@ -107,7 +107,7 @@ @Test(expected = CannotRenameProjectException.class) public void testAssertCannotRenameHasChildren() throws Exception { - Project oldProject = new Project(Project.nameKey("oldProject")); + Project oldProject = Project.builder(Project.nameKey("oldProject")).build(); when(oldRsrc.getNameKey()).thenReturn(oldProject.getNameKey()); when(objDb.exists()).thenReturn(false);