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 <[email protected]> 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:[email protected]">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:[email protected]">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:[email protected]">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:[email protected]">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:[email protected]">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://[email protected]/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://[email protected]/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://[email protected]/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 = [email protected]\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);
