[SCM-486] Support signed tags for Git

This closes #81
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 2db3d18..12cea80 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
@@ -36,12 +36,15 @@
 
     private boolean pinExternals = false;
 
+    private boolean sign = false;
+
     private String scmRevision;
 
     public ScmTagParameters()
     {
         this.remoteTagging = false;
         this.pinExternals = false;
+        this.sign = false;
     }
 
     public ScmTagParameters( String message )
@@ -79,6 +82,16 @@
         this.pinExternals = pinExternals;
     }
 
+    public boolean isSign()
+    {
+        return sign;
+    }
+
+    public void setSign( boolean sign )
+    {
+        this.sign = sign;
+    }
+
     public String getScmRevision()
     {
         return scmRevision;
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 a040d68..d4e7c6a 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
@@ -98,6 +98,14 @@
     @Parameter( property = "pinExternals", defaultValue = "false" )
     private boolean pinExternals;
 
+    /**
+     * Enable the "--sign" in Git
+     *
+     * @since 1.10.1
+     */
+    @Parameter( property = "sign", defaultValue = "false" )
+    private boolean sign;
+
     /** {@inheritDoc} */
     public void execute()
         throws MojoExecutionException
@@ -145,6 +153,7 @@
             ScmTagParameters scmTagParameters = new ScmTagParameters( message );
             scmTagParameters.setRemoteTagging( remoteTagging );
             scmTagParameters.setPinExternals( pinExternals );
+            scmTagParameters.setSign( sign );
 
             TagScmResult result = provider.tag( repository, getFileSet(), finalTag, scmTagParameters );
 
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 f5b12eb..068ec3e 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
@@ -92,7 +92,9 @@
 
             int exitCode;
 
-            Commandline clTag = createCommandLine( repository, fileSet.getBasedir(), tag, messageFile );
+            boolean sign = scmTagParameters.isSign();
+
+            Commandline clTag = createCommandLine( repository, fileSet.getBasedir(), tag, messageFile, sign );
 
             exitCode = GitCommandLineUtils.execute( clTag, stdout, stderr, getLogger() );
             if ( exitCode != 0 )
@@ -147,10 +149,15 @@
     // ----------------------------------------------------------------------
 
     public static Commandline createCommandLine( GitScmProviderRepository repository, File workingDirectory,
-                                                 String tag, File messageFile )
+                                                 String tag, File messageFile, boolean sign )
     {
         Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( workingDirectory, "tag" );
 
+        if ( sign )
+        {
+            cl.createArg().setValue( "-s" );
+        }
+
         cl.createArg().setValue( "-F" );
         cl.createArg().setValue( messageFile.getAbsolutePath() );
 
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 68c4750..6633dc1 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
@@ -55,21 +55,28 @@
     public void testCommandLineTag()
         throws Exception
     {
-        testCommandLine( "scm:git:http://foo.com/git/trunk", "my-tag-1", "git tag " + messageFileString + " my-tag-1" );
+        testCommandLine( "scm:git:http://foo.com/git/trunk", "my-tag-1", "git tag " + messageFileString + " my-tag-1", false );
     }
 
     public void testCommandLineWithUsernameAndTag()
         throws Exception
     {
         testCommandLine( "scm:git:http://anonymous@foo.com/git/trunk", "my-tag-1",
-                         "git tag " + messageFileString + " my-tag-1" );
+                         "git tag " + messageFileString + " my-tag-1", false );
+    }
+
+    public void testCommandLineWithUsernameAndTagAndSign()
+            throws Exception
+    {
+         testCommandLine( "scm:git:http://anonymous@foo.com/git/trunk", "my-tag-1",
+                          "git tag -s " + messageFileString + " my-tag-1", true );
     }
 
     // ----------------------------------------------------------------------
     //
     // ----------------------------------------------------------------------
 
-    private void testCommandLine( String scmUrl, String tag, String commandLine )
+    private void testCommandLine( String scmUrl, String tag, String commandLine, boolean sign )
         throws Exception
     {
         File workingDirectory = getTestFile( "target/git-checkin-command-test" );
@@ -78,7 +85,7 @@
 
         GitScmProviderRepository gitRepository = (GitScmProviderRepository) repository.getProviderRepository();
 
-        Commandline cl = GitTagCommand.createCommandLine( gitRepository, workingDirectory, tag, messageFile );
+        Commandline cl = GitTagCommand.createCommandLine( gitRepository, workingDirectory, tag, messageFile, sign );
 
         assertCommandLine( commandLine, workingDirectory, cl );
     }