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

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


The following commit(s) were added to refs/heads/master by this push:
     new 3f83ae1  [MARTIFACT-48] ignore by glob on $groupId/$filename
3f83ae1 is described below

commit 3f83ae17e47e133491f8637af501303b3942e3be
Author: HervĂ© Boutemy <[email protected]>
AuthorDate: Fri Sep 22 07:00:20 2023 +0200

    [MARTIFACT-48] ignore by glob on $groupId/$filename
---
 src/it/buildinfo-multi/pom.xml                     | 17 ++++++++++++
 src/it/buildinfo-multi/verify.groovy               |  4 +++
 src/it/compare-mono/invoker.properties             |  4 +--
 src/it/compare-mono/pom.xml                        | 14 ++++++++++
 src/it/compare-mono/verify.groovy                  |  2 ++
 .../artifact/buildinfo/AbstractBuildinfoMojo.java  |  8 +++---
 .../artifact/buildinfo/BuildInfoWriter.java        | 32 ++++++++++------------
 .../plugins/artifact/buildinfo/CompareMojo.java    | 18 ++++++++++--
 8 files changed, 72 insertions(+), 27 deletions(-)

diff --git a/src/it/buildinfo-multi/pom.xml b/src/it/buildinfo-multi/pom.xml
index 0bf5e32..3100ff9 100644
--- a/src/it/buildinfo-multi/pom.xml
+++ b/src/it/buildinfo-multi/pom.xml
@@ -56,6 +56,18 @@
 
   <build>
     <plugins>
+      <plugin>
+        <groupId>org.spdx</groupId>
+        <artifactId>spdx-maven-plugin</artifactId>
+        <version>0.6.3</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>createSPDX</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
       <plugin>
         <groupId>@project.groupId@</groupId>
         <artifactId>@project.artifactId@</artifactId>
@@ -65,6 +77,11 @@
             <goals>
               <goal>buildinfo</goal>
             </goals>
+            <configuration>
+              <ignore>
+                <ignore>*/*.spdx.json</ignore>
+              </ignore>
+            </configuration>
           </execution>
         </executions>
       </plugin>
diff --git a/src/it/buildinfo-multi/verify.groovy 
b/src/it/buildinfo-multi/verify.groovy
index 81e47b1..be0f8e5 100644
--- a/src/it/buildinfo-multi/verify.groovy
+++ b/src/it/buildinfo-multi/verify.groovy
@@ -39,9 +39,13 @@ assert buildinfo.contains( "version=1.0-SNAPSHOT" )
 assert buildinfo.contains( 
"outputs.1.coordinates=org.apache.maven.plugins.it:multi-modA" )
 assert buildinfo.contains( "outputs.1.0.filename=multi-modA-1.0-SNAPSHOT.pom" )
 assert buildinfo.contains( "outputs.1.1.filename=multi-modA-1.0-SNAPSHOT.jar" )
+assert !buildinfo.contains( "outputs.1.2.filename=" )
+assert buildinfo.contains( "# ignored multi-modA-1.0-SNAPSHOT.spdx.json" )
 assert buildinfo.contains( 
"outputs.2.coordinates=org.apache.maven.plugins.it:multi-modB" )
 assert buildinfo.contains( "outputs.2.0.filename=multi-modB-1.0-SNAPSHOT.pom" )
 assert buildinfo.contains( "outputs.2.1.filename=multi-modB-1.0-SNAPSHOT.jar" )
+assert !buildinfo.contains( "outputs.2.2.filename=" )
+assert buildinfo.contains( "# ignored multi-modB-1.0-SNAPSHOT.spdx.json" )
 assert !buildinfo.contains( ".buildinfo" )
 assert buildinfo.contains( "mvn.aggregate.artifact-id=multi-modB" )
 
diff --git a/src/it/compare-mono/invoker.properties 
b/src/it/compare-mono/invoker.properties
index 8bd5fc5..5606b12 100644
--- a/src/it/compare-mono/invoker.properties
+++ b/src/it/compare-mono/invoker.properties
@@ -17,6 +17,6 @@
 
 # initial reference build: install
 invoker.goals.1=clean install
-# second build: package (could be verify, but not install to avoid overriding 
reference)
-invoker.goals.2=clean package artifact:compare
+# second build: verify (could be package, but not install to avoid overriding 
reference)
+invoker.goals.2=clean verify artifact:compare -Dbuildinfo.ignore=*/*.spdx.json
 invoker.buildResult.2=failure
diff --git a/src/it/compare-mono/pom.xml b/src/it/compare-mono/pom.xml
index 098b7c5..750703e 100644
--- a/src/it/compare-mono/pom.xml
+++ b/src/it/compare-mono/pom.xml
@@ -70,5 +70,19 @@
         </plugin>
       </plugins>
     </pluginManagement>
+    <plugins>
+      <plugin>
+        <groupId>org.spdx</groupId>
+        <artifactId>spdx-maven-plugin</artifactId>
+        <version>0.6.3</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>createSPDX</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
   </build>
 </project>
