SetParent: Explicitly set to All-Projects when not specified

Change-Id: I694b7d6099fc65706ca6e07d8ea2870c900e8f87
This commit is contained in:
David Pursehouse
2016-02-18 11:31:43 +09:00
parent 7e6ca5e84f
commit c335b6808c
2 changed files with 24 additions and 7 deletions

View File

@@ -20,6 +20,7 @@ import static com.google.gerrit.acceptance.GitUtil.createProject;
import com.google.gerrit.acceptance.AbstractDaemonTest;
import com.google.gerrit.acceptance.RestResponse;
import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.server.config.AllProjectsNameProvider;
import com.google.gerrit.server.project.SetParent;
import org.apache.http.HttpStatus;
@@ -53,6 +54,19 @@ public class SetParentIT extends AbstractDaemonTest {
newGson().fromJson(r.getReader(), String.class);
assertThat(newParent).isEqualTo(parent);
r.consume();
// When the parent name is not explicitly set, it should be
// set to "All-Projects".
r = adminSession.put("/projects/" + project.get() + "/parent",
newParentInput(null));
assertThat(r.getStatusCode()).isEqualTo(HttpStatus.SC_OK);
r.consume();
r = adminSession.get("/projects/" + project.get() + "/parent");
assertThat(r.getStatusCode()).isEqualTo(HttpStatus.SC_OK);
newParent = newGson().fromJson(r.getReader(), String.class);
assertThat(newParent).isEqualTo(AllProjectsNameProvider.DEFAULT);
r.consume();
}
@Test

View File

@@ -14,6 +14,8 @@
package com.google.gerrit.server.project;
import static com.google.common.base.Preconditions.checkNotNull;
import com.google.common.base.MoreObjects;
import com.google.common.base.Predicate;
import com.google.common.base.Strings;
@@ -64,21 +66,21 @@ public class SetParent implements RestModifyView<ProjectResource, Input> {
throws AuthException, ResourceConflictException,
ResourceNotFoundException, UnprocessableEntityException, IOException {
ProjectControl ctl = rsrc.getControl();
validateParentUpdate(ctl, input.parent, true);
String parentName = MoreObjects.firstNonNull(
Strings.emptyToNull(input.parent), allProjects.get());
validateParentUpdate(ctl, parentName, true);
IdentifiedUser user = (IdentifiedUser) ctl.getCurrentUser();
try {
MetaDataUpdate md = updateFactory.create(rsrc.getNameKey());
try {
ProjectConfig config = ProjectConfig.read(md);
Project project = config.getProject();
project.setParentName(Strings.emptyToNull(input.parent));
project.setParentName(parentName);
String msg = Strings.emptyToNull(input.commitMessage);
if (msg == null) {
msg = String.format(
"Changed parent to %s.\n",
MoreObjects.firstNonNull(project.getParentName(),
allProjects.get()));
"Changed parent to %s.\n", parentName);
} else if (!msg.endsWith("\n")) {
msg += "\n";
}
@@ -87,8 +89,9 @@ public class SetParent implements RestModifyView<ProjectResource, Input> {
config.commit(md);
cache.evict(ctl.getProject());
Project.NameKey parentName = project.getParent(allProjects);
return parentName != null ? parentName.get() : "";
Project.NameKey parent = project.getParent(allProjects);
checkNotNull(parent);
return parent.get();
} finally {
md.close();
}