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 ) );
+ }
+ }
}