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