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:21:15 UTC

[maven-archiver] branch MSHARED-837 created (now 5f07f22)

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

hboutemy pushed a change to branch MSHARED-837
in repository https://gitbox.apache.org/repos/asf/maven-archiver.git.


      at 5f07f22  MSHARED-837 add an API to configure outputTimestamp

This branch includes the following new commits:

     new 5f07f22  MSHARED-837 add an API to configure outputTimestamp

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[maven-archiver] 01/01: MSHARED-837 add an API to configure outputTimestamp

Posted by hb...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

hboutemy pushed a commit to branch MSHARED-837
in repository https://gitbox.apache.org/repos/asf/maven-archiver.git

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

    MSHARED-837 add an API to configure outputTimestamp
---
 pom.xml                                            |  2 +-
 .../org/apache/maven/archiver/MavenArchiver.java   | 52 ++++++++++++++++++++++
 .../apache/maven/archiver/MavenArchiverTest.java   | 18 ++++++++
 3 files changed, 71 insertions(+), 1 deletion(-)

diff --git a/pom.xml b/pom.xml
index 56386f9..616797d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -93,7 +93,7 @@
     <dependency>
       <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-archiver</artifactId>
-      <version>4.1.0</version>
+      <version>4.2.0-SNAPSHOT</version>
     </dependency>
     <!--
       ! plexus-archiver needs this, or else maven-artifact will
diff --git a/src/main/java/org/apache/maven/archiver/MavenArchiver.java b/src/main/java/org/apache/maven/archiver/MavenArchiver.java
index 521f5c2..82cd3a9 100644
--- a/src/main/java/org/apache/maven/archiver/MavenArchiver.java
+++ b/src/main/java/org/apache/maven/archiver/MavenArchiver.java
@@ -42,8 +42,12 @@ import org.apache.maven.shared.utils.StringUtils;
 import javax.lang.model.SourceVersion;
 import java.io.File;
 import java.io.IOException;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
@@ -758,4 +762,52 @@ public class MavenArchiver
         this.buildJdkSpecDefaultEntry = buildJdkSpecDefaultEntry;
     }
 
+    /**
+     * Parse output timestamp configured for Reproducible Builds' archive entries, formatted as ISO-8601
+     * <code>yyyy-MM-dd'T'HH:mm:ssX</code>.
+     *
+     * @param outputTimestamp the value of <code>${project.build.outputTimestamp}</code> (may be <code>null</code>)
+     * @return the parsed timestamp, may be <code>null</code> if <code>null</code> input or input contains only 1
+     *         character
+     * @since 3.4.1
+     */
+    public Date parseOutputTimestamp( String outputTimestamp )
+    {
+        if ( outputTimestamp == null || outputTimestamp.length() < 2 )
+        {
+            // no timestamp configured (1 character configuration is useful to override a full value during pom
+            // inheritance)
+            return null;
+        }
+
+        DateFormat df = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ssX" ); 
+        try
+        {
+            return df.parse( outputTimestamp );
+        }
+        catch ( ParseException pe )
+        {
+            throw new IllegalArgumentException( "Invalid project.build.outputTimestamp value '" + outputTimestamp + "'",
+                                                pe );
+        }
+    }
+
+    /**
+     * Configure Reproducible Builds archive creation if a timestamp is provided.
+     *
+     * @param outputTimestamp the value of <code>${project.build.outputTimestamp}</code> (may be <code>null</code>)
+     * @return the parsed timestamp
+     * @since 3.4.1
+     * @see #parseOutputTimestamp
+     * @see Archiver#configureReproducible
+     */
+    public Date configureReproducible( String outputTimestamp )
+    {
+        Date outputDate = parseOutputTimestamp( outputTimestamp );
+        if ( outputDate != null )
+        {
+            getArchiver().configureReproducible( outputDate );
+        }
+        return outputDate;
+    }
 }
diff --git a/src/test/java/org/apache/maven/archiver/MavenArchiverTest.java b/src/test/java/org/apache/maven/archiver/MavenArchiverTest.java
index 6e0e81e..609383a 100644
--- a/src/test/java/org/apache/maven/archiver/MavenArchiverTest.java
+++ b/src/test/java/org/apache/maven/archiver/MavenArchiverTest.java
@@ -1503,4 +1503,22 @@ public class MavenArchiverTest
         }
 
     }
+
+    @Test
+    public void testParseOutputTimestamp()
+    {
+        MavenArchiver archiver = new MavenArchiver();
+        
+        assertNull( archiver.parseOutputTimestamp( null ) );
+        assertNull( archiver.parseOutputTimestamp( "" ) );
+        assertNull( archiver.parseOutputTimestamp( "." ) );
+        assertNull( archiver.parseOutputTimestamp( " " ) );
+        assertNull( archiver.parseOutputTimestamp( "_" ) );
+
+        assertEquals( 1570300662000L, archiver.parseOutputTimestamp( "2019-10-05T18:37:42Z" ).getTime() );
+        assertEquals( 1570300662000L, archiver.parseOutputTimestamp( "2019-10-05T20:37:42+02:00" ).getTime() );
+        assertEquals( 1570300662000L, archiver.parseOutputTimestamp( "2019-10-05T16:37:42-02:00" ).getTime() );
+        assertEquals( 1570300662000L, archiver.parseOutputTimestamp( "2019-10-05T20:37:42+0200" ).getTime() );
+        assertEquals( 1570300662000L, archiver.parseOutputTimestamp( "2019-10-05T16:37:42-0200" ).getTime() );
+    }
 }