You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by hb...@apache.org on 2019/10/05 17:23:28 UTC

[maven-assembly-plugin] branch MASSEMBLY-921 updated: use the new project.build.outputTimestamp property

This is an automated email from the ASF dual-hosted git repository.

hboutemy pushed a commit to branch MASSEMBLY-921
in repository https://gitbox.apache.org/repos/asf/maven-assembly-plugin.git


The following commit(s) were added to refs/heads/MASSEMBLY-921 by this push:
     new a6650e4  use the new project.build.outputTimestamp property
a6650e4 is described below

commit a6650e496997424a64b50f9b13862a8dfa878c9e
Author: Hervé Boutemy <hb...@apache.org>
AuthorDate: Sat Oct 5 19:23:23 2019 +0200

    use the new project.build.outputTimestamp property
---
 src/it/projects/reproducible/pom.xml                      |  2 +-
 src/it/projects/reproducible/verify.groovy                |  6 +++---
 .../maven/plugins/assembly/archive/AssemblyArchiver.java  |  5 +++--
 .../plugins/assembly/archive/DefaultAssemblyArchiver.java | 13 +++++++------
 .../assembly/archive/archiver/AssemblyProxyArchiver.java  |  4 ++--
 .../plugins/assembly/mojos/AbstractAssemblyMojo.java      | 15 +++++++++------
 .../assembly/archive/DefaultAssemblyArchiverTest.java     | 12 ++++++------
 7 files changed, 31 insertions(+), 26 deletions(-)

diff --git a/src/it/projects/reproducible/pom.xml b/src/it/projects/reproducible/pom.xml
index b870caa..6b9f7ca 100644
--- a/src/it/projects/reproducible/pom.xml
+++ b/src/it/projects/reproducible/pom.xml
@@ -36,7 +36,7 @@
 
   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-    <source-date-epoch>1566419331</source-date-epoch>
+    <project.build.outputTimestamp>2019-08-21T18:28:52Z</project.build.outputTimestamp>
   </properties>
 
   <build>
diff --git a/src/it/projects/reproducible/verify.groovy b/src/it/projects/reproducible/verify.groovy
index f80fc4b..4e4f945 100644
--- a/src/it/projects/reproducible/verify.groovy
+++ b/src/it/projects/reproducible/verify.groovy
@@ -25,6 +25,6 @@ File deployDir = new File( basedir, 'target/repo/org/apache/maven/its/reproducib
 
 assert deployDir.exists()
 
-assert new File( deployDir, 'reproducible-1.0-src.zip.sha1' ).text == '079d0af3f42cd8cd3faad6b49547298cf8a3eb39'
-assert new File( deployDir, 'reproducible-1.0-src.tar.sha1' ).text == '6433b2101247b3686faade1f4e81c972dbfe6d2f'
-assert new File( deployDir, 'reproducible-1.0-src.jar.sha1' ).text == '1bc78c1141aae276dcaef36c2a336cbb6014b220'
+assert new File( deployDir, 'reproducible-1.0-src.zip.sha1' ).text == '5ce34fc133d47cbc9c81195877dbe10b9ec7d864'
+assert new File( deployDir, 'reproducible-1.0-src.tar.sha1' ).text == '0b9dc1da069705a93b4954a198c18bd248822bf8'
+assert new File( deployDir, 'reproducible-1.0-src.jar.sha1' ).text == '780f9c7502b71d073ca4c8b3be77c0d435abe2fe'
diff --git a/src/main/java/org/apache/maven/plugins/assembly/archive/AssemblyArchiver.java b/src/main/java/org/apache/maven/plugins/assembly/archive/AssemblyArchiver.java
index 97ef85f..36d2b4a 100644
--- a/src/main/java/org/apache/maven/plugins/assembly/archive/AssemblyArchiver.java
+++ b/src/main/java/org/apache/maven/plugins/assembly/archive/AssemblyArchiver.java
@@ -25,6 +25,7 @@ import org.apache.maven.plugins.assembly.format.AssemblyFormattingException;
 import org.apache.maven.plugins.assembly.model.Assembly;
 
 import java.io.File;
+import java.util.Date;
 
 /**
  * Creates an archive
@@ -55,13 +56,13 @@ public interface AssemblyArchiver
      * @param configSource          The {@link org.apache.maven.plugins.assembly.AssemblerConfigurationSource}
      * @param recompressZippedFiles recompress zipped files.
      * @param mergeManifestMode     How to handle already existing Manifest files (skip, merge, mergewithoutmain)
-     * @param sourceDateEpoch       Value like SOURCE_DATE_EPOCH as defined in Reproducible Builds
+     * @param sourceDateEpoch       Timestamp for reproducible archive entries
      * @return The resulting archive file.
      * @throws ArchiveCreationException                                                 when creation fails
      * @throws org.apache.maven.plugins.assembly.format.AssemblyFormattingException     when formatting fails
      * @throws org.apache.maven.plugins.assembly.InvalidAssemblerConfigurationException when the configuration is bad
      */
     File createArchive( Assembly assembly, String fullName, String format, AssemblerConfigurationSource configSource,
-                        boolean recompressZippedFiles, String mergeManifestMode, int sourceDateEpoch )
+                        boolean recompressZippedFiles, String mergeManifestMode, Date outputTimestamp )
         throws ArchiveCreationException, AssemblyFormattingException, InvalidAssemblerConfigurationException;
 }
