[MGPG-49] Add support for --lock-* command line options
git-svn-id: https://svn.apache.org/repos/asf/maven/plugins/trunk@1570541 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/maven/plugin/gpg/AbstractGpgMojo.java b/src/main/java/org/apache/maven/plugin/gpg/AbstractGpgMojo.java
index e3054bd..07029e4 100644
--- a/src/main/java/org/apache/maven/plugin/gpg/AbstractGpgMojo.java
+++ b/src/main/java/org/apache/maven/plugin/gpg/AbstractGpgMojo.java
@@ -21,6 +21,7 @@
import java.io.File;
import java.io.IOException;
+import java.util.List;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
@@ -61,12 +62,12 @@
* optional as the agent will provide it.
* For gpg2, specify true as --no-use-agent was removed in gpg2 and doesn't ask for a passphrase anymore.
*/
- @Parameter( property = "gpg.useagent", defaultValue = "false" )
+ @Parameter( property = "gpg.useagent", defaultValue = "false")
private boolean useAgent;
/**
*/
- @Parameter( defaultValue = "${settings.interactiveMode}", readonly = true )
+ @Parameter( defaultValue = "${settings.interactiveMode}", readonly = true)
private boolean interactive;
/**
@@ -107,6 +108,31 @@
@Parameter( property = "gpg.publicKeyring" )
private String publicKeyring;
+ /**
+ * The lock mode to use when invoking gpg. By default no lock mode will be specified. Valid values are {@code once},
+ * {@code multiple} and {@code never}. The lock mode gets translated into the corresponding {@code --lock-___}
+ * command line argument. Improper usage of this option may lead to data and key corruption.
+ *
+ * @see <a href="http://www.gnupg.org/documentation/manuals/gnupg/GPG-Configuration-Options.html">the --lock-*
+ * options</a>
+ * @since 1.5
+ */
+ @Parameter( property = "gpg.lockMode" )
+ private String lockMode;
+
+ /**
+ * Sets the arguments to be passed to gpg. Example:
+ * <pre>
+ * <gpgArguments>
+ * <arg>--no-random-seed-file</arg>
+ * <arg>--no-permission-warning</arg>
+ * </gpgArguments>
+ * </pre>
+ * @since 1.5
+ */
+ @Parameter
+ private List<String> gpgArguments;
+
AbstractGpgSigner newSigner( MavenProject project )
throws MojoExecutionException, MojoFailureException
{
@@ -120,6 +146,8 @@
signer.setDefaultKeyring( defaultKeyring );
signer.setSecretKeyring( secretKeyring );
signer.setPublicKeyring( publicKeyring );
+ signer.setLockMode( lockMode );
+ signer.setArgs( gpgArguments );
signer.setPassPhrase( passphrase );
if ( null == passphrase && !useAgent )
diff --git a/src/main/java/org/apache/maven/plugin/gpg/AbstractGpgSigner.java b/src/main/java/org/apache/maven/plugin/gpg/AbstractGpgSigner.java
index edc8b6c..a22d6fb 100644
--- a/src/main/java/org/apache/maven/plugin/gpg/AbstractGpgSigner.java
+++ b/src/main/java/org/apache/maven/plugin/gpg/AbstractGpgSigner.java
@@ -23,6 +23,7 @@
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
+import java.util.List;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.logging.Log;
@@ -62,16 +63,30 @@
protected String publicKeyring;
+ protected String lockMode;
+
+ protected List<String> args;
+
public Log getLog()
{
return log;
}
+ public void setArgs( List<String> args )
+ {
+ this.args = args;
+ }
+
public void setInteractive( boolean b )
{
isInteractive = b;
}
+ public void setLockMode( String lockMode )
+ {
+ this.lockMode = lockMode;
+ }
+
public void setUseAgent( boolean b )
{
useAgent = b;
diff --git a/src/main/java/org/apache/maven/plugin/gpg/GpgSigner.java b/src/main/java/org/apache/maven/plugin/gpg/GpgSigner.java
index 2f69e83..862ba4e 100644
--- a/src/main/java/org/apache/maven/plugin/gpg/GpgSigner.java
+++ b/src/main/java/org/apache/maven/plugin/gpg/GpgSigner.java
@@ -22,6 +22,7 @@
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;
+import java.util.Iterator;
import org.apache.maven.plugin.MojoExecutionException;
import org.codehaus.plexus.util.Os;
@@ -66,6 +67,14 @@
cmd.setExecutable( "gpg" + ( Os.isFamily( Os.FAMILY_WINDOWS ) ? ".exe" : "" ) );
}
+ if ( args != null )
+ {
+ for ( String arg : args )
+ {
+ cmd.createArg().setValue( arg );
+ }
+ }
+
if ( homeDir != null )
{
cmd.createArg().setValue( "--homedir" );
@@ -128,6 +137,19 @@
cmd.createArg().setValue( publicKeyring );
}
+ if ( "once".equalsIgnoreCase( lockMode ) )
+ {
+ cmd.createArg().setValue( "--lock-once" );
+ }
+ else if ( "multiple".equalsIgnoreCase( lockMode ) )
+ {
+ cmd.createArg().setValue( "--lock-multiple" );
+ }
+ else if ( "never".equalsIgnoreCase( lockMode ) )
+ {
+ cmd.createArg().setValue( "--lock-never" );
+ }
+
cmd.createArg().setValue( "--output" );
cmd.createArg().setFile( signature );