You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sl...@apache.org on 2026/10/13 20:28:54 UTC

(maven-common-artifact-filters) branch master updated: [MASSEMBLY-970] Deduplicate artifact filter patterns

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

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


The following commit(s) were added to refs/heads/master by this push:
     new e7ff628  [MASSEMBLY-970] Deduplicate artifact filter patterns
e7ff628 is described below

commit e7ff628c2682ec9b37685be82a04074d87121af3
Author: Vaclav Haisman <vh...@gmail.com>
AuthorDate: Mon Jul 27 22:50:29 2026 +0200

    [MASSEMBLY-970] Deduplicate artifact filter patterns
    
    Duplicate input strings were compiled into distinct Pattern instances. Matching one instance therefore left equivalent duplicates untriggered and caused strict downstream filters to fail.
    
    Fixes apache/maven-assembly-plugin#1178
---
 .../artifact/filter/PatternIncludesArtifactFilter.java  |  2 +-
 .../filter/AbstractPatternArtifactFilterTest.java       | 17 +++++++++++++++++
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/apache/maven/shared/artifact/filter/PatternIncludesArtifactFilter.java b/src/main/java/org/apache/maven/shared/artifact/filter/PatternIncludesArtifactFilter.java
index 4d212a9..e51f462 100644
--- a/src/main/java/org/apache/maven/shared/artifact/filter/PatternIncludesArtifactFilter.java
+++ b/src/main/java/org/apache/maven/shared/artifact/filter/PatternIncludesArtifactFilter.java
@@ -85,7 +85,7 @@ public class PatternIncludesArtifactFilter implements ArtifactFilter, Statistics
         this.actTransitively = actTransitively;
         final Set<Pattern> pat = new LinkedHashSet<>();
         if (patterns != null && !patterns.isEmpty()) {
-            for (String pattern : patterns) {
+            for (String pattern : new LinkedHashSet<>(patterns)) {
                 Pattern p = compile(pattern);
                 pat.add(p);
             }
diff --git a/src/test/java/org/apache/maven/shared/artifact/filter/AbstractPatternArtifactFilterTest.java b/src/test/java/org/apache/maven/shared/artifact/filter/AbstractPatternArtifactFilterTest.java
index 724fb05..fa22d81 100644
--- a/src/test/java/org/apache/maven/shared/artifact/filter/AbstractPatternArtifactFilterTest.java
+++ b/src/test/java/org/apache/maven/shared/artifact/filter/AbstractPatternArtifactFilterTest.java
@@ -506,6 +506,23 @@ public abstract class AbstractPatternArtifactFilterTest {
         }
     }
 
+    @Test
+    public void shouldNotReportDuplicateMatchingPatternsAsMissed() {
+        Artifact artifact = mock(Artifact.class);
+        when(artifact.getGroupId()).thenReturn("org.python");
+        when(artifact.getArtifactId()).thenReturn("jython-standalone");
+        when(artifact.getType()).thenReturn("jar");
+        when(artifact.getBaseVersion()).thenReturn("1.0");
+
+        String pattern = "org.python:jython-standalone";
+        ArtifactFilter filter = createFilter(Arrays.asList(pattern, pattern));
+        StatisticsReportingArtifactFilter statistics = (StatisticsReportingArtifactFilter) filter;
+
+        assertTrue(statistics.hasMissedCriteria());
+        filter.include(artifact);
+        assertFalse(statistics.hasMissedCriteria());
+    }
+
     @Test
     public void partialWildcardShouldNotMatchEmptyComponent() {
         Artifact artifact = mock(Artifact.class);