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);

Reply via email to