CreateProject: Don't remove description when setting plugin configs
When a project is created, and plugin configs are given in the input, the project config endpoint is invoked on the newly created project to set the plugin configs. As a side effect of this, because nothing else is set in the config input, the description is removed (null means remove it). To fix this, explicitly also set the description on the config input. Also add a test that exposes the issue. Bug: Issue 11644 Change-Id: I9c2e370c783a29dfefd13215fcefd15747893ef5
This commit is contained in:
@@ -179,6 +179,7 @@ public class CreateProject
|
|||||||
if (input.pluginConfigValues != null) {
|
if (input.pluginConfigValues != null) {
|
||||||
ConfigInput in = new ConfigInput();
|
ConfigInput in = new ConfigInput();
|
||||||
in.pluginConfigValues = input.pluginConfigValues;
|
in.pluginConfigValues = input.pluginConfigValues;
|
||||||
|
in.description = args.projectDescription;
|
||||||
putConfig.get().apply(projectState, in);
|
putConfig.get().apply(projectState, in);
|
||||||
}
|
}
|
||||||
return Response.created(json.format(projectState));
|
return Response.created(json.format(projectState));
|
||||||
|
|||||||
@@ -35,15 +35,18 @@ import com.google.gerrit.acceptance.testsuite.project.ProjectOperations;
|
|||||||
import com.google.gerrit.acceptance.testsuite.request.RequestScopeOperations;
|
import com.google.gerrit.acceptance.testsuite.request.RequestScopeOperations;
|
||||||
import com.google.gerrit.common.Nullable;
|
import com.google.gerrit.common.Nullable;
|
||||||
import com.google.gerrit.common.data.Permission;
|
import com.google.gerrit.common.data.Permission;
|
||||||
|
import com.google.gerrit.extensions.annotations.Exports;
|
||||||
import com.google.gerrit.extensions.api.projects.BranchInput;
|
import com.google.gerrit.extensions.api.projects.BranchInput;
|
||||||
import com.google.gerrit.extensions.api.projects.CommentLinkInfo;
|
import com.google.gerrit.extensions.api.projects.CommentLinkInfo;
|
||||||
import com.google.gerrit.extensions.api.projects.ConfigInfo;
|
import com.google.gerrit.extensions.api.projects.ConfigInfo;
|
||||||
import com.google.gerrit.extensions.api.projects.ConfigInput;
|
import com.google.gerrit.extensions.api.projects.ConfigInput;
|
||||||
|
import com.google.gerrit.extensions.api.projects.ConfigValue;
|
||||||
import com.google.gerrit.extensions.api.projects.DescriptionInput;
|
import com.google.gerrit.extensions.api.projects.DescriptionInput;
|
||||||
import com.google.gerrit.extensions.api.projects.ProjectInput;
|
import com.google.gerrit.extensions.api.projects.ProjectInput;
|
||||||
import com.google.gerrit.extensions.client.InheritableBoolean;
|
import com.google.gerrit.extensions.client.InheritableBoolean;
|
||||||
import com.google.gerrit.extensions.client.ProjectState;
|
import com.google.gerrit.extensions.client.ProjectState;
|
||||||
import com.google.gerrit.extensions.client.SubmitType;
|
import com.google.gerrit.extensions.client.SubmitType;
|
||||||
|
import com.google.gerrit.extensions.common.ProjectInfo;
|
||||||
import com.google.gerrit.extensions.events.ProjectIndexedListener;
|
import com.google.gerrit.extensions.events.ProjectIndexedListener;
|
||||||
import com.google.gerrit.extensions.registration.DynamicSet;
|
import com.google.gerrit.extensions.registration.DynamicSet;
|
||||||
import com.google.gerrit.extensions.registration.RegistrationHandle;
|
import com.google.gerrit.extensions.registration.RegistrationHandle;
|
||||||
@@ -53,10 +56,13 @@ import com.google.gerrit.extensions.restapi.ResourceConflictException;
|
|||||||
import com.google.gerrit.extensions.restapi.UnprocessableEntityException;
|
import com.google.gerrit.extensions.restapi.UnprocessableEntityException;
|
||||||
import com.google.gerrit.reviewdb.client.Project;
|
import com.google.gerrit.reviewdb.client.Project;
|
||||||
import com.google.gerrit.reviewdb.client.RefNames;
|
import com.google.gerrit.reviewdb.client.RefNames;
|
||||||
|
import com.google.gerrit.server.config.ProjectConfigEntry;
|
||||||
import com.google.gerrit.server.group.SystemGroupBackend;
|
import com.google.gerrit.server.group.SystemGroupBackend;
|
||||||
import com.google.gerrit.server.index.IndexExecutor;
|
import com.google.gerrit.server.index.IndexExecutor;
|
||||||
import com.google.gerrit.server.project.CommentLinkInfoImpl;
|
import com.google.gerrit.server.project.CommentLinkInfoImpl;
|
||||||
|
import com.google.inject.AbstractModule;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
|
import com.google.inject.Module;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import org.eclipse.jgit.revwalk.RevCommit;
|
import org.eclipse.jgit.revwalk.RevCommit;
|
||||||
@@ -86,6 +92,18 @@ public class ProjectIT extends AbstractDaemonTest {
|
|||||||
private ProjectIndexedCounter projectIndexedCounter;
|
private ProjectIndexedCounter projectIndexedCounter;
|
||||||
private RegistrationHandle projectIndexedCounterHandle;
|
private RegistrationHandle projectIndexedCounterHandle;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Module createModule() {
|
||||||
|
return new AbstractModule() {
|
||||||
|
@Override
|
||||||
|
protected void configure() {
|
||||||
|
bind(ProjectConfigEntry.class)
|
||||||
|
.annotatedWith(Exports.named("test-plugin-key"))
|
||||||
|
.toInstance(new ProjectConfigEntry("Test Plugin Config Item", true));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void addProjectIndexedCounter() {
|
public void addProjectIndexedCounter() {
|
||||||
projectIndexedCounter = new ProjectIndexedCounter();
|
projectIndexedCounter = new ProjectIndexedCounter();
|
||||||
@@ -161,6 +179,17 @@ public class ProjectIT extends AbstractDaemonTest {
|
|||||||
eventRecorder.assertRefUpdatedEvents(name, "refs/heads/master", null, head);
|
eventRecorder.assertRefUpdatedEvents(name, "refs/heads/master", null, head);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void createProjectWithPluginConfigs() throws Exception {
|
||||||
|
String name = name("foo");
|
||||||
|
ProjectInput input = new ProjectInput();
|
||||||
|
input.name = name;
|
||||||
|
input.description = "foo description";
|
||||||
|
input.pluginConfigValues = newPluginConfigValues();
|
||||||
|
ProjectInfo info = gApi.projects().create(input).get();
|
||||||
|
assertThat(info.description).isEqualTo(input.description);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void createProjectWithMismatchedInput() throws Exception {
|
public void createProjectWithMismatchedInput() throws Exception {
|
||||||
ProjectInput in = new ProjectInput();
|
ProjectInput in = new ProjectInput();
|
||||||
@@ -683,6 +712,16 @@ public class ProjectIT extends AbstractDaemonTest {
|
|||||||
return setConfig(name, input);
|
return setConfig(name, input);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Map<String, Map<String, ConfigValue>> newPluginConfigValues() {
|
||||||
|
Map<String, Map<String, ConfigValue>> pluginConfigValues = new HashMap<>();
|
||||||
|
Map<String, ConfigValue> configValues = new HashMap<>();
|
||||||
|
ConfigValue value = new ConfigValue();
|
||||||
|
value.value = "true";
|
||||||
|
configValues.put("test-plugin-key", value);
|
||||||
|
pluginConfigValues.put("gerrit", configValues);
|
||||||
|
return pluginConfigValues;
|
||||||
|
}
|
||||||
|
|
||||||
private static class ProjectIndexedCounter implements ProjectIndexedListener {
|
private static class ProjectIndexedCounter implements ProjectIndexedListener {
|
||||||
private final AtomicLongMap<String> countsByProject = AtomicLongMap.create();
|
private final AtomicLongMap<String> countsByProject = AtomicLongMap.create();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user