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 2020/03/02 06:54:45 UTC

[maven-studies] 02/02: save reference artifacts when no reference buildinfo available

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

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

commit cebcd9ca3a1a9aa10be0173e71e27c99e3a201bf
Author: Hervé Boutemy <hb...@apache.org>
AuthorDate: Mon Mar 2 07:53:38 2020 +0100

    save reference artifacts when no reference buildinfo available
---
 .../maven/plugins/buildinfo/BuildInfoWriter.java   |  9 +++
 .../apache/maven/plugins/buildinfo/SaveMojo.java   | 76 +++++++++++++++++-----
 2 files changed, 67 insertions(+), 18 deletions(-)

diff --git a/src/main/java/org/apache/maven/plugins/buildinfo/BuildInfoWriter.java b/src/main/java/org/apache/maven/plugins/buildinfo/BuildInfoWriter.java
index c4768f5..33ec2e9 100644
--- a/src/main/java/org/apache/maven/plugins/buildinfo/BuildInfoWriter.java
+++ b/src/main/java/org/apache/maven/plugins/buildinfo/BuildInfoWriter.java
@@ -21,6 +21,8 @@ package org.apache.maven.plugins.buildinfo;
 
 import java.io.File;
 import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
 
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.plugin.MojoExecutionException;
@@ -35,6 +37,7 @@ public class BuildInfoWriter
     private final Log log;
     private final PrintWriter p;
     private final boolean mono;
+    private final List<Artifact> artifacts = new ArrayList<>();
     private int projectCount = -1;
 
     BuildInfoWriter( Log log, PrintWriter p, boolean mono )
@@ -153,5 +156,11 @@ public class BuildInfoWriter
         p.println( prefix + i + ".filename=" + file.getName() );
         p.println( prefix + i + ".length=" + file.length() );
         p.println( prefix + i + ".checksums.sha512=" + DigestHelper.calculateSha512( file ) );
+        artifacts.add( artifact );
+    }
+
+    public List<Artifact> getArtifacts()
+    {
+        return artifacts;
     }
 }
diff --git a/src/main/java/org/apache/maven/plugins/buildinfo/SaveMojo.java b/src/main/java/org/apache/maven/plugins/buildinfo/SaveMojo.java
index 71056e1..33726b0 100644
--- a/src/main/java/org/apache/maven/plugins/buildinfo/SaveMojo.java
+++ b/src/main/java/org/apache/maven/plugins/buildinfo/SaveMojo.java
@@ -151,7 +151,7 @@ public class SaveMojo
             }
         }
 
-        generateBuildinfo( mono );
+        List<Artifact> artifacts = generateBuildinfo( mono );
         getLog().info( "Saved " + ( mono ? "" : "aggregate " ) + "info on build to " + buildinfoFile );
 
         if ( attach )
@@ -165,14 +165,12 @@ public class SaveMojo
 
         if ( referenceRepo != null )
         {
-            ArtifactRepository repo = createReferenceRepo();
-
             getLog().info( "Checking against reference build from " + referenceRepo + "..." );
-            checkAgainstReference( repo );
+            checkAgainstReference( mono, artifacts );
         }
     }
 
-    private void generateBuildinfo( boolean mono )
+    private List<Artifact> generateBuildinfo( boolean mono )
             throws MojoExecutionException
     {
         MavenProject root = mono ? project : getExecutionRoot();
@@ -198,6 +196,7 @@ public class SaveMojo
                     bi.printArtifacts( project );
                 }
             }
+            return bi.getArtifacts();
         }
         catch ( IOException e )
         {
@@ -217,44 +216,85 @@ public class SaveMojo
         return null;
     }
 
-    private void checkAgainstReference( ArtifactRepository repo )
+    private void checkAgainstReference( boolean mono, List<Artifact> artifacts )
         throws MojoExecutionException
     {
+        ArtifactRepository repo = createReferenceRepo();
         referenceDir.mkdirs();
 
         File referenceBuildinfo = downloadReferenceBuildinfo( repo );
+
+        if ( !referenceBuildinfo.canRead() )
+        {
+            // download reference artifacts
+            for ( Artifact artifact : artifacts )
+            {
+                try
+                {
+                    downloadReference( repo, artifact );
+                }
+                catch ( ArtifactNotFoundException e )
+                {
+                    getLog().warn( "Reference artifact not found " + artifact );
+                }
+            }
+
+            // generate buildinfo from reference artifacts
+            try ( PrintWriter p =
+                new PrintWriter( new BufferedWriter( new OutputStreamWriter( new FileOutputStream( referenceBuildinfo ),
+                                                                             Charsets.ISO_8859_1 ) ) ) )
+            {
+                BuildInfoWriter bi = new BuildInfoWriter( getLog(), p, mono );
+
+                // TODO artifact(s) fingerprints
+            }
+            catch ( IOException e )
+            {
+                throw new MojoExecutionException( "Error creating file " + referenceBuildinfo, e );
+            }
+        }
+
+        // TODO compare reference buildinfo vs actual
     }
 
     private File downloadReferenceBuildinfo( ArtifactRepository repo )
         throws MojoExecutionException
     {
-        File referenceBuildinfo = new File( referenceDir, buildinfoFile.getName() );
-
         Artifact buildinfo =
                         artifactFactory.createArtifactWithClassifier( project.getGroupId(), project.getArtifactId(),
                                                                       project.getVersion(), "buildinfo", "" );
         try
         {
-            artifactResolver.resolve( buildinfo, Collections.singletonList( repo ), localRepository );
+            downloadReference( repo, buildinfo );
 
-            FileUtils.copyFile( buildinfo.getFile(), referenceBuildinfo );
-            getLog().info( "Reference buildinfo file found, copied to " + referenceBuildinfo );
-        }
-        catch ( ArtifactResolutionException are )
-        {
-            throw new MojoExecutionException( "Error resolving buildinfo artifact " + buildinfo, are );
+            getLog().info( "Reference buildinfo file found, copied to " + buildinfo.getFile() );
         }
         catch ( ArtifactNotFoundException e )
         {
             getLog().warn( "Reference buildinfo file not found: "
                 + "it will be generated from downloaded reference artifacts" );
         }
+
+        return buildinfo.getFile();
+    }
+
+    private void downloadReference( ArtifactRepository repo, Artifact artifact )
+        throws MojoExecutionException, ArtifactNotFoundException
+    {
+        try
+        {
+            artifactResolver.resolve( artifact, Collections.singletonList( repo ), localRepository );
+
+            FileUtils.copyFile( artifact.getFile(), new File( referenceDir, artifact.getFile().getName() ) );
+        }
+        catch ( ArtifactResolutionException are )
+        {
+            throw new MojoExecutionException( "Error resolving reference artifact " + artifact, are );
+        }
         catch ( IOException ioe )
         {
-            throw new MojoExecutionException( "Error copying buildinfo artifact " + buildinfo, ioe );
+            throw new MojoExecutionException( "Error copying reference artifact " + artifact, ioe );
         }
-
-        return referenceBuildinfo;
     }
 
     private ArtifactRepository createReferenceRepo()