You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by kw...@apache.org on 2025/08/11 08:54:57 UTC
(maven-scm) 01/02: Rework sign option for Git tag/commit
This is an automated email from the ASF dual-hosted git repository.
kwin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-scm.git
commit b1aa1f253c654b24985814dcfef7b38c5a542469
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Thu Aug 7 20:26:12 2025 +0200
Rework sign option for Git tag/commit
Use tri-state for signing/not-signing/default (from config)
Don't support signing with JGit yet (requires additional dependencies)
Overwrite global sign settings during test execution
This closes #1292
---
.../org/apache/maven/scm/CommandParameter.java | 9 ++-
.../org/apache/maven/scm/CommandParameters.java | 51 +++++++++++-
.../org/apache/maven/scm/ScmTagParameters.java | 45 ++++++++---
.../command/checkin/AbstractCheckInCommand.java | 26 +++++-
.../maven/scm/command/tag/AbstractTagCommand.java | 5 ++
.../org/apache/maven/scm/plugin/CheckinMojo.java | 27 ++++++-
.../java/org/apache/maven/scm/plugin/TagMojo.java | 37 ++++-----
.../apache/maven/scm/plugin/BranchMojoTest.java | 8 +-
.../apache/maven/scm/plugin/ChangeLogMojoTest.java | 10 +--
.../apache/maven/scm/plugin/CheckoutMojoTest.java | 12 +--
.../apache/maven/scm/plugin/ExportMojoTest.java | 10 +--
.../apache/maven/scm/plugin/StatusMojoTest.java | 4 +-
.../org/apache/maven/scm/plugin/TagMojoTest.java | 10 +--
.../org/apache/maven/scm/plugin/UntagMojoTest.java | 8 +-
.../apache/maven/scm/plugin/UpdateMojoTest.java | 6 +-
.../gitexe/command/checkin/GitCheckInCommand.java | 39 ++++++++-
.../git/gitexe/command/tag/GitTagCommand.java | 26 +++---
.../scm/provider/git/gitexe/GpgTestUtils.java | 93 ++++++++++++++++++++++
.../changelog/GitExeChangeLogCommandTckTest.java | 13 +++
.../checkin/GitCheckInCommandNoBranchTest.java | 2 +-
.../command/checkin/GitCheckInCommandTest.java | 53 +++++++++++-
.../GitExeCheckOutCommandNoBranchTest.java | 4 +-
.../gitexe/command/info/GitInfoCommandTest.java | 8 +-
.../git/gitexe/command/tag/GitTagCommandTest.java | 18 ++---
.../src/test/resources/gpg/john-doe-secret-key.asc | 56 +++++++++++++
.../maven/scm/provider/git/GitScmTestUtils.java | 18 +++--
.../command/checkin/GitCheckInCommandTckTest.java | 2 -
.../jgit/command/checkin/JGitCheckInCommand.java | 3 +-
.../git/jgit/command/tag/JGitTagCommand.java | 1 -
.../JGitCheckInCommandCommitterAuthorTckTest.java | 1 -
.../remoteinfo/SvnRemoteInfoCommandTest.java | 4 +-
.../java/org/apache/maven/scm/ScmTestCase.java | 2 +-
.../tck/command/branch/BranchCommandTckTest.java | 1 -
.../command/changelog/ChangeLogCommandTckTest.java | 12 +--
.../tck/command/checkin/CheckInCommandTckTest.java | 3 -
.../tck/command/remove/RemoveCommandTckTest.java | 1 -
.../tck/command/status/StatusCommandTckTest.java | 1 -
.../scm/tck/command/tag/TagCommandTckTest.java | 1 -
38 files changed, 483 insertions(+), 147 deletions(-)
diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/CommandParameter.java b/maven-scm-api/src/main/java/org/apache/maven/scm/CommandParameter.java
index e35afad9a..3c06bad52 100644
--- a/maven-scm-api/src/main/java/org/apache/maven/scm/CommandParameter.java
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/CommandParameter.java
@@ -94,11 +94,12 @@ public class CommandParameter implements Serializable {
public static final CommandParameter IGNORE_WHITESPACE = new CommandParameter("ignoreWhitespace");
/**
- * Parameter to indicate whether the commit should be signed or not.
- * if false (default true) this will be used by the Git provider to pass the --no-signoff option to the commit command.
- * @since 2.1.1
+ * Parameter to indicate whether the commit/tag should be signed or not.
+ * This is only applicable to Git for now.
+ * Possible values are outlined in {@link CommandParameters.SignOption}
+ * @since 2.2.1
*/
- public static final CommandParameter SCM_COMMIT_SIGN = new CommandParameter("gitCommitSign");
+ public static final CommandParameter SIGN_OPTION = new CommandParameter("sign");
/**
* Parameter name
diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/CommandParameters.java b/maven-scm-api/src/main/java/org/apache/maven/scm/CommandParameters.java
index 3bf81f8ce..6a6519f5a 100644
--- a/maven-scm-api/src/main/java/org/apache/maven/scm/CommandParameters.java
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/CommandParameters.java
@@ -268,6 +268,48 @@ public ScmBranchParameters getScmBranchParameters(CommandParameter parameter) th
return (ScmBranchParameters) getObject(ScmBranchParameters.class, parameter, new ScmBranchParameters());
}
+ // ----------------------------------------------------------------------
+ // SigningOption (Git specific)
+ // ----------------------------------------------------------------------
+ /**
+ * The sign option for a commit or tag.
+ * <p>
+ * This is only relevant for SCM providers that support signing commits/tags, such as Git.
+ * </p>
+ * @see <a href="https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work">Git Tools - Signing Your Work</a>
+ */
+ public enum SignOption {
+ /**
+ * Signs the commit/tag irrespective of the Git configuration setting {@code commit.gpgSign} or {@code tag.gpgSign}.
+ * Only has an effect for supported SCM providers. Others may be silently ignoring this setting.
+ */
+ FORCE_SIGN,
+ /**
+ * Just uses the default value in the Git configuration for setting {@code commit.gpgSign} or {@code tag.gpgSign}.
+ * Only has an effect for supported SCM providers. Others may be silently ignoring this setting.
+ */
+ DEFAULT,
+ /**
+ * Does not sign the commit/tag irrespective of the Git configuration setting {@code commit.gpgSign} or {@code tag.gpgSign}.
+ */
+ FORCE_NO_SIGN
+ }
+
+ public void setSignOption(CommandParameter parameter, SignOption signOption) throws ScmException {
+ setObject(parameter, signOption);
+ }
+
+ /**
+ * Return the sign option.
+ *
+ * @param parameter The parameter
+ * @return The sign option or null if not set
+ * @throws ScmException if the parameter has the wrong type.
+ */
+ public SignOption getSignOption(CommandParameter parameter) throws ScmException {
+ return getObject(SignOption.class, parameter, null);
+ }
+
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
@@ -280,8 +322,8 @@ public ScmBranchParameters getScmBranchParameters(CommandParameter parameter) th
* @return The parameter value
* @throws ScmException if the parameter doesn't exist
*/
- private Object getObject(Class<?> clazz, CommandParameter parameter) throws ScmException {
- Object object = getObject(clazz, parameter, null);
+ private <T> T getObject(Class<T> clazz, CommandParameter parameter) throws ScmException {
+ T object = getObject(clazz, parameter, null);
if (object == null) {
throw new ScmException("Missing parameter: '" + parameter.getName() + "'.");
@@ -299,7 +341,8 @@ private Object getObject(Class<?> clazz, CommandParameter parameter) throws ScmE
* @return The parameter value
* @throws ScmException if the defaultValue is in the wrong type
*/
- private Object getObject(Class<?> clazz, CommandParameter parameter, Object defaultValue) throws ScmException {
+ @SuppressWarnings("unchecked")
+ private <T> T getObject(Class<T> clazz, CommandParameter parameter, T defaultValue) throws ScmException {
Object object = parameters.get(parameter.getName());
if (object == null) {
@@ -311,7 +354,7 @@ private Object getObject(Class<?> clazz, CommandParameter parameter, Object defa
+ clazz.getName() + ", got: " + object.getClass().getName());
}
- return object;
+ return (T) object;
}
/**
diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/ScmTagParameters.java b/maven-scm-api/src/main/java/org/apache/maven/scm/ScmTagParameters.java
index fb07ba3a7..1f43423b2 100644
--- a/maven-scm-api/src/main/java/org/apache/maven/scm/ScmTagParameters.java
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/ScmTagParameters.java
@@ -33,16 +33,14 @@ public class ScmTagParameters implements Serializable {
private boolean pinExternals = false;
- private boolean sign = false;
-
- private boolean forceNoSign = false;
+ private CommandParameters.SignOption signOption;
private String scmRevision;
public ScmTagParameters() {
this.remoteTagging = false;
this.pinExternals = false;
- this.sign = false;
+ this.signOption = CommandParameters.SignOption.DEFAULT;
}
public ScmTagParameters(String message) {
@@ -73,12 +71,24 @@ public void setPinExternals(boolean pinExternals) {
this.pinExternals = pinExternals;
}
+ /**
+ *
+ * @return true if the tag operation should be signed, false otherwise.
+ * @deprecated use {@link #getSignOption()} instead.
+ */
+ @Deprecated
public boolean isSign() {
- return sign;
+ return signOption == CommandParameters.SignOption.FORCE_SIGN;
}
+ /**
+ * Set the signing option for the tag operation.
+ * @param sign
+ * @deprecated use {@link #setSignOption(org.apache.maven.scm.CommandParameters.SignOption)} instead.
+ */
+ @Deprecated
public void setSign(boolean sign) {
- this.sign = sign;
+ signOption = sign ? CommandParameters.SignOption.FORCE_SIGN : CommandParameters.SignOption.DEFAULT;
}
public String getScmRevision() {
@@ -89,12 +99,22 @@ public void setScmRevision(String scmRevision) {
this.scmRevision = scmRevision;
}
- public boolean isForceNoSign() {
- return forceNoSign;
+ /**
+ * Get the signing option for the tag operation.
+ * @return the signing option
+ * @since 2.2.1
+ */
+ public CommandParameters.SignOption getSignOption() {
+ return signOption;
}
- public void setForceNoSign(boolean forceNoSign) {
- this.forceNoSign = forceNoSign;
+ /**
+ * Set the signing option for the tag operation.
+ * @param signOption
+ * @since 2.2.1
+ */
+ public void setSignOption(CommandParameters.SignOption signOption) {
+ this.signOption = signOption;
}
@Override
@@ -102,9 +122,8 @@ public String toString() {
return "ScmTagParameters{" + "message='"
+ message + '\'' + ", remoteTagging="
+ remoteTagging + ", pinExternals="
- + pinExternals + ", sign="
- + sign + ", forceNoSign="
- + forceNoSign + ", scmRevision='"
+ + pinExternals + ", signOption="
+ + signOption + ", scmRevision='"
+ scmRevision + '\'' + '}';
}
}
diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/command/checkin/AbstractCheckInCommand.java b/maven-scm-api/src/main/java/org/apache/maven/scm/command/checkin/AbstractCheckInCommand.java
index c09abd374..f04d4b28a 100644
--- a/maven-scm-api/src/main/java/org/apache/maven/scm/command/checkin/AbstractCheckInCommand.java
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/command/checkin/AbstractCheckInCommand.java
@@ -20,6 +20,7 @@
import org.apache.maven.scm.CommandParameter;
import org.apache.maven.scm.CommandParameters;
+import org.apache.maven.scm.CommandParameters.SignOption;
import org.apache.maven.scm.ScmException;
import org.apache.maven.scm.ScmFileSet;
import org.apache.maven.scm.ScmResult;
@@ -36,6 +37,27 @@
public abstract class AbstractCheckInCommand extends AbstractCommand {
public static final String NAME = "check-in";
+ protected CheckInScmResult executeCheckInCommand(
+ ScmProviderRepository repository,
+ ScmFileSet fileSet,
+ String message,
+ ScmVersion scmVersion,
+ SignOption signOption)
+ throws ScmException {
+ return executeCheckInCommand(repository, fileSet, message, scmVersion);
+ }
+
+ /**
+ *
+ * @param repository
+ * @param fileSet
+ * @param message
+ * @param scmVersion
+ * @return
+ * @throws ScmException
+ * @deprecated use {@link #executeCheckInCommand(ScmProviderRepository, ScmFileSet, String, ScmVersion, SignOption)}
+ */
+ @Deprecated
protected abstract CheckInScmResult executeCheckInCommand(
ScmProviderRepository repository, ScmFileSet fileSet, String message, ScmVersion scmVersion)
throws ScmException;
@@ -45,7 +67,7 @@ public ScmResult executeCommand(ScmProviderRepository repository, ScmFileSet fil
String message = parameters.getString(CommandParameter.MESSAGE);
ScmVersion scmVersion = parameters.getScmVersion(CommandParameter.SCM_VERSION, null);
-
- return executeCheckInCommand(repository, fileSet, message, scmVersion);
+ SignOption signOption = parameters.getSignOption(CommandParameter.SIGN_OPTION);
+ return executeCheckInCommand(repository, fileSet, message, scmVersion, signOption);
}
}
diff --git a/maven-scm-api/src/main/java/org/apache/maven/scm/command/tag/AbstractTagCommand.java b/maven-scm-api/src/main/java/org/apache/maven/scm/command/tag/AbstractTagCommand.java
index 0dec628c8..177e289d1 100644
--- a/maven-scm-api/src/main/java/org/apache/maven/scm/command/tag/AbstractTagCommand.java
+++ b/maven-scm-api/src/main/java/org/apache/maven/scm/command/tag/AbstractTagCommand.java
@@ -20,6 +20,7 @@
import org.apache.maven.scm.CommandParameter;
import org.apache.maven.scm.CommandParameters;
+import org.apache.maven.scm.CommandParameters.SignOption;
import org.apache.maven.scm.ScmException;
import org.apache.maven.scm.ScmFileSet;
import org.apache.maven.scm.ScmResult;
@@ -70,6 +71,10 @@ public ScmResult executeCommand(ScmProviderRepository repository, ScmFileSet fil
scmTagParameters.setMessage("[maven-scm] copy for tag " + tagName);
}
+ SignOption signOption = parameters.getSignOption(CommandParameter.SIGN_OPTION);
+ if (signOption != null) {
+ scmTagParameters.setSignOption(signOption);
+ }
return executeTagCommand(repository, fileSet, tagName, scmTagParameters);
}
}
diff --git a/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/CheckinMojo.java b/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/CheckinMojo.java
index ed3ed12ff..901e10fd7 100644
--- a/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/CheckinMojo.java
+++ b/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/CheckinMojo.java
@@ -25,7 +25,11 @@
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.scm.CommandParameter;
+import org.apache.maven.scm.CommandParameters;
+import org.apache.maven.scm.CommandParameters.SignOption;
import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmVersion;
import org.apache.maven.scm.command.checkin.CheckInScmResult;
import org.apache.maven.scm.manager.ScmManager;
import org.apache.maven.scm.repository.ScmRepository;
@@ -62,6 +66,14 @@ public class CheckinMojo extends AbstractScmMojo {
@Parameter(property = "scmVersion")
private String scmVersion;
+ /**
+ * Toggles the signing for the commit used during checkin (only applicable to SCMs that support signing).
+ *
+ * @since 2.2.1
+ */
+ @Parameter(property = "signOption")
+ private SignOption signOption;
+
@Inject
public CheckinMojo(ScmManager manager, SettingsDecrypter settingsDecrypter) {
super(manager, settingsDecrypter);
@@ -76,8 +88,19 @@ public void execute() throws MojoExecutionException {
try {
ScmRepository repository = getScmRepository();
- CheckInScmResult result = getScmManager()
- .checkIn(repository, getFileSet(), getScmVersion(scmVersionType, scmVersion), message);
+ CommandParameters parameters = new CommandParameters();
+
+ ScmVersion version = getScmVersion(scmVersionType, scmVersion);
+ if (version != null) {
+ parameters.setScmVersion(CommandParameter.SCM_VERSION, version);
+ }
+ if (message != null) {
+ parameters.setString(CommandParameter.MESSAGE, message);
+ }
+ if (signOption != null) {
+ parameters.setSignOption(CommandParameter.SIGN_OPTION, signOption);
+ }
+ CheckInScmResult result = getScmManager().checkIn(repository, getFileSet(), parameters);
checkResult(result);
} catch (IOException | ScmException e) {
diff --git a/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/TagMojo.java b/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/TagMojo.java
index 3e3c2bf6f..e79e877fb 100644
--- a/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/TagMojo.java
+++ b/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/TagMojo.java
@@ -27,6 +27,7 @@
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.scm.CommandParameters.SignOption;
import org.apache.maven.scm.ScmException;
import org.apache.maven.scm.ScmTagParameters;
import org.apache.maven.scm.command.tag.TagScmResult;
@@ -100,20 +101,22 @@ public class TagMojo extends AbstractScmMojo {
private boolean pinExternals;
/**
- * Enable the "--sign" in Git
+ * Enable the "--sign" in Git.
+ * Same as {@link #signOption} set to either {@link SignOption#FORCE_SIGN} or {@link SignOption#DEFAULT}.
*
* @since 1.11.0
+ * @deprecated since 2.1.1, use {@link #signOption} instead
*/
@Parameter(property = "sign", defaultValue = "false")
private boolean sign;
/**
- * Enable the "--no-sign" in Git
+ * Toggles the signing for the tag command (only applicable to SCMs that support signing).
*
- * @since 2.1.1
+ * @since 2.2.1
*/
- @Parameter(property = "forceNoSign", defaultValue = "false")
- private boolean forceNoSign;
+ @Parameter(property = "signOption")
+ private SignOption signOption = SignOption.DEFAULT;
@Inject
public TagMojo(ScmManager manager, SettingsDecrypter settingsDecrypter) {
@@ -157,8 +160,12 @@ public void execute() throws MojoExecutionException {
ScmTagParameters scmTagParameters = new ScmTagParameters(message);
scmTagParameters.setRemoteTagging(remoteTagging);
scmTagParameters.setPinExternals(pinExternals);
- scmTagParameters.setSign(sign);
- scmTagParameters.setForceNoSign(forceNoSign);
+ if (signOption != null) {
+ scmTagParameters.setSignOption(signOption);
+ } else if (sign) {
+ getLog().warn("The 'sign' parameter is deprecated, use 'signOption' instead.");
+ scmTagParameters.setSign(sign);
+ }
TagScmResult result = provider.tag(repository, getFileSet(), finalTag, scmTagParameters);
@@ -167,20 +174,4 @@ public void execute() throws MojoExecutionException {
throw new MojoExecutionException("Cannot run tag command : ", e);
}
}
-
- public boolean isSign() {
- return sign;
- }
-
- public void setSign(boolean sign) {
- this.sign = sign;
- }
-
- public boolean isForceNoSign() {
- return forceNoSign;
- }
-
- public void setForceNoSign(boolean forceNoSign) {
- this.forceNoSign = forceNoSign;
- }
}
diff --git a/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/BranchMojoTest.java b/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/BranchMojoTest.java
index 8ee79bc95..91bd82b4c 100644
--- a/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/BranchMojoTest.java
+++ b/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/BranchMojoTest.java
@@ -29,7 +29,7 @@
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-import static org.apache.maven.scm.ScmTestCase.checkScmPresence;
+import static org.apache.maven.scm.ScmTestCase.checkSystemCmdPresence;
/**
* @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
@@ -53,11 +53,11 @@ public void setUp() throws Exception {
FileUtils.forceDelete(repository);
- checkScmPresence(SvnScmTestUtils.SVNADMIN_COMMAND_LINE);
+ checkSystemCmdPresence(SvnScmTestUtils.SVNADMIN_COMMAND_LINE);
SvnScmTestUtils.initializeRepository(repository);
- checkScmPresence(SvnScmTestUtils.SVN_COMMAND_LINE);
+ checkSystemCmdPresence(SvnScmTestUtils.SVN_COMMAND_LINE);
CheckoutMojo checkoutMojo = (CheckoutMojo)
lookupMojo("checkout", getTestFile("src/test/resources/mojos/checkout/checkoutWithConnectionUrl.xml"));
@@ -75,7 +75,7 @@ public void setUp() throws Exception {
@Test
public void testBranch() throws Exception {
- checkScmPresence(SvnScmTestUtils.SVNADMIN_COMMAND_LINE);
+ checkSystemCmdPresence(SvnScmTestUtils.SVNADMIN_COMMAND_LINE);
BranchMojo mojo = (BranchMojo)
lookupMojo("branch", PlexusJUnit4TestCase.getTestFile("src/test/resources/mojos/branch/branch.xml"));
diff --git a/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/ChangeLogMojoTest.java b/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/ChangeLogMojoTest.java
index e1e2e38f2..9d6805912 100644
--- a/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/ChangeLogMojoTest.java
+++ b/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/ChangeLogMojoTest.java
@@ -30,7 +30,7 @@
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-import static org.apache.maven.scm.ScmTestCase.checkScmPresence;
+import static org.apache.maven.scm.ScmTestCase.checkSystemCmdPresence;
/**
* @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
@@ -48,14 +48,14 @@ public void setUp() throws Exception {
FileUtils.forceDelete(repository);
- checkScmPresence(SvnScmTestUtils.SVNADMIN_COMMAND_LINE);
+ checkSystemCmdPresence(SvnScmTestUtils.SVNADMIN_COMMAND_LINE);
SvnScmTestUtils.initializeRepository(repository);
}
@Test
public void testChangeLog() throws Exception {
- checkScmPresence(SvnScmTestUtils.SVN_COMMAND_LINE);
+ checkSystemCmdPresence(SvnScmTestUtils.SVN_COMMAND_LINE);
ChangeLogMojo mojo = (ChangeLogMojo)
lookupMojo("changelog", getTestFile("src/test/resources/mojos/changelog/changelog.xml"));
@@ -71,7 +71,7 @@ public void testChangeLog() throws Exception {
@Test
public void testChangeLogWithParameters() throws Exception {
- checkScmPresence(SvnScmTestUtils.SVN_COMMAND_LINE);
+ checkSystemCmdPresence(SvnScmTestUtils.SVN_COMMAND_LINE);
ChangeLogMojo mojo = (ChangeLogMojo)
lookupMojo("changelog", getTestFile("src/test/resources/mojos/changelog/changelogWithParameters.xml"));
@@ -109,7 +109,7 @@ public void testChangeLogWithBadUserDateFormat() throws Exception {
@Test
public void testChangeLogWithBadConnectionUrl() throws Exception {
- checkScmPresence(SvnScmTestUtils.SVN_COMMAND_LINE);
+ checkSystemCmdPresence(SvnScmTestUtils.SVN_COMMAND_LINE);
ChangeLogMojo mojo = (ChangeLogMojo) lookupMojo(
"changelog", getTestFile("src/test/resources/mojos/changelog/changelogWithBadConnectionUrl.xml"));
diff --git a/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/CheckoutMojoTest.java b/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/CheckoutMojoTest.java
index 2760211ca..ac0823e38 100644
--- a/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/CheckoutMojoTest.java
+++ b/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/CheckoutMojoTest.java
@@ -30,7 +30,7 @@
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-import static org.apache.maven.scm.ScmTestCase.checkScmPresence;
+import static org.apache.maven.scm.ScmTestCase.checkSystemCmdPresence;
import static org.junit.Assert.assertNotEquals;
/**
@@ -72,13 +72,13 @@ public void testSkipCheckoutWhenCheckoutDirectoryExistsAndSkip() throws Exceptio
@Test
public void testSkipCheckoutWithConnectionUrl() throws Exception {
- checkScmPresence(SvnScmTestUtils.SVNADMIN_COMMAND_LINE);
+ checkSystemCmdPresence(SvnScmTestUtils.SVNADMIN_COMMAND_LINE);
FileUtils.forceDelete(checkoutDir);
SvnScmTestUtils.initializeRepository(repository);
- checkScmPresence(SvnScmTestUtils.SVN_COMMAND_LINE);
+ checkSystemCmdPresence(SvnScmTestUtils.SVN_COMMAND_LINE);
CheckoutMojo mojo = (CheckoutMojo)
lookupMojo("checkout", getTestFile("src/test/resources/mojos/checkout/checkoutWithConnectionUrl.xml"));
@@ -113,7 +113,7 @@ public void testSkipCheckoutWithoutConnectionUrl() throws Exception {
@Test
public void testUseExport() throws Exception {
- checkScmPresence(SvnScmTestUtils.SVN_COMMAND_LINE);
+ checkSystemCmdPresence(SvnScmTestUtils.SVN_COMMAND_LINE);
FileUtils.forceDelete(checkoutDir);
@@ -132,7 +132,7 @@ public void testUseExport() throws Exception {
@Test
public void testExcludeInclude() throws Exception {
- checkScmPresence(SvnScmTestUtils.SVNADMIN_COMMAND_LINE);
+ checkSystemCmdPresence(SvnScmTestUtils.SVNADMIN_COMMAND_LINE);
FileUtils.forceDelete(checkoutDir);
@@ -140,7 +140,7 @@ public void testExcludeInclude() throws Exception {
SvnScmTestUtils.initializeRepository(repository);
- checkScmPresence(SvnScmTestUtils.SVN_COMMAND_LINE);
+ checkSystemCmdPresence(SvnScmTestUtils.SVN_COMMAND_LINE);
CheckoutMojo mojo = (CheckoutMojo) lookupMojo(
"checkout", getTestFile("src/test/resources/mojos/checkout/checkoutWithExcludesIncludes.xml"));
diff --git a/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/ExportMojoTest.java b/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/ExportMojoTest.java
index b284c3ff7..b940c545b 100644
--- a/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/ExportMojoTest.java
+++ b/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/ExportMojoTest.java
@@ -27,7 +27,7 @@
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-import static org.apache.maven.scm.ScmTestCase.checkScmPresence;
+import static org.apache.maven.scm.ScmTestCase.checkSystemCmdPresence;
/**
*
@@ -51,11 +51,11 @@ public void setUp() throws Exception {
@Test
public void testExport() throws Exception {
- checkScmPresence(SvnScmTestUtils.SVNADMIN_COMMAND_LINE);
+ checkSystemCmdPresence(SvnScmTestUtils.SVNADMIN_COMMAND_LINE);
SvnScmTestUtils.initializeRepository(repository);
- checkScmPresence(SvnScmTestUtils.SVN_COMMAND_LINE);
+ checkSystemCmdPresence(SvnScmTestUtils.SVN_COMMAND_LINE);
ExportMojo mojo = (ExportMojo) lookupMojo("export", getTestFile("src/test/resources/mojos/export/export.xml"));
@@ -83,13 +83,13 @@ public void testSkipExportIfExists() throws Exception {
@Test
public void testExcludeInclude() throws Exception {
- checkScmPresence(SvnScmTestUtils.SVNADMIN_COMMAND_LINE);
+ checkSystemCmdPresence(SvnScmTestUtils.SVNADMIN_COMMAND_LINE);
SvnScmTestUtils.initializeRepository(repository);
exportDir.mkdirs();
- checkScmPresence(SvnScmTestUtils.SVN_COMMAND_LINE);
+ checkSystemCmdPresence(SvnScmTestUtils.SVN_COMMAND_LINE);
ExportMojo mojo = (ExportMojo)
lookupMojo("export", getTestFile("src/test/resources/mojos/export/exportWithExcludesIncludes.xml"));
diff --git a/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/StatusMojoTest.java b/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/StatusMojoTest.java
index 191800840..242dea07d 100644
--- a/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/StatusMojoTest.java
+++ b/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/StatusMojoTest.java
@@ -25,7 +25,7 @@
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-import static org.apache.maven.scm.ScmTestCase.checkScmPresence;
+import static org.apache.maven.scm.ScmTestCase.checkSystemCmdPresence;
/**
* @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
@@ -35,7 +35,7 @@
public class StatusMojoTest extends AbstractJUnit4MojoTestCase {
@Test
public void testStatusMojo() throws Exception {
- checkScmPresence(SvnScmTestUtils.SVN_COMMAND_LINE);
+ checkSystemCmdPresence(SvnScmTestUtils.SVN_COMMAND_LINE);
StatusMojo mojo = (StatusMojo) lookupMojo("status", getTestFile("src/test/resources/mojos/status/status.xml"));
diff --git a/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/TagMojoTest.java b/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/TagMojoTest.java
index f2539db9d..0628c02a0 100644
--- a/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/TagMojoTest.java
+++ b/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/TagMojoTest.java
@@ -27,7 +27,7 @@
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-import static org.apache.maven.scm.ScmTestCase.checkScmPresence;
+import static org.apache.maven.scm.ScmTestCase.checkSystemCmdPresence;
/**
* @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
@@ -51,11 +51,11 @@ public void setUp() throws Exception {
FileUtils.forceDelete(repository);
- checkScmPresence(SvnScmTestUtils.SVNADMIN_COMMAND_LINE);
+ checkSystemCmdPresence(SvnScmTestUtils.SVNADMIN_COMMAND_LINE);
SvnScmTestUtils.initializeRepository(repository);
- checkScmPresence(SvnScmTestUtils.SVN_COMMAND_LINE);
+ checkSystemCmdPresence(SvnScmTestUtils.SVN_COMMAND_LINE);
CheckoutMojo checkoutMojo = (CheckoutMojo)
lookupMojo("checkout", getTestFile("src/test/resources/mojos/checkout/checkoutWithConnectionUrl.xml"));
@@ -77,7 +77,7 @@ private static void setupConnectionUrl(AbstractScmMojo mojo) {
@Test
public void testTag() throws Exception {
- checkScmPresence(SvnScmTestUtils.SVN_COMMAND_LINE);
+ checkSystemCmdPresence(SvnScmTestUtils.SVN_COMMAND_LINE);
TagMojo mojo = (TagMojo) lookupMojo("tag", getTestFile("src/test/resources/mojos/tag/tag.xml"));
mojo.setWorkingDirectory(checkoutDir);
@@ -105,7 +105,7 @@ public void testTag() throws Exception {
@Test
public void testTagWithTimestamp() throws Exception {
- checkScmPresence(SvnScmTestUtils.SVN_COMMAND_LINE);
+ checkSystemCmdPresence(SvnScmTestUtils.SVN_COMMAND_LINE);
TagMojo mojo = (TagMojo) lookupMojo("tag", getTestFile("src/test/resources/mojos/tag/tagWithTimestamp.xml"));
mojo.setWorkingDirectory(checkoutDir);
diff --git a/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/UntagMojoTest.java b/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/UntagMojoTest.java
index f0545d747..db2081482 100644
--- a/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/UntagMojoTest.java
+++ b/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/UntagMojoTest.java
@@ -29,7 +29,7 @@
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-import static org.apache.maven.scm.ScmTestCase.checkScmPresence;
+import static org.apache.maven.scm.ScmTestCase.checkSystemCmdPresence;
@RunWith(JUnit4.class)
public class UntagMojoTest extends AbstractJUnit4MojoTestCase {
@@ -45,7 +45,7 @@ public void setUp() throws Exception {
repository = getTestFile("target/repository");
- checkScmPresence(GitScmTestUtils.GIT_COMMAND_LINE);
+ checkSystemCmdPresence(GitScmTestUtils.GIT_COMMAND_LINE);
GitScmTestUtils.initRepo("src/test/resources/git", repository, checkoutDir);
@@ -68,12 +68,10 @@ public void setUp() throws Exception {
@Test
public void testUntag() throws Exception {
- checkScmPresence(GitScmTestUtils.GIT_COMMAND_LINE);
+ checkSystemCmdPresence(GitScmTestUtils.GIT_COMMAND_LINE);
TagMojo tagMojo = (TagMojo) lookupMojo("tag", getTestFile("src/test/resources/mojos/untag/tag.xml"));
tagMojo.setWorkingDirectory(checkoutDir);
- tagMojo.setSign(false);
- tagMojo.setForceNoSign(true);
tagMojo.setConnectionUrl(getConnectionLocalAddress(tagMojo));
tagMojo.execute();
diff --git a/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/UpdateMojoTest.java b/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/UpdateMojoTest.java
index 6a30d8a8d..b5af852ef 100644
--- a/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/UpdateMojoTest.java
+++ b/maven-scm-plugin/src/test/java/org/apache/maven/scm/plugin/UpdateMojoTest.java
@@ -28,7 +28,7 @@
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-import static org.apache.maven.scm.ScmTestCase.checkScmPresence;
+import static org.apache.maven.scm.ScmTestCase.checkSystemCmdPresence;
/**
* @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
@@ -53,11 +53,11 @@ public void setUp() throws Exception {
@Test
public void testSkipCheckoutWithConnectionUrl() throws Exception {
- checkScmPresence(SvnScmTestUtils.SVNADMIN_COMMAND_LINE);
+ checkSystemCmdPresence(SvnScmTestUtils.SVNADMIN_COMMAND_LINE);
SvnScmTestUtils.initializeRepository(repository);
- checkScmPresence(SvnScmTestUtils.SVN_COMMAND_LINE);
+ checkSystemCmdPresence(SvnScmTestUtils.SVN_COMMAND_LINE);
CheckoutMojo checkoutMojo = (CheckoutMojo)
lookupMojo("checkout", getTestFile("src/test/resources/mojos/checkout/checkoutWithConnectionUrl.xml"));
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitCheckInCommand.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitCheckInCommand.java
index 94c166f75..6a1674fea 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitCheckInCommand.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitCheckInCommand.java
@@ -27,6 +27,7 @@
import java.util.Map;
import org.apache.commons.io.FilenameUtils;
+import org.apache.maven.scm.CommandParameters.SignOption;
import org.apache.maven.scm.ScmException;
import org.apache.maven.scm.ScmFile;
import org.apache.maven.scm.ScmFileSet;
@@ -61,9 +62,17 @@ public GitCheckInCommand(Map<String, String> environmentVariables) {
this.environmentVariables = environmentVariables;
}
+ @Override
+ protected CheckInScmResult executeCheckInCommand(
+ ScmProviderRepository repository, ScmFileSet fileSet, String message, ScmVersion scmVersion)
+ throws ScmException {
+ return executeCheckInCommand(repository, fileSet, message, scmVersion, SignOption.DEFAULT);
+ }
+
/** {@inheritDoc} */
protected CheckInScmResult executeCheckInCommand(
- ScmProviderRepository repo, ScmFileSet fileSet, String message, ScmVersion version) throws ScmException {
+ ScmProviderRepository repo, ScmFileSet fileSet, String message, ScmVersion version, SignOption signOption)
+ throws ScmException {
GitScmProviderRepository repository = (GitScmProviderRepository) repo;
CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
@@ -133,7 +142,8 @@ protected CheckInScmResult executeCheckInCommand(
return new CheckInScmResult(null, statusConsumer.getChangedFiles());
}
- Commandline clCommit = createCommitCommandLine(repository, fileSet, messageFile, environmentVariables);
+ Commandline clCommit =
+ createCommitCommandLine(repository, fileSet, messageFile, environmentVariables, signOption);
exitCode = GitCommandLineUtils.execute(clCommit, stdout, stderr);
if (exitCode != 0) {
@@ -202,17 +212,29 @@ public Commandline createPushCommandLine(
return cl;
}
+ @Deprecated
public static Commandline createCommitCommandLine(
GitScmProviderRepository repository, ScmFileSet fileSet, File messageFile) throws ScmException {
return createCommitCommandLine(repository, fileSet, messageFile, Collections.emptyMap());
}
+ @Deprecated
public static Commandline createCommitCommandLine(
GitScmProviderRepository repository,
ScmFileSet fileSet,
File messageFile,
Map<String, String> environmentVariables)
throws ScmException {
+ return createCommitCommandLine(repository, fileSet, messageFile, environmentVariables, SignOption.DEFAULT);
+ }
+
+ public static Commandline createCommitCommandLine(
+ GitScmProviderRepository repository,
+ ScmFileSet fileSet,
+ File messageFile,
+ Map<String, String> environmentVariables,
+ SignOption signOption)
+ throws ScmException {
Commandline cl = GitCommandLineUtils.getBaseGitCommandLine(fileSet.getBasedir(), "commit");
cl.createArg().setValue("--verbose");
@@ -230,6 +252,19 @@ public static Commandline createCommitCommandLine(
cl.createArg().setValue("--no-verify");
}
+ if (signOption != null) {
+ switch (signOption) {
+ case FORCE_SIGN:
+ cl.createArg().setValue("--gpg-sign");
+ break;
+ case FORCE_NO_SIGN:
+ cl.createArg().setValue("--no-gpg-sign");
+ break;
+ default:
+ // do nothing, this is the default
+ break;
+ }
+ }
return cl;
}
}
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/tag/GitTagCommand.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/tag/GitTagCommand.java
index e12c09208..b39047aaf 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/tag/GitTagCommand.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/main/java/org/apache/maven/scm/provider/git/gitexe/command/tag/GitTagCommand.java
@@ -22,6 +22,7 @@
import java.io.IOException;
import java.util.Map;
+import org.apache.maven.scm.CommandParameters.SignOption;
import org.apache.maven.scm.ScmException;
import org.apache.maven.scm.ScmFileSet;
import org.apache.maven.scm.ScmFileStatus;
@@ -89,12 +90,7 @@ public ScmResult executeTagCommand(
int exitCode;
Commandline clTag = createCommandLine(
- repository,
- fileSet.getBasedir(),
- tag,
- messageFile,
- scmTagParameters.isSign(),
- scmTagParameters.isForceNoSign());
+ repository, fileSet.getBasedir(), tag, messageFile, scmTagParameters.getSignOption());
exitCode = GitCommandLineUtils.execute(clTag, stdout, stderr);
if (exitCode != 0) {
@@ -142,15 +138,19 @@ static Commandline createCommandLine(
File workingDirectory,
String tag,
File messageFile,
- boolean sign,
- boolean forceNoSign) {
+ SignOption signOption) {
Commandline cl = GitCommandLineUtils.getBaseGitCommandLine(workingDirectory, "tag");
- if (sign) {
- cl.createArg().setValue("-s");
- }
- if (forceNoSign) {
- cl.createArg().setValue("--no-sign");
+ switch (signOption) {
+ case FORCE_SIGN:
+ cl.createArg().setValue("-s");
+ break;
+ case FORCE_NO_SIGN:
+ cl.createArg().setValue("--no-sign");
+ break;
+ default:
+ // no CLI argument needed when default option from git config should be used
+ break;
}
cl.createArg().setValue("-F");
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/GpgTestUtils.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/GpgTestUtils.java
new file mode 100644
index 000000000..9f22cf6d4
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/GpgTestUtils.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.maven.scm.provider.git.gitexe;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+import org.codehaus.plexus.util.cli.CommandLineUtils;
+import org.codehaus.plexus.util.cli.Commandline;
+import org.codehaus.plexus.util.cli.StreamConsumer;
+
+public class GpgTestUtils {
+
+ public static final String FINGERPRINT_JOHN_DOE_SECRET_KEY = "DB91A1890A878E54C01ADEAC821EAC9D0567A97F";
+ public static final String JOHN_DOE_SECRET_KEY_RESOURCE_NAME = "/gpg/john-doe-secret-key.asc";
+ public static final String BINARY_NAME = "gpg";
+
+ private static Commandline createCommandline() {
+ Commandline commandLine = new Commandline(BINARY_NAME);
+ commandLine.createArg().setValue("--batch");
+ return commandLine;
+ }
+
+ private static void execute(Commandline commandLine) {
+ try {
+ int exitCode = CommandLineUtils.executeCommandLine(
+ commandLine,
+ new StreamConsumer() {
+ @Override
+ public void consumeLine(String line) {
+ // Handle output from the command if needed
+ System.out.println(line);
+ }
+ },
+ new StreamConsumer() {
+ @Override
+ public void consumeLine(String line) {
+ // Handle error output from the command if needed
+ System.err.println(line);
+ }
+ });
+ if (exitCode != 0) {
+ throw new RuntimeException("GPG command failed with exit code: " + exitCode);
+ }
+ } catch (Exception e) {
+ throw new RuntimeException("Failed to execute GPG command", e);
+ }
+ }
+
+ public static void importKey(String pgpKeyResourceName) throws IOException {
+ Path tmpFile = Files.createTempFile("gpg-secret-key", ".key");
+ try (InputStream input = GpgTestUtils.class.getResourceAsStream(pgpKeyResourceName)) {
+ if (input == null) {
+ throw new IllegalArgumentException("Secret GPG file not found: " + pgpKeyResourceName);
+ }
+ Files.copy(input, tmpFile, java.nio.file.StandardCopyOption.REPLACE_EXISTING);
+ }
+ try {
+ Commandline cmdLine = createCommandline();
+ cmdLine.createArg().setValue("--import");
+ cmdLine.createArg().setFile(tmpFile.toFile());
+ execute(cmdLine);
+ } finally {
+ Files.delete(tmpFile);
+ }
+ }
+
+ public static void deleteSecretKey(String fingerprint) {
+ Commandline cmdLine = createCommandline();
+ cmdLine.createArg().setValue("--yes");
+ cmdLine.createArg().setValue("--delete-secret-key");
+ cmdLine.createArg().setValue(fingerprint);
+ execute(cmdLine);
+ }
+}
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitExeChangeLogCommandTckTest.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitExeChangeLogCommandTckTest.java
index 17a51f2db..66aec9722 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitExeChangeLogCommandTckTest.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/changelog/GitExeChangeLogCommandTckTest.java
@@ -18,8 +18,12 @@
*/
package org.apache.maven.scm.provider.git.gitexe.command.changelog;
+import java.io.File;
+
+import org.apache.maven.scm.command.checkout.CheckOutScmResult;
import org.apache.maven.scm.provider.git.GitScmTestUtils;
import org.apache.maven.scm.provider.git.command.changelog.GitChangeLogCommandTckTest;
+import org.apache.maven.scm.repository.ScmRepository;
import static org.apache.maven.scm.provider.git.GitScmTestUtils.GIT_COMMAND_LINE;
@@ -32,6 +36,15 @@ public String getScmProviderCommand() {
return GIT_COMMAND_LINE;
}
+ @Override
+ protected CheckOutScmResult checkOut(File workingDirectory, ScmRepository repository) throws Exception {
+ try {
+ return super.checkOut(workingDirectory, repository);
+ } finally {
+ GitScmTestUtils.setDefaultGitConfig(workingDirectory);
+ }
+ }
+
/** {@inheritDoc} */
public String getScmUrl() throws Exception {
return GitScmTestUtils.getScmUrl(getRepositoryRoot(), "git");
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitCheckInCommandNoBranchTest.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitCheckInCommandNoBranchTest.java
index 776d2bd46..3fabe14b8 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitCheckInCommandNoBranchTest.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitCheckInCommandNoBranchTest.java
@@ -52,7 +52,7 @@ public void setUp() throws Exception {
@Test
public void testCheckinNoBranch() throws Exception {
- checkScmPresence(GIT_COMMAND_LINE);
+ checkSystemCmdPresence(GIT_COMMAND_LINE);
File repoOriginal = new File("src/test/resources/repository_no_branch");
File repo = getTestFile("target/git_copy");
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitCheckInCommandTest.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitCheckInCommandTest.java
index afec7e9ce..4e82d603a 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitCheckInCommandTest.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/checkin/GitCheckInCommandTest.java
@@ -19,7 +19,12 @@
package org.apache.maven.scm.provider.git.gitexe.command.checkin;
import java.io.File;
+import java.io.IOException;
+import java.io.UncheckedIOException;
+import org.apache.maven.scm.CommandParameter;
+import org.apache.maven.scm.CommandParameters;
+import org.apache.maven.scm.CommandParameters.SignOption;
import org.apache.maven.scm.ScmFileSet;
import org.apache.maven.scm.ScmTestCase;
import org.apache.maven.scm.ScmVersion;
@@ -28,6 +33,7 @@
import org.apache.maven.scm.command.checkout.CheckOutScmResult;
import org.apache.maven.scm.command.remove.RemoveScmResult;
import org.apache.maven.scm.provider.git.GitScmTestUtils;
+import org.apache.maven.scm.provider.git.gitexe.GpgTestUtils;
import org.apache.maven.scm.provider.git.repository.GitScmProviderRepository;
import org.apache.maven.scm.provider.git.util.GitUtil;
import org.apache.maven.scm.repository.ScmRepository;
@@ -90,7 +96,7 @@ public void testCheckinAfterRename() throws Exception {
File repo = getRepositoryRoot();
File checkedOutRepo = getWorkingCopy();
- checkScmPresence(GIT_COMMAND_LINE);
+ checkSystemCmdPresence(GIT_COMMAND_LINE);
GitScmTestUtils.initRepo("src/test/resources/repository/", getRepositoryRoot(), getWorkingDirectory());
@@ -144,7 +150,7 @@ public void testCheckinWithFileSet() throws Exception {
File repo = getRepositoryRoot();
File checkedOutRepo = getWorkingCopy();
- checkScmPresence(GIT_COMMAND_LINE);
+ checkSystemCmdPresence(GIT_COMMAND_LINE);
GitScmTestUtils.initRepo("src/test/resources/repository/", getRepositoryRoot(), getWorkingDirectory());
@@ -180,6 +186,49 @@ public void testCheckinWithFileSet() throws Exception {
assertResultIsSuccess(checkInScmResult);
}
+ @Test
+ public void testSignedCheckin() throws Exception {
+ checkSystemCmdPresence(GIT_COMMAND_LINE);
+ checkSystemCmdPresence(GpgTestUtils.BINARY_NAME);
+
+ File repo = getRepositoryRoot();
+ File checkedOutRepo = getWorkingCopy();
+
+ GitScmTestUtils.initRepo("src/test/resources/repository/", getRepositoryRoot(), getWorkingDirectory());
+
+ ScmRepository scmRepository = getScmManager()
+ .makeScmRepository(
+ "scm:git:" + repo.toPath().toAbsolutePath().toUri().toASCIIString());
+ assertResultIsSuccess(checkoutRepoInto(checkedOutRepo, scmRepository));
+
+ // use the GPG key of John Doe for signing
+ GitScmTestUtils.setDefaultGitConfig(checkedOutRepo, fw -> {
+ try {
+ fw.append("[user]\n");
+ fw.append("\tsigningKey = " + GpgTestUtils.FINGERPRINT_JOHN_DOE_SECRET_KEY + "\n");
+ } catch (IOException e) {
+ throw new UncheckedIOException("Error writing to git config file", e);
+ }
+ });
+
+ GpgTestUtils.importKey(GpgTestUtils.JOHN_DOE_SECRET_KEY_RESOURCE_NAME);
+ try {
+ // Creating beer.xml
+ File beerFile = new File(checkedOutRepo.getAbsolutePath(), "beer.xml");
+ FileUtils.fileWrite(beerFile.getAbsolutePath(), "1/2 litre");
+
+ CommandParameters parameters = new CommandParameters();
+ parameters.setSignOption(CommandParameter.SIGN_OPTION, SignOption.FORCE_SIGN);
+ parameters.setString(CommandParameter.MESSAGE, "Created beer file");
+ CheckInScmResult checkInScmResult =
+ getScmManager().checkIn(scmRepository, new ScmFileSet(checkedOutRepo, "beer.xml"), parameters);
+ assertResultIsSuccess(checkInScmResult);
+ } finally {
+ // Clean up GPG key after test
+ GpgTestUtils.deleteSecretKey(GpgTestUtils.FINGERPRINT_JOHN_DOE_SECRET_KEY);
+ }
+ }
+
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/checkout/GitExeCheckOutCommandNoBranchTest.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/checkout/GitExeCheckOutCommandNoBranchTest.java
index 0521957b0..55f50a9ce 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/checkout/GitExeCheckOutCommandNoBranchTest.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/checkout/GitExeCheckOutCommandNoBranchTest.java
@@ -59,14 +59,14 @@ public void setUp() throws Exception {
@Test
public void testCheckoutNoBranch() throws Exception {
- checkScmPresence(GIT_COMMAND_LINE);
+ checkSystemCmdPresence(GIT_COMMAND_LINE);
CheckOutScmResult result = checkoutRepo();
assertEquals(0, result.getCheckedOutFiles().size());
}
@Test
public void testDoubleCheckoutNoBranch() throws Exception {
- checkScmPresence(GIT_COMMAND_LINE);
+ checkSystemCmdPresence(GIT_COMMAND_LINE);
CheckOutScmResult result = checkoutRepo();
assertEquals(0, result.getCheckedOutFiles().size());
CheckOutScmResult result2 = checkoutRepo();
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoCommandTest.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoCommandTest.java
index 57536280f..3cf5bca93 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoCommandTest.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/info/GitInfoCommandTest.java
@@ -42,7 +42,7 @@ public class GitInfoCommandTest extends ScmTestCase {
@Test
public void testInfoCommand() throws Exception {
- checkScmPresence(GIT_COMMAND_LINE);
+ checkSystemCmdPresence(GIT_COMMAND_LINE);
GitScmTestUtils.initRepo("src/test/resources/git/info", getRepositoryRoot(), getWorkingCopy());
@@ -59,7 +59,7 @@ public void testInfoCommand() throws Exception {
@Test
public void testInfoCommandWithShortRevision() throws Exception {
- checkScmPresence(GIT_COMMAND_LINE);
+ checkSystemCmdPresence(GIT_COMMAND_LINE);
GitScmTestUtils.initRepo("src/test/resources/git/info", getRepositoryRoot(), getWorkingCopy());
@@ -78,7 +78,7 @@ public void testInfoCommandWithShortRevision() throws Exception {
@Test
public void testInfoCommandWithNegativeShortRevision() throws Exception {
- checkScmPresence(GIT_COMMAND_LINE);
+ checkSystemCmdPresence(GIT_COMMAND_LINE);
GitScmTestUtils.initRepo("src/test/resources/git/info", getRepositoryRoot(), getWorkingCopy());
@@ -97,7 +97,7 @@ public void testInfoCommandWithNegativeShortRevision() throws Exception {
@Test
public void testInfoCommandWithZeroShortRevision() throws Exception {
- checkScmPresence(GIT_COMMAND_LINE);
+ checkSystemCmdPresence(GIT_COMMAND_LINE);
GitScmTestUtils.initRepo("src/test/resources/git/info", getRepositoryRoot(), getWorkingCopy());
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/tag/GitTagCommandTest.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/tag/GitTagCommandTest.java
index e57008313..e0ca5d689 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/tag/GitTagCommandTest.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/java/org/apache/maven/scm/provider/git/gitexe/command/tag/GitTagCommandTest.java
@@ -20,6 +20,7 @@
import java.io.File;
+import org.apache.maven.scm.CommandParameters.SignOption;
import org.apache.maven.scm.ScmTestCase;
import org.apache.maven.scm.provider.git.repository.GitScmProviderRepository;
import org.apache.maven.scm.repository.ScmRepository;
@@ -55,8 +56,7 @@ public void testCommandLineTag() throws Exception {
"scm:git:http://foo.com/git/trunk",
"my-tag-1",
"git tag " + messageFileString + " my-tag-1",
- false,
- false);
+ SignOption.DEFAULT);
}
@Test
@@ -65,8 +65,7 @@ public void testCommandLineWithUsernameAndTag() throws Exception {
"scm:git:http://anonymous@foo.com/git/trunk",
"my-tag-1",
"git tag " + messageFileString + " my-tag-1",
- false,
- false);
+ SignOption.DEFAULT);
}
@Test
@@ -75,8 +74,7 @@ public void testCommandLineWithUsernameAndTagForceNoSign() throws Exception {
"scm:git:http://anonymous@foo.com/git/trunk",
"my-tag-1",
"git tag --no-sign " + messageFileString + " my-tag-1",
- false,
- true);
+ SignOption.FORCE_NO_SIGN);
}
@Test
@@ -85,15 +83,14 @@ public void testCommandLineWithUsernameAndTagAndSign() throws Exception {
"scm:git:http://anonymous@foo.com/git/trunk",
"my-tag-1",
"git tag -s " + messageFileString + " my-tag-1",
- true,
- false);
+ SignOption.FORCE_SIGN);
}
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
- private void testCommandLine(String scmUrl, String tag, String commandLine, boolean sign, boolean forceNoSign)
+ private void testCommandLine(String scmUrl, String tag, String commandLine, SignOption signOption)
throws Exception {
File workingDirectory = getTestFile("target/git-checkin-command-test");
@@ -101,8 +98,7 @@ private void testCommandLine(String scmUrl, String tag, String commandLine, bool
GitScmProviderRepository gitRepository = (GitScmProviderRepository) repository.getProviderRepository();
- Commandline cl =
- GitTagCommand.createCommandLine(gitRepository, workingDirectory, tag, messageFile, sign, forceNoSign);
+ Commandline cl = GitTagCommand.createCommandLine(gitRepository, workingDirectory, tag, messageFile, signOption);
assertCommandLine(commandLine, workingDirectory, cl);
}
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/gpg/john-doe-secret-key.asc b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/gpg/john-doe-secret-key.asc
new file mode 100644
index 000000000..09140151f
--- /dev/null
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gitexe/src/test/resources/gpg/john-doe-secret-key.asc
@@ -0,0 +1,56 @@
+-----BEGIN PGP PRIVATE KEY BLOCK-----
+
+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
+8KT6s+IdsQ9gd7HWFpUcrv7D6xLpfoasV2Q=
+=IP9P
+-----END PGP PRIVATE KEY BLOCK-----
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/GitScmTestUtils.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/GitScmTestUtils.java
index ecbe42ab2..3d5567bc1 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/GitScmTestUtils.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/GitScmTestUtils.java
@@ -21,6 +21,7 @@
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
+import java.util.function.Consumer;
import org.apache.maven.scm.PlexusJUnit4TestCase;
import org.codehaus.plexus.util.FileUtils;
@@ -87,7 +88,12 @@ public static void deleteAllDirectories(File startDirectory, String pattern) thr
}
}
- public static void setDefaultGitConfig(File repositoryRootFile) {
+ public static void setDefaultGitConfig(File repositoryRootFile) throws IOException {
+ setDefaultGitConfig(repositoryRootFile, null);
+ }
+
+ public static void setDefaultGitConfig(File repositoryRootFile, Consumer<FileWriter> configWriterCustomizer)
+ throws IOException {
File gitConfigFile = new File(new File(repositoryRootFile, ".git"), "config");
try (FileWriter fw = new FileWriter(gitConfigFile, true)) {
@@ -95,11 +101,13 @@ public static void setDefaultGitConfig(File repositoryRootFile) {
fw.append("\tname = John Doe\n");
fw.append("\temail = john.doe@nowhere.com\n");
fw.append("[commit]\n");
+ // disable gpg signing for commits and tags by default
fw.append("\tgpgsign = false\n");
- fw.flush();
- } catch (IOException e) {
- System.err.println("cannot setup a default user for tests purpose inside " + gitConfigFile);
- e.printStackTrace();
+ fw.append("[tag]\n");
+ fw.append("\tgpgsign = false\n");
+ if (configWriterCustomizer != null) {
+ configWriterCustomizer.accept(fw);
+ }
}
}
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/checkin/GitCheckInCommandTckTest.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/checkin/GitCheckInCommandTckTest.java
index d177172f0..8bf1f61ed 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/checkin/GitCheckInCommandTckTest.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/checkin/GitCheckInCommandTckTest.java
@@ -88,7 +88,6 @@ public void testRejectedNonFastForwardPush() throws Exception {
CommandParameters commandParameters = new CommandParameters();
commandParameters.setString(CommandParameter.MESSAGE, "Blocking commit");
- commandParameters.setString(CommandParameter.SCM_COMMIT_SIGN, "false");
CheckInScmResult blockingResult = getScmManager().checkIn(scmRepository, blockingFileSet, commandParameters);
assertResultIsSuccess(blockingResult);
@@ -97,7 +96,6 @@ public void testRejectedNonFastForwardPush() throws Exception {
commandParameters = new CommandParameters();
commandParameters.setString(CommandParameter.MESSAGE, "Rejected commit");
- commandParameters.setString(CommandParameter.SCM_COMMIT_SIGN, "false");
CheckInScmResult checkInScmResult = getScmManager().checkIn(scmRepository, rejectedFileSet, commandParameters);
assertFalse(
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkin/JGitCheckInCommand.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkin/JGitCheckInCommand.java
index 34b4053b6..653de8dd6 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkin/JGitCheckInCommand.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkin/JGitCheckInCommand.java
@@ -152,8 +152,7 @@ public CheckInScmResult executeCommand(ScmProviderRepository repo, ScmFileSet fi
CommitCommand command = git.commit()
.setMessage(message)
.setAuthor(author.name, author.email)
- .setCommitter(committer.name, committer.email)
- .setSign(parameters.getBoolean(CommandParameter.SCM_COMMIT_SIGN, true));
+ .setCommitter(committer.name, committer.email);
RevCommit commitRev = command.call();
logger.info("commit done: " + commitRev.getShortMessage());
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/tag/JGitTagCommand.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/tag/JGitTagCommand.java
index 94867a6d3..1c4b148b2 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/tag/JGitTagCommand.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/tag/JGitTagCommand.java
@@ -99,7 +99,6 @@ public ScmResult executeTagCommand(
// tag the revision
String tagMessage = scmTagParameters.getMessage();
Ref tagRef = git.tag()
- .setSigned(scmTagParameters.isSign())
.setName(escapedTagName)
.setMessage(tagMessage)
.setForceUpdate(false)
diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/java/org/apache/maven/scm/provider/git/jgit/command/checkin/JGitCheckInCommandCommitterAuthorTckTest.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/java/org/apache/maven/scm/provider/git/jgit/command/checkin/JGitCheckInCommandCommitterAuthorTckTest.java
index 17cfce51e..0369c214c 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/java/org/apache/maven/scm/provider/git/jgit/command/checkin/JGitCheckInCommandCommitterAuthorTckTest.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/test/java/org/apache/maven/scm/provider/git/jgit/command/checkin/JGitCheckInCommandCommitterAuthorTckTest.java
@@ -258,7 +258,6 @@ private void createAndCommitFile(File file, String username) throws Exception, S
CommandParameters commandParameters = new CommandParameters();
commandParameters.setString(CommandParameter.MESSAGE, "Commit message");
- commandParameters.setString(CommandParameter.SCM_COMMIT_SIGN, "false");
CheckInScmResult result = getScmManager()
.checkIn(scmRepository, new ScmFileSet(getWorkingCopy(), "**/Foo.java"), commandParameters);
diff --git a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/remoteinfo/SvnRemoteInfoCommandTest.java b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/remoteinfo/SvnRemoteInfoCommandTest.java
index 9b50e3e48..b195ee8c8 100644
--- a/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/remoteinfo/SvnRemoteInfoCommandTest.java
+++ b/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/remoteinfo/SvnRemoteInfoCommandTest.java
@@ -32,7 +32,7 @@
public class SvnRemoteInfoCommandTest extends ScmTestCase {
@Test
public void testExist() throws Exception {
- checkScmPresence(SVN_COMMAND_LINE);
+ checkSystemCmdPresence(SVN_COMMAND_LINE);
SvnRemoteInfoCommand svnRemoteInfoCommand = new SvnRemoteInfoCommand(false);
@@ -43,7 +43,7 @@ public void testExist() throws Exception {
@Test
public void testNotExist() throws Exception {
- checkScmPresence(SVN_COMMAND_LINE);
+ checkSystemCmdPresence(SVN_COMMAND_LINE);
SvnRemoteInfoCommand svnRemoteInfoCommand = new SvnRemoteInfoCommand(false);
diff --git a/maven-scm-test/src/main/java/org/apache/maven/scm/ScmTestCase.java b/maven-scm-test/src/main/java/org/apache/maven/scm/ScmTestCase.java
index 20e424ff3..cf9c67dfa 100644
--- a/maven-scm-test/src/main/java/org/apache/maven/scm/ScmTestCase.java
+++ b/maven-scm-test/src/main/java/org/apache/maven/scm/ScmTestCase.java
@@ -299,7 +299,7 @@ public void assertCommandLine(String expectedCommand, File expectedWorkingDirect
assertEquals(expectedCommandLineAsExecuted, actualCommandLineAsExecuted);
}
- public static void checkScmPresence(String scmProviderCommand) {
+ public static void checkSystemCmdPresence(String scmProviderCommand) {
assumeTrue(
"Skipping tests because the required command '" + scmProviderCommand + "' is not available.",
ScmTestCase.isSystemCmd(scmProviderCommand));
diff --git a/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/branch/BranchCommandTckTest.java b/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/branch/BranchCommandTckTest.java
index 894978288..5e742999b 100644
--- a/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/branch/BranchCommandTckTest.java
+++ b/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/branch/BranchCommandTckTest.java
@@ -72,7 +72,6 @@ public void testBranchCommandTest() throws Exception {
CommandParameters commandParameters = new CommandParameters();
commandParameters.setString(CommandParameter.MESSAGE, "commit message");
- commandParameters.setString(CommandParameter.SCM_COMMIT_SIGN, "false");
CheckInScmResult checkinResult =
getScmManager().checkIn(getScmRepository(), new ScmFileSet(getWorkingCopy()), commandParameters);
diff --git a/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/changelog/ChangeLogCommandTckTest.java b/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/changelog/ChangeLogCommandTckTest.java
index ec40df28e..1f87adac8 100644
--- a/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/changelog/ChangeLogCommandTckTest.java
+++ b/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/changelog/ChangeLogCommandTckTest.java
@@ -70,10 +70,7 @@ public void testChangeLogCommand() throws Exception {
ChangeLogScmResult firstResult =
provider.changeLog(getScmRepository(), fileSet, null, null, 0, (ScmBranch) null, null);
- assertTrue(
- firstResult.getProviderMessage() + ": " + firstResult.getCommandLine() + "\n"
- + firstResult.getCommandOutput(),
- firstResult.isSuccess());
+ assertResultIsSuccess(firstResult);
// for svn and git the repo get recreated for each test and therefore initial changelog size is 1
int firstLogSize = firstResult.getChangeLog().getChangeSets().size();
@@ -90,17 +87,16 @@ public void testChangeLogCommand() throws Exception {
ScmTestCase.makeFile(getWorkingCopy(), "/readme.txt", "changed readme.txt");
CommandParameters commandParameters = new CommandParameters();
commandParameters.setString(CommandParameter.MESSAGE, COMMIT_MSG);
- commandParameters.setString(CommandParameter.SCM_COMMIT_SIGN, "false");
CheckInScmResult checkInResult = provider.checkIn(getScmRepository(), fileSet, commandParameters);
assertTrue("Unable to checkin changes to the repository", checkInResult.isSuccess());
ScmTagParameters scmTagParameters = new ScmTagParameters();
TagScmResult tagResult = provider.tag(getScmRepository(), fileSet, COMMIT_TAG, scmTagParameters);
- assertTrue("Unable to tag the changes in the repository", tagResult.isSuccess());
+ assertResultIsSuccess(tagResult);
ChangeLogScmRequest changeLogScmRequest = new ChangeLogScmRequest(getScmRepository(), fileSet);
ChangeLogScmResult secondResult = provider.changeLog(changeLogScmRequest);
- assertTrue(secondResult.getProviderMessage(), secondResult.isSuccess());
+ assertResultIsSuccess(secondResult);
List<ChangeSet> changeSets = secondResult.getChangeLog().getChangeSets();
@@ -130,7 +126,7 @@ public void testChangeLogCommand() throws Exception {
ChangeLogScmResult thirdResult = provider.changeLog(changeLogScmRequest);
// Thorough assert of the last result
- assertTrue(thirdResult.getProviderMessage(), thirdResult.isSuccess());
+ assertResultIsSuccess(thirdResult);
List<ChangeSet> thirdChangeSets = thirdResult.getChangeLog().getChangeSets();
assertEquals(lastCommitIsCausedByTagging ? 2 : 1, thirdChangeSets.size());
diff --git a/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/checkin/CheckInCommandTckTest.java b/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/checkin/CheckInCommandTckTest.java
index 409dbf2ba..cde1afe32 100644
--- a/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/checkin/CheckInCommandTckTest.java
+++ b/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/checkin/CheckInCommandTckTest.java
@@ -87,7 +87,6 @@ public void testCheckInCommandTest() throws Exception {
CommandParameters commandParameters = new CommandParameters();
commandParameters.setString(CommandParameter.MESSAGE, "Commit message");
- commandParameters.setString(CommandParameter.SCM_COMMIT_SIGN, "false");
CheckInScmResult result =
getScmManager().checkIn(getScmRepository(), new ScmFileSet(getWorkingCopy()), commandParameters);
@@ -157,7 +156,6 @@ public void testCheckInCommandPartialFileset() throws Exception {
CommandParameters commandParameters = new CommandParameters();
commandParameters.setString(CommandParameter.MESSAGE, "Commit message");
- commandParameters.setString(CommandParameter.SCM_COMMIT_SIGN, "false");
CheckInScmResult result = getScmManager()
.checkIn(getScmRepository(), new ScmFileSet(getWorkingCopy(), "**/Foo.java", null), commandParameters);
@@ -222,7 +220,6 @@ public void testCheckInCommandFilesetWithBasedirOtherThanWorkingCopyRoot() throw
CommandParameters commandParameters = new CommandParameters();
commandParameters.setString(CommandParameter.MESSAGE, "Commit message");
- commandParameters.setString(CommandParameter.SCM_COMMIT_SIGN, "false");
CheckInScmResult result = getScmManager()
.checkIn(
diff --git a/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/remove/RemoveCommandTckTest.java b/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/remove/RemoveCommandTckTest.java
index f9a29f6a5..deece3a90 100644
--- a/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/remove/RemoveCommandTckTest.java
+++ b/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/remove/RemoveCommandTckTest.java
@@ -68,7 +68,6 @@ public void testRemoveCommand() throws Exception {
CommandParameters commandParameters = new CommandParameters();
commandParameters.setString(CommandParameter.MESSAGE, "Commit message");
- commandParameters.setString(CommandParameter.SCM_COMMIT_SIGN, "false");
// checkin changes
CheckInScmResult checkinResult =
diff --git a/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/status/StatusCommandTckTest.java b/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/status/StatusCommandTckTest.java
index 36239cf12..090e88aa9 100644
--- a/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/status/StatusCommandTckTest.java
+++ b/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/status/StatusCommandTckTest.java
@@ -64,7 +64,6 @@ public abstract class StatusCommandTckTest extends ScmTckTestCase {
protected void commit(File workingDirectory, ScmRepository repository) throws Exception {
CommandParameters commandParameters = new CommandParameters();
commandParameters.setString(CommandParameter.MESSAGE, "No msg");
- commandParameters.setString(CommandParameter.SCM_COMMIT_SIGN, "false");
CheckInScmResult result =
getScmManager().checkIn(repository, new ScmFileSet(workingDirectory), commandParameters);
diff --git a/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/tag/TagCommandTckTest.java b/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/tag/TagCommandTckTest.java
index aa8f6ca5a..c5a4106e4 100644
--- a/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/tag/TagCommandTckTest.java
+++ b/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/tag/TagCommandTckTest.java
@@ -72,7 +72,6 @@ public void testTagCommandTest() throws Exception {
CommandParameters commandParameters = new CommandParameters();
commandParameters.setString(CommandParameter.MESSAGE, "Commit message");
- commandParameters.setString(CommandParameter.SCM_COMMIT_SIGN, "false");
CheckInScmResult checkinResult =
getScmManager().checkIn(getScmRepository(), new ScmFileSet(getWorkingCopy()), commandParameters);