diff options
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.java | 115 |
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"); - } } |