diff --git a/src/main/java/org/apache/maven/plugins/assembly/archive/DefaultAssemblyArchiver.java b/src/main/java/org/apache/maven/plugins/assembly/archive/DefaultAssemblyArchiver.java
index 47e0776..6ee3e4c 100644
--- a/src/main/java/org/apache/maven/plugins/assembly/archive/DefaultAssemblyArchiver.java
+++ b/src/main/java/org/apache/maven/plugins/assembly/archive/DefaultAssemblyArchiver.java
@@ -73,6 +73,7 @@ import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
@@ -134,7 +135,7 @@ public class DefaultAssemblyArchiver
     @Override
     public File createArchive( final Assembly assembly, final String fullName, final String format,
                                final AssemblerConfigurationSource configSource, boolean recompressZippedFiles,
-                               String mergeManifestMode, int sourceDateEpoch )
+                               String mergeManifestMode, Date outputTimestamp )
         throws ArchiveCreationException, AssemblyFormattingException, InvalidAssemblerConfigurationException
     {
         validate( assembly );
@@ -172,7 +173,7 @@ public class DefaultAssemblyArchiver
 
             final Archiver archiver =
                 createArchiver( format, assembly.isIncludeBaseDirectory(), basedir, configSource, containerHandlers,
-                                recompressZippedFiles, mergeManifestMode, sourceDateEpoch );
+                                recompressZippedFiles, mergeManifestMode, outputTimestamp );
 
             archiver.setDestFile( destFile );
 
@@ -284,7 +285,7 @@ public class DefaultAssemblyArchiver
     protected Archiver createArchiver( final String format, final boolean includeBaseDir, final String finalName,
                                        final AssemblerConfigurationSource configSource,
                                        final List<ContainerDescriptorHandler> containerHandlers,
-                                       boolean recompressZippedFiles, String mergeManifestMode, int sourceDateEpoch )
+                                       boolean recompressZippedFiles, String mergeManifestMode, Date outputTimestamp )
         throws NoSuchArchiverException
     {
         Archiver archiver;
@@ -346,10 +347,10 @@ public class DefaultAssemblyArchiver
         archiver.setIgnorePermissions( configSource.isIgnorePermissions() );
         archiver.setForced( !configSource.isUpdateOnly() );
 
-        if ( sourceDateEpoch != 0 )
+        // configure for Reproducible Builds based on outputTimestamp value
+        if ( outputTimestamp != null )
         {
-            // configure for Reproducible Builds based on source date epoch value
-            archiver.configureReproducible( sourceDateEpoch );
+            archiver.configureReproducible( outputTimestamp );
         }
 
         return archiver;
diff --git a/src/main/java/org/apache/maven/plugins/assembly/archive/archiver/AssemblyProxyArchiver.java b/src/main/java/org/apache/maven/plugins/assembly/archive/archiver/AssemblyProxyArchiver.java
index 8e5f978..a8ec9ba 100644
--- a/src/main/java/org/apache/maven/plugins/assembly/archive/archiver/AssemblyProxyArchiver.java
+++ b/src/main/java/org/apache/maven/plugins/assembly/archive/archiver/AssemblyProxyArchiver.java
@@ -1050,9 +1050,9 @@ public class AssemblyProxyArchiver
     }
 
     @Override
-    public void configureReproducible( int sourceDateEpoch )
+    public void configureReproducible( Date outputTimestamp )
     {
-        delegate.configureReproducible( sourceDateEpoch );
+        delegate.configureReproducible( outputTimestamp );
     }
 
     @Override
diff --git a/src/main/java/org/apache/maven/plugins/assembly/mojos/AbstractAssemblyMojo.java b/src/main/java/org/apache/maven/plugins/assembly/mojos/AbstractAssemblyMojo.java
index 8e440e7..4c745e0 100644
--- a/src/main/java/org/apache/maven/plugins/assembly/mojos/AbstractAssemblyMojo.java
+++ b/src/main/java/org/apache/maven/plugins/assembly/mojos/AbstractAssemblyMojo.java
@@ -20,6 +20,7 @@ package org.apache.maven.plugins.assembly.mojos;
  */
 
 import org.apache.maven.archiver.MavenArchiveConfiguration;
+import org.apache.maven.archiver.MavenArchiver;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.plugin.AbstractMojo;
@@ -50,6 +51,7 @@ import org.codehaus.plexus.interpolation.fixed.PropertiesBasedValueSource;
 import javax.annotation.Nonnull;
 import java.io.File;
 import java.util.Collections;
+import java.util.Date;
 import java.util.List;
 import java.util.Properties;
 
