summaryrefslogtreecommitdiffstats
path: root/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/SetProjectCommand.java
diff options
context:
space:
mode:
Diffstat (limited to 'gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/SetProjectCommand.java')
-rw-r--r--gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/SetProjectCommand.java115
1 files changed, 60 insertions, 55 deletions
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/SetProjectCommand.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/SetProjectCommand.java
index 9143f5b1de..8c06c97d41 100644
--- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/SetProjectCommand.java
+++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/commands/SetProjectCommand.java
@@ -17,12 +17,14 @@ package com.google.gerrit.sshd.commands;
import com.google.gerrit.common.data.GlobalCapability;
import com.google.gerrit.extensions.annotations.RequiresCapability;
import com.google.gerrit.reviewdb.client.Project;
+import com.google.gerrit.reviewdb.client.Project.InheritableBoolean;
import com.google.gerrit.reviewdb.client.Project.State;
import com.google.gerrit.reviewdb.client.Project.SubmitType;
import com.google.gerrit.server.git.MetaDataUpdate;
import com.google.gerrit.server.git.ProjectConfig;
import com.google.gerrit.server.project.ProjectCache;
import com.google.gerrit.server.project.ProjectControl;
+import com.google.gerrit.sshd.CommandMetaData;
import com.google.gerrit.sshd.SshCommand;
import com.google.inject.Inject;
@@ -36,6 +38,7 @@ import org.slf4j.LoggerFactory;
import java.io.IOException;
@RequiresCapability(GlobalCapability.ADMINISTRATE_SERVER)
+@CommandMetaData(name = "set-project", descr = "Change a project's settings")
final class SetProjectCommand extends SshCommand {
private static final Logger log = LoggerFactory
.getLogger(SetProjectCommand.class);
@@ -50,29 +53,57 @@ final class SetProjectCommand extends SshCommand {
+ "(default: MERGE_IF_NECESSARY)")
private SubmitType submitType;
+ @Option(name = "--contributor-agreements", usage = "if contributor agreement is required")
+ private InheritableBoolean contributorAgreements;
+
+ @Option(name = "--signed-off-by", usage = "if signed-off-by is required")
+ private InheritableBoolean signedOffBy;
+
+ @Option(name = "--content-merge", usage = "allow automatic conflict resolving within files")
+ private InheritableBoolean contentMerge;
+
+ @Option(name = "--change-id", usage = "if change-id is required")
+ private InheritableBoolean requireChangeID;
+
@Option(name = "--use-contributor-agreements", aliases = {"--ca"}, usage = "if contributor agreement is required")
- private Boolean contributorAgreements;
+ void setUseContributorArgreements(boolean on) {
+ contributorAgreements = InheritableBoolean.TRUE;
+ }
@Option(name = "--no-contributor-agreements", aliases = {"--nca"}, usage = "if contributor agreement is not required")
- private Boolean noContributorAgreements;
+ void setNoContributorArgreements(boolean on) {
+ contributorAgreements = InheritableBoolean.FALSE;
+ }
@Option(name = "--use-signed-off-by", aliases = {"--so"}, usage = "if signed-off-by is required")
- private Boolean signedOffBy;
+ void setUseSignedOffBy(boolean on) {
+ signedOffBy = InheritableBoolean.TRUE;
+ }
@Option(name = "--no-signed-off-by", aliases = {"--nso"}, usage = "if signed-off-by is not required")
- private Boolean noSignedOffBy;
+ void setNoSignedOffBy(boolean on) {
+ signedOffBy = InheritableBoolean.FALSE;
+ }
@Option(name = "--use-content-merge", usage = "allow automatic conflict resolving within files")
- private Boolean contentMerge;
+ void setUseContentMerge(boolean on) {
+ contentMerge = InheritableBoolean.TRUE;
+ }
@Option(name = "--no-content-merge", usage = "don't allow automatic conflict resolving within files")
- private Boolean noContentMerge;
+ void setNoContentMerge(boolean on) {
+ contentMerge = InheritableBoolean.FALSE;
+ }
@Option(name = "--require-change-id", aliases = {"--id"}, usage = "if change-id is required")
- private Boolean requireChangeID;
+ void setRequireChangeId(boolean on) {
+ requireChangeID = InheritableBoolean.TRUE;
+ }
@Option(name = "--no-change-id", aliases = {"--nid"}, usage = "if change-id is not required")
- private Boolean noRequireChangeID;
+ void setNoChangeId(boolean on) {
+ requireChangeID = InheritableBoolean.FALSE;
+ }
@Option(name = "--project-state", aliases = {"--ps"}, usage = "project's visibility state")
private State state;
@@ -85,7 +116,6 @@ final class SetProjectCommand extends SshCommand {
@Override
protected void run() throws Failure {
- validate();
Project ctlProject = projectControl.getProject();
Project.NameKey nameKey = ctlProject.getNameKey();
String name = ctlProject.getName();
@@ -97,38 +127,27 @@ final class SetProjectCommand extends SshCommand {
ProjectConfig config = ProjectConfig.read(md);
Project project = config.getProject();
- project.setRequireChangeID(requireChangeID != null ? requireChangeID
- : project.isRequireChangeID());
-
- project.setRequireChangeID(noRequireChangeID != null
- ? !noRequireChangeID : project.isRequireChangeID());
-
- project.setSubmitType(submitType != null ? submitType : project
- .getSubmitType());
-
- project.setUseContentMerge(contentMerge != null ? contentMerge
- : project.isUseContentMerge());
-
- project.setUseContentMerge(noContentMerge != null ? !noContentMerge
- : project.isUseContentMerge());
-
- project.setUseContributorAgreements(contributorAgreements != null
- ? contributorAgreements : project.isUseContributorAgreements());
-
- project.setUseContributorAgreements(noContributorAgreements != null
- ? !noContributorAgreements : project.isUseContributorAgreements());
-
- project.setUseSignedOffBy(signedOffBy != null ? signedOffBy : project
- .isUseSignedOffBy());
-
- project.setUseContentMerge(noSignedOffBy != null ? !noSignedOffBy
- : project.isUseContentMerge());
-
- project.setDescription(projectDescription != null ? projectDescription
- : project.getDescription());
-
- project.setState(state != null ? state : project.getState());
-
+ if (requireChangeID != null) {
+ project.setRequireChangeID(requireChangeID);
+ }
+ if (submitType != null) {
+ project.setSubmitType(submitType);
+ }
+ if (contentMerge != null) {
+ project.setUseContentMerge(contentMerge);
+ }
+ if (contributorAgreements != null) {
+ project.setUseContributorAgreements(contributorAgreements);
+ }
+ if (signedOffBy != null) {
+ project.setUseSignedOffBy(signedOffBy);
+ }
+ if (projectDescription != null) {
+ project.setDescription(projectDescription);
+ }
+ if (state != null) {
+ project.setState(state);
+ }
md.setMessage("Project settings updated");
config.commit(md);
} finally {
@@ -154,18 +173,4 @@ final class SetProjectCommand extends SshCommand {
throw new UnloggedFailure(1, err.toString());
}
}
-
- private void validate() throws UnloggedFailure {
- checkExclusivity(contentMerge, "--use-content-merge",
- noContentMerge, "--no-content-merge");
-
- checkExclusivity(contributorAgreements, "--use-contributor-agreements",
- noContributorAgreements, "--no-contributor-agreements");
-
- checkExclusivity(signedOffBy, "--use-signed-off-by",
- noSignedOffBy, "--no-signed-off-by");
-
- checkExclusivity(requireChangeID, "--require-change-id",
- noRequireChangeID, "--no-change-id");
- }
}