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 <hbout...@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()