[MGPG-10] Patch from Christian Schulte reworked for current structure
git-svn-id: https://svn.apache.org/repos/asf/maven/plugins/trunk@577889 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/maven/plugin/gpg/GpgSignAttachedMojo.java b/src/main/java/org/apache/maven/plugin/gpg/GpgSignAttachedMojo.java
index 888adf1..52c6724 100644
--- a/src/main/java/org/apache/maven/plugin/gpg/GpgSignAttachedMojo.java
+++ b/src/main/java/org/apache/maven/plugin/gpg/GpgSignAttachedMojo.java
@@ -112,6 +112,14 @@
private String[] excludes;
/**
+ * The directory where to store signature files.
+ *
+ * @parameter expression="${project.build.directory}/gpg"
+ * @since 1.0-alpha-4
+ */
+ private File outputDirectory;
+
+ /**
* The maven project.
*
* @parameter expression="${project}"
@@ -200,9 +208,12 @@
// What we need to generateSignatureForArtifact here
// ----------------------------------------------------------------------------
- signer.setInteractive(settings.isInteractiveMode());
- signer.setKeyName(keyname);
- signer.setUseAgent(useAgent);
+ signer.setInteractive( settings.isInteractiveMode() );
+ signer.setKeyName( keyname );
+ signer.setUseAgent( useAgent );
+ signer.setOutputDirectory( outputDirectory );
+ signer.setBuildDirectory( new File( project.getBuild().getDirectory() ) );
+ signer.setBaseDirectory( project.getBasedir() );
List signingBundles = new ArrayList();
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 39d30a7..2458453 100644
--- a/src/main/java/org/apache/maven/plugin/gpg/GpgSigner.java
+++ b/src/main/java/org/apache/maven/plugin/gpg/GpgSigner.java
@@ -42,6 +42,9 @@
private boolean useAgent;
private boolean isInteractive = true;
private String keyname;
+ private File outputDir;
+ private File buildDir;
+ private File baseDir;
public GpgSigner()
{
@@ -63,17 +66,64 @@
keyname = s;
}
+ public void setOutputDirectory(File out)
+ {
+ outputDir = out;
+ }
+ public void setBuildDirectory(File out)
+ {
+ buildDir = out;
+ }
+ public void setBaseDirectory(File out)
+ {
+ baseDir = out;
+ }
+
public File generateSignatureForArtifact( File file , String pass)
throws MojoExecutionException
{
File signature = new File( file + SIGNATURE_EXTENSION );
+ boolean isInBuildDir = false;
+ if ( buildDir != null )
+ {
+ File parent = signature.getParentFile();
+ if ( buildDir.equals(parent) )
+ {
+ isInBuildDir = true;
+ }
+ }
+ if ( !isInBuildDir
+ && outputDir != null )
+ {
+ String fileDirectory = "";
+ File signatureDirectory = signature;
+
+ while( ( signatureDirectory = signatureDirectory.getParentFile() ) != null )
+ {
+ if( !signatureDirectory.equals( baseDir ) )
+ {
+ fileDirectory = signatureDirectory.getName() + File.separatorChar + fileDirectory;
+ }
+ else
+ {
+ break;
+ }
+ }
+ signatureDirectory = new File( outputDir, fileDirectory );
+ if( !signatureDirectory.exists() )
+ {
+ signatureDirectory.mkdirs();
+ }
+ signature = new File( signatureDirectory, file.getName() + SIGNATURE_EXTENSION );
+ }
+
if ( signature.exists() )
{
signature.delete();
}
-
+
Commandline cmd = new Commandline();
cmd.setExecutable( "gpg" + ( SystemUtils.IS_OS_WINDOWS ? ".exe" : "" ) );
@@ -114,6 +164,9 @@
cmd.createArgument().setValue( "--no-tty" );
}
+ cmd.createArgument().setValue( "--output" );
+ cmd.createArgument().setFile( signature );
+
cmd.createArgument().setFile( file );
diff --git a/src/main/java/org/apache/maven/plugin/gpg/SignAndDeployFileMojo.java b/src/main/java/org/apache/maven/plugin/gpg/SignAndDeployFileMojo.java
index a7eb1e7..6066293 100644
--- a/src/main/java/org/apache/maven/plugin/gpg/SignAndDeployFileMojo.java
+++ b/src/main/java/org/apache/maven/plugin/gpg/SignAndDeployFileMojo.java
@@ -75,6 +75,13 @@
*/
private boolean useAgent;
+ /**
+ * The directory where to store signature files.
+ *
+ * @parameter expression="${gpg.asc.directory}"
+ */
+ private File ascDirectory;
+
/**
* @parameter expression="${settings}"
@@ -236,6 +243,8 @@
signer.setInteractive( settings.isInteractiveMode() );
signer.setKeyName( keyname );
signer.setUseAgent( useAgent );
+ signer.setOutputDirectory(ascDirectory);
+ signer.setBaseDirectory(new File("foo").getAbsoluteFile().getParentFile().getAbsoluteFile());
setDeployer( new SignedArtifactDeployer( deployer, passphrase ) );
super.execute();