diff --git a/src/it/compare-mono/verify.groovy 
b/src/it/compare-mono/verify.groovy
index 413d44b..4fd75f0 100644
--- a/src/it/compare-mono/verify.groovy
+++ b/src/it/compare-mono/verify.groovy
@@ -28,8 +28,10 @@ String compare = compareFile.text
 assert compare.contains( "version=1.0-SNAPSHOT" )
 assert compare.contains( "ok=1" )
 assert compare.contains( "ko=1" )
+assert compare.contains( "ignored=1" )
 assert compare.contains( 'okFiles="mono-1.0-SNAPSHOT.pom"' )
 assert compare.contains( 'koFiles="mono-1.0-SNAPSHOT.jar"' )
+assert compare.contains( 'ignoredFiles="mono-1.0-SNAPSHOT.spdx.json"' )
 if( File.separator == '/' ) {
   assert compare.contains( '# diffoscope 
target/reference/org.apache.maven.plugins.it.compare/mono-1.0-SNAPSHOT.jar 
target/mono-1.0-SNAPSHOT.jar' )
 } else {
diff --git 
a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/AbstractBuildinfoMojo.java
 
b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/AbstractBuildinfoMojo.java
index b7574dc..4f20681 100644
--- 
a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/AbstractBuildinfoMojo.java
+++ 
b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/AbstractBuildinfoMojo.java
@@ -29,7 +29,6 @@ import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 import org.apache.maven.archiver.MavenArchiver;
 import org.apache.maven.artifact.Artifact;
@@ -79,10 +78,11 @@ public abstract class AbstractBuildinfoMojo extends 
AbstractMojo {
     private boolean ignoreJavadoc;
 
     /**
-     * Artifacts to ignore, specified as <code>extension</code> or 
<code>classifier.extension</code>.
+     * Artifacts to ignore, specified as a glob matching against 
<code>${groupId}/${filename}</code>, for example
+     * <code>*</>/*.xml</code>.
      */
     @Parameter(property = "buildinfo.ignore", defaultValue = "")
-    private Set<String> ignore;
+    private List<String> ignore;
 
     /**
      * Detect projects/modules with install or deploy skipped: avoid taking 
fingerprints.
@@ -216,7 +216,7 @@ public abstract class AbstractBuildinfoMojo extends 
AbstractMojo {
      * @param mono is it a mono-module build?
      * @return a Map of artifacts added to the build info with their 
associated property key prefix
      *         (<code>outputs.[#module.].#artifact</code>)
-     * @throws MojoExecutionException
+     * @throws MojoExecutionException if anything goes wrong
      */
     protected Map<Artifact, String> generateBuildinfo(boolean mono) throws 
MojoExecutionException {
         MavenProject root = mono ? project : getExecutionRoot();
diff --git 
a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/BuildInfoWriter.java
 
b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/BuildInfoWriter.java
index cb3d46d..42d1dd2 100644
--- 
a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/BuildInfoWriter.java
+++ 
b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/BuildInfoWriter.java
@@ -22,14 +22,9 @@ import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.PrintWriter;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.nio.file.StandardCopyOption;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
+import java.nio.file.*;
+import java.util.*;
+import java.util.stream.Collectors;
 
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.maven.artifact.Artifact;
@@ -41,6 +36,7 @@ import org.apache.maven.plugin.logging.Log;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.rtinfo.RuntimeInformation;
 import org.apache.maven.shared.utils.PropertyUtils;
+import org.apache.maven.shared.utils.StringUtils;
 import org.apache.maven.toolchain.Toolchain;
 
 /**
@@ -55,7 +51,7 @@ class BuildInfoWriter {
     private final Map<Artifact, String> artifacts = new LinkedHashMap<>();
     private int projectCount = -1;
     private boolean ignoreJavadoc = true;
-    private Set<String> ignore;
+    private List<PathMatcher> ignore;
     private Toolchain toolchain;
 
     BuildInfoWriter(
@@ -223,6 +219,8 @@ class BuildInfoWriter {
                 continue;
             }
             if (isIgnore(attached)) {
+                p.println("# ignored " + getArtifactFilename(attached));
+                artifacts.put(attached, null);
                 continue;
             }
             printArtifact(prefix, n++, attached);
@@ -251,7 +249,7 @@ class BuildInfoWriter {
         artifacts.put(artifact, prefix);
     }
 
-    private String getArtifactFilename(Artifact artifact) {
+    static String getArtifactFilename(Artifact artifact) {
         StringBuilder path = new StringBuilder(128);
 
         
path.append(artifact.getArtifactId()).append('-').append(artifact.getBaseVersion());
@@ -262,8 +260,7 @@ class BuildInfoWriter {
 
         ArtifactHandler artifactHandler = artifact.getArtifactHandler();
 
-        if (artifactHandler.getExtension() != null
-                && artifactHandler.getExtension().length() > 0) {
+        if (StringUtils.isNotEmpty(artifactHandler.getExtension())) {
             path.append('.').append(artifactHandler.getExtension());
         }
 
@@ -317,15 +314,14 @@ class BuildInfoWriter {
         this.ignoreJavadoc = ignoreJavadoc;
     }
 
-    void setIgnore(Set<String> ignore) {
-        this.ignore = ignore;
+    void setIgnore(List<String> ignore) {
+        FileSystem fs = FileSystems.getDefault();
+        this.ignore = ignore.stream().map(i -> fs.getPathMatcher("glob:" + 
i)).collect(Collectors.toList());
     }
 
     private boolean isIgnore(Artifact attached) {
-        String classifier = attached.getClassifier();
-        String extension = attached.getType();
-        String search = (classifier == null) ? "" : (classifier + '.') + 
extension;
-        return ignore.contains(search);
+        Path path = Paths.get(attached.getGroupId() + '/' + 
getArtifactFilename(attached));
+        return ignore.stream().anyMatch(m -> m.matches(path));
     }
 
     public void setToolchain(Toolchain toolchain) {
diff --git 
a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/CompareMojo.java 
b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/CompareMojo.java
index aa1880b..52d49d1 100644
--- a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/CompareMojo.java
+++ b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/CompareMojo.java
@@ -45,6 +45,8 @@ import org.eclipse.aether.RepositorySystem;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.repository.RemoteRepository;
 
+import static 
org.apache.maven.plugins.artifact.buildinfo.BuildInfoWriter.getArtifactFilename;
+
 /**
  * Compare current build output (from {@code package}) against reference 
either previously {@code install}-ed or downloaded from a remote
  * repository: comparison results go to {@code .buildcompare} file.
@@ -166,10 +168,16 @@ public class CompareMojo extends AbstractBuildinfoMojo {
         List<String> okFilenames = new ArrayList<>();
         List<String> koFilenames = new ArrayList<>();
         List<String> diffoscopes = new ArrayList<>();
+        List<String> ignored = new ArrayList<>();
         File referenceDir = referenceBuildinfo.getParentFile();
         for (Map.Entry<Artifact, String> entry : artifacts.entrySet()) {
             Artifact artifact = entry.getKey();
             String prefix = entry.getValue();
+            if (prefix == null) {
+                // ignored file
+                ignored.add(getArtifactFilename(artifact));
+                continue;
+            }
 
             String[] checkResult = checkArtifact(artifact, prefix, reference, 
actual, referenceDir);
             String filename = checkResult[0];
@@ -184,14 +192,15 @@ public class CompareMojo extends AbstractBuildinfoMojo {
             }
         }
 
-        int ko = artifacts.size() - ok;
+        int ko = artifacts.size() - ok - ignored.size();
         int missing = reference.size() / 3 /* 3 property keys par file: 
filename, length and checksums.sha512 */;
 
         if (ko + missing > 0) {
             getLog().error("Reproducible Build output summary: "
                     + MessageUtils.buffer().success(ok + " files ok")
                     + ", " + MessageUtils.buffer().failure(ko + " different")
-                    + ((missing == 0) ? "" : (", " + 
MessageUtils.buffer().failure(missing + " missing"))));
+                    + ((missing == 0) ? "" : (", " + 
MessageUtils.buffer().failure(missing + " missing")))
+                    + ((ignored.isEmpty()) ? "" : (", " + 
MessageUtils.buffer().warning(ignored.size() + " ignored"))));
             getLog().error("see "
                     + MessageUtils.buffer()
                             .project("diff " + relative(referenceBuildinfo) + 
" " + relative(buildinfoFile))
@@ -199,7 +208,8 @@ public class CompareMojo extends AbstractBuildinfoMojo {
             getLog().error("see also 
https://maven.apache.org/guides/mini/guide-reproducible-builds.html";);
         } else {
             getLog().info("Reproducible Build output summary: "
-                    + MessageUtils.buffer().success(ok + " files ok"));
+                    + MessageUtils.buffer().success(ok + " files ok")
+                    + ((ignored.isEmpty()) ? "" : (", " + 
MessageUtils.buffer().warning(ignored.size() + " ignored"))));
         }
 
         // save .compare file
@@ -210,8 +220,10 @@ public class CompareMojo extends AbstractBuildinfoMojo {
             p.println("version=" + project.getVersion());
             p.println("ok=" + ok);
             p.println("ko=" + ko);
+            p.println("ignored=" + ignored.size());
             p.println("okFiles=\"" + StringUtils.join(okFilenames.iterator(), 
" ") + '"');
             p.println("koFiles=\"" + StringUtils.join(koFilenames.iterator(), 
" ") + '"');
+            p.println("ignoredFiles=\"" + StringUtils.join(ignored.iterator(), 
" ") + '"');
             Properties ref = 
PropertyUtils.loadOptionalProperties(referenceBuildinfo);
             String v = ref.getProperty("java.version");
             if (v != null) {

Reply via email to