You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by cs...@apache.org on 2022/06/08 07:33:46 UTC

[maven-common-artifact-filters] 01/01: [MASSEMBLY-955] Bugfix for classifier in pattern

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

cstamas pushed a commit to branch massembly-955-bugfix
in repository https://gitbox.apache.org/repos/asf/maven-common-artifact-filters.git

commit 802a2e4821d944e102e0125b4f3cee199571b4d6
Author: Tamas Cservenak <ta...@cservenak.net>
AuthorDate: Wed Jun 8 09:32:25 2022 +0200

    [MASSEMBLY-955] Bugfix for classifier in pattern
    
    Parsing of pattern with classifier was busted, that
    prevented use cases like before rewrite, that was again
    busted due early return (not happening since rewrite).
---
 .../filter/PatternIncludesArtifactFilter.java      | 20 ++++---------
 .../filter/AbstractPatternArtifactFilterTest.java  | 34 ++++++++++++++++++++++
 2 files changed, 40 insertions(+), 14 deletions(-)

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 02e4d1b..476c0e2 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
@@ -158,6 +158,7 @@ public class PatternIncludesArtifactFilter
                             emptyOrChars( artifact.getGroupId() ),
                             emptyOrChars( artifact.getArtifactId() ),
                             emptyOrChars( artifact.getType() ),
+                            emptyOrChars( artifact.getClassifier() ),
                             emptyOrChars( artifact.getBaseVersion() )
                     };
         Boolean match = match( artifactGatvCharArray );
@@ -543,17 +544,8 @@ public class PatternIncludesArtifactFilter
             {
                 throw new IllegalArgumentException( "Invalid pattern: " + pattern );
             }
-            // we only accept 5 tokens if the classifier = '*'
-            if ( tokens.length == 5 )
-            {
-                if ( tokens[3] != ANY )
-                {
-                    throw new IllegalArgumentException( "Invalid pattern: " + pattern );
-                }
-                tokens = new char[][] { tokens[0], tokens[1], tokens[2], tokens[4] };
-            }
             //
-            // Check the 4 tokens and build an appropriate Pattern
+            // Check the tokens and build an appropriate Pattern
             // Special care needs to be taken if the first or the last part is '*'
             // because this allows the '*' to match multiple tokens
             //
@@ -673,10 +665,10 @@ public class PatternIncludesArtifactFilter
                     }
                 }
             }
-            if ( tokens.length == 4 )
+            if ( tokens.length >= 4 )
             {
                 List<Pattern> patterns = new ArrayList<>();
-                for ( int i = 0; i < 4; i++ )
+                for ( int i = 0; i < tokens.length; i++ )
                 {
                     if ( tokens[i] != ANY )
                     {
@@ -713,7 +705,7 @@ public class PatternIncludesArtifactFilter
                 break;
             }
         }
-        if ( hasWildcard || posMax == 3 )
+        if ( hasWildcard || posMax == 4 )
         {
             return new PosPattern( pattern, token, posMin, posMax );
         }
@@ -899,7 +891,7 @@ public class PatternIncludesArtifactFilter
         {
             for ( int i = posMin; i <= posMax; i++ )
             {
-                if ( match( patternCharArray, parts[i], i == 3 ) )
+                if ( match( patternCharArray, parts[i], i == 4 ) )
                 {
                     return true;
                 }
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 cb4ad8d..f3871d5 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
@@ -544,4 +544,38 @@ public abstract class AbstractPatternArtifactFilterTest
             assertTrue( filter.include( artifact ) );
         }
     }
+
+    @Test
+    public void testmassembly955()
+    {
+        Artifact artifact1 = mock( Artifact.class );
+        when( artifact1.getGroupId() ).thenReturn( "org.python" );
+        when( artifact1.getArtifactId() ).thenReturn( "jython-standalone" );
+        when( artifact1.getType() ).thenReturn( "jar" );
+        when( artifact1.getBaseVersion() ).thenReturn( "1.0" );
+
+        Artifact artifact2 = mock( Artifact.class );
+        when( artifact2.getGroupId() ).thenReturn( "org.teiid" );
+        when( artifact2.getArtifactId() ).thenReturn( "teiid" );
+        when( artifact2.getType() ).thenReturn( "jar" );
+        when( artifact2.getClassifier() ).thenReturn( "jdbc" );
+        when( artifact2.getBaseVersion() ).thenReturn( "1.0" );
+
+        final List<String> patterns = new ArrayList<>();
+        patterns.add( "org.teiid:teiid:*:jdbc:*" );
+        patterns.add( "org.python:jython-standalone" );
+
+        final ArtifactFilter filter = createFilter( patterns );
+
+        if ( isInclusionNotExpected() )
+        {
+            assertFalse( filter.include( artifact1 ) );
+            assertFalse( filter.include( artifact2 ) );
+        }
+        else
+        {
+            assertTrue( filter.include( artifact1 ) );
+            assertTrue( filter.include( artifact2 ) );
+        }
+    }
 }