You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by mi...@apache.org on 2020/10/11 18:28:12 UTC

[maven] 01/01: [MNG-6754] Set the same timestamp in multi module builds

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

michaelo pushed a commit to branch MNG-6754
in repository https://gitbox.apache.org/repos/asf/maven.git

commit a55757b55c6f3c90ce6d4d8636f2811206aab45a
Author: Michael Osipov <mi...@apache.org>
AuthorDate: Sun Oct 11 20:27:49 2020 +0200

    [MNG-6754] Set the same timestamp in multi module builds
    
    Reuse MavenExecutionRequest#getStartTime() for expanded snapshot
    versions when deploying to a remote repository throughout the entire
    reactor for all modules.
    
    This closes #381
---
 .../aether/DefaultRepositorySystemSessionFactory.java        | 11 ++++++-----
 .../maven/repository/internal/RemoteSnapshotMetadata.java    | 12 ++++++++----
 .../repository/internal/RemoteSnapshotMetadataGenerator.java |  9 +++++++--
 .../repository/internal/RemoteSnapshotMetadataTest.java      |  2 +-
 4 files changed, 22 insertions(+), 12 deletions(-)

diff --git a/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java b/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java
index 28f75cd..86cb551 100644
--- a/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java
+++ b/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java
@@ -113,6 +113,7 @@ public class DefaultRepositorySystemSessionFactory
         Map<Object, Object> configProps = new LinkedHashMap<>();
         configProps.put( ConfigurationProperties.USER_AGENT, getUserAgent() );
         configProps.put( ConfigurationProperties.INTERACTIVE, request.isInteractiveMode() );
+        configProps.put( "maven.startTime", request.getStartTime() );
         configProps.putAll( request.getSystemProperties() );
         configProps.putAll( request.getUserProperties() );
 
@@ -281,14 +282,14 @@ public class DefaultRepositorySystemSessionFactory
 
         return props.getProperty( "version", "unknown-version" );
     }
-    
+
     private Collection<FileTransformer> getTransformersForArtifact( final Artifact artifact,
                                                                     final SessionData sessionData )
     {
         TransformerContext context = (TransformerContext) sessionData.get( TransformerContext.KEY );
         Collection<FileTransformer> transformers = new ArrayList<>();
-        
-        // In case of install:install-file there's no transformer context, as the goal is unrelated to the lifecycle. 
+
+        // In case of install:install-file there's no transformer context, as the goal is unrelated to the lifecycle.
         if ( "pom".equals( artifact.getExtension() ) && context != null )
         {
             transformers.add( new FileTransformer()
@@ -306,7 +307,7 @@ public class DefaultRepositorySystemSessionFactory
                         throw new TransformException( e );
                     }
                 }
-                
+
                 @Override
                 public Artifact transformArtifact( Artifact artifact )
                 {
@@ -317,4 +318,4 @@ public class DefaultRepositorySystemSessionFactory
         return Collections.unmodifiableCollection( transformers );
     }
 
-}
\ No newline at end of file
+}
diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadata.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadata.java
index efcfb4d..fe46228 100644
--- a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadata.java
+++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadata.java
@@ -47,19 +47,23 @@ final class RemoteSnapshotMetadata
 
     private final Map<String, SnapshotVersion> versions = new LinkedHashMap<>();
 
-    RemoteSnapshotMetadata( Artifact artifact, boolean legacyFormat )
+    private final Date timestamp;
+
+    RemoteSnapshotMetadata( Artifact artifact, boolean legacyFormat, Date timestamp )
     {
         super( createRepositoryMetadata( artifact, legacyFormat ), null, legacyFormat );
+        this.timestamp = timestamp;
     }
 
-    private RemoteSnapshotMetadata( Metadata metadata, File file, boolean legacyFormat )
+    private RemoteSnapshotMetadata( Metadata metadata, File file, boolean legacyFormat, Date timestamp )
     {
         super( metadata, file, legacyFormat );
+        this.timestamp = timestamp;
     }
 
     public MavenMetadata setFile( File file )
     {
-        return new RemoteSnapshotMetadata( metadata, file, legacyFormat );
+        return new RemoteSnapshotMetadata( metadata, file, legacyFormat, timestamp );
     }
 
     public String getExpandedVersion( Artifact artifact )
@@ -82,7 +86,7 @@ final class RemoteSnapshotMetadata
 
             snapshot = new Snapshot();
             snapshot.setBuildNumber( getBuildNumber( recessive ) + 1 );
-            snapshot.setTimestamp( utcDateFormatter.format( new Date() ) );
+            snapshot.setTimestamp( utcDateFormatter.format( timestamp ) );
 
             Versioning versioning = new Versioning();
             versioning.setSnapshot( snapshot );
diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadataGenerator.java b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadataGenerator.java
index 3218863..2e42bee 100644
--- a/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadataGenerator.java
+++ b/maven-resolver-provider/src/main/java/org/apache/maven/repository/internal/RemoteSnapshotMetadataGenerator.java
@@ -21,6 +21,7 @@ package org.apache.maven.repository.internal;
 
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Date;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
@@ -42,9 +43,13 @@ class RemoteSnapshotMetadataGenerator
 
     private final boolean legacyFormat;
 
+    private final Date timestamp;
+
     RemoteSnapshotMetadataGenerator( RepositorySystemSession session, DeployRequest request )
     {
-        legacyFormat = ConfigUtils.getBoolean( session.getConfigProperties(), false, "maven.metadata.legacy" );
+        legacyFormat = ConfigUtils.getBoolean( session, false, "maven.metadata.legacy" );
+
+        timestamp = (Date) ConfigUtils.getObject( session, new Date(), "maven.startTime" );
 
         snapshots = new LinkedHashMap<>();
 
@@ -74,7 +79,7 @@ class RemoteSnapshotMetadataGenerator
                 RemoteSnapshotMetadata snapshotMetadata = snapshots.get( key );
                 if ( snapshotMetadata == null )
                 {
-                    snapshotMetadata = new RemoteSnapshotMetadata( artifact, legacyFormat );
+                    snapshotMetadata = new RemoteSnapshotMetadata( artifact, legacyFormat, timestamp );
                     snapshots.put( key, snapshotMetadata );
                 }
                 snapshotMetadata.bind( artifact );
diff --git a/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/RemoteSnapshotMetadataTest.java b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/RemoteSnapshotMetadataTest.java
index 3540bf2..566710d 100644
--- a/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/RemoteSnapshotMetadataTest.java
+++ b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/RemoteSnapshotMetadataTest.java
@@ -66,7 +66,7 @@ public class RemoteSnapshotMetadataTest
         String dateBefore = gregorianDate();
 
         RemoteSnapshotMetadata metadata = new RemoteSnapshotMetadata(
-                new DefaultArtifact( "a:b:1-SNAPSHOT" ), false);
+                new DefaultArtifact( "a:b:1-SNAPSHOT" ), false, new Date() );
         metadata.merge( new Metadata() );
 
         String dateAfter = gregorianDate();