@@ -391,14 +393,12 @@ public abstract class AbstractAssemblyMojo
     private List<String> delimiters;
 
     /**
-     * Value like SOURCE_DATE_EPOCH as <a href="https://reproducible-builds.org/specs/source-date-epoch/">defined in
-     * Reproducible Builds</a>: a UNIX timestamp, defined as the number of seconds, excluding leap seconds, since 01 Jan
-     * 1970 00:00:00 UTC.
+     * Timestamp for reproducible archive entries.
      *
      * @since 3.2.0
      */
-    @Parameter( name = "source-date-epoch", defaultValue = "${source-date-epoch}" )
-    private int sourceDateEpoch;
+    @Parameter( defaultValue = "${project.build.outputTimestamp}" )
+    private String outputTimestamp;
 
     public static FixedStringSearchInterpolator mainProjectInterpolator( MavenProject mainProject )
     {
@@ -460,6 +460,9 @@ public abstract class AbstractAssemblyMojo
         // TODO: include dependencies marked for distribution under certain formats
         // TODO: how, might we plug this into an installer, such as NSIS?
 
+        MavenArchiver mavenArchiver = new MavenArchiver();
+        Date outputDate = mavenArchiver.parseOutputTimestamp( outputTimestamp );
+
         boolean warnedAboutMainProjectArtifact = false;
         for ( final Assembly assembly : assemblies )
         {
@@ -482,7 +485,7 @@ public abstract class AbstractAssemblyMojo
                 {
                     final File destFile =
                         assemblyArchiver.createArchive( assembly, fullName, format,
-                            this, isRecompressZippedFiles(), getMergeManifestMode(), sourceDateEpoch );
+                            this, isRecompressZippedFiles(), getMergeManifestMode(), outputDate );
 
                     final MavenProject project = getProject();
                     final String type = project.getArtifact().getType();
diff --git a/src/test/java/org/apache/maven/plugins/assembly/archive/DefaultAssemblyArchiverTest.java b/src/test/java/org/apache/maven/plugins/assembly/archive/DefaultAssemblyArchiverTest.java
index f0c470f..2b1f23f 100644
--- a/src/test/java/org/apache/maven/plugins/assembly/archive/DefaultAssemblyArchiverTest.java
+++ b/src/test/java/org/apache/maven/plugins/assembly/archive/DefaultAssemblyArchiverTest.java
@@ -127,7 +127,7 @@ public class DefaultAssemblyArchiverTest
         mm.replayAll();
 
         final DefaultAssemblyArchiver archiver = createSubject( macMgr, null, null );
-        archiver.createArchive( new Assembly(), "full-name", "zip", configSource, false, null, 0 );
+        archiver.createArchive( new Assembly(), "full-name", "zip", configSource, false, null, null );
 
         mm.verifyAll();
     }
@@ -196,7 +196,7 @@ public class DefaultAssemblyArchiverTest
 
         final DefaultAssemblyArchiver subject = createSubject( macMgr, Collections.singletonList( phase ), null );
 
-        subject.createArchive( assembly, "full-name", "zip", configSource, false, null, 0 );
+        subject.createArchive( assembly, "full-name", "zip", configSource, false, null, null );
 
         mm.verifyAll();
     }
@@ -245,7 +245,7 @@ public class DefaultAssemblyArchiverTest
         final DefaultAssemblyArchiver subject =
             createSubject( macArchiverManager, new ArrayList<AssemblyArchiverPhase>(), null );
 
-        subject.createArchiver( "dummy", false, "finalName", configSource, null, false, null, 0 );
+        subject.createArchiver( "dummy", false, "finalName", configSource, null, false, null, null );
 
         assertEquals( simpleConfig, archiver.getSimpleConfig() );
 
@@ -273,7 +273,7 @@ public class DefaultAssemblyArchiverTest
 
         final DefaultAssemblyArchiver subject = setupStdExpectations( mm, macArchiverManager, configSource );
 
-        subject.createArchiver( "tar", false, "finalName", configSource, null, false, null, 0 );
+        subject.createArchiver( "tar", false, "finalName", configSource, null, false, null, null );
 
         assertNull( ttArchiver.compressionMethod );
         assertEquals( TarLongFileMode.fail, ttArchiver.longFileMode );
@@ -319,7 +319,7 @@ public class DefaultAssemblyArchiverTest
         expect( configSource.getMavenSession() ).andReturn( null ).anyTimes();
         final DefaultAssemblyArchiver subject = setupStdExpectations( mm, macArchiverManager, configSource );
 
-        subject.createArchiver( "war", false, null, configSource, null, false, null, 0 );
+        subject.createArchiver( "war", false, null, configSource, null, false, null, null );
 
         assertFalse( twArchiver.ignoreWebxml );
     }
@@ -350,7 +350,7 @@ public class DefaultAssemblyArchiverTest
         final DefaultAssemblyArchiver subject =
             createSubject( macArchiverManager, new ArrayList<AssemblyArchiverPhase>(), null );
 
-        subject.createArchiver( "zip", false, null, configSource, null, false, null, 0 );
+        subject.createArchiver( "zip", false, null, configSource, null, false, null, null );
     }
 
     @Test