You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2013/06/04 23:45:36 UTC

svn commit: r1489638 - in /maven/enforcer/trunk/enforcer-rules/src: main/java/org/apache/maven/plugins/enforcer/utils/ArtifactMatcher.java site/apt/bannedDependencies.apt.vm test/java/org/apache/maven/plugins/enforcer/utils/TestArtifactMatcher.java

Author: rfscholte
Date: Tue Jun  4 21:45:03 2013
New Revision: 1489638

URL: http://svn.apache.org/r1489638
Log:
[MENFORCER-83] Banned dependencies should support regular expressions

Modified:
    maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/ArtifactMatcher.java
    maven/enforcer/trunk/enforcer-rules/src/site/apt/bannedDependencies.apt.vm
    maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/utils/TestArtifactMatcher.java

Modified: maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/ArtifactMatcher.java
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/ArtifactMatcher.java?rev=1489638&r1=1489637&r2=1489638&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/ArtifactMatcher.java (original)
+++ maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/utils/ArtifactMatcher.java Tue Jun  4 21:45:03 2013
@@ -47,19 +47,25 @@ public final class ArtifactMatcher
         public Pattern( String pattern )
         {
             if ( pattern == null )
+            {
                 throw new NullPointerException( "pattern" );
+            }
 
             this.pattern = pattern;
 
             parts = pattern.split( ":", 6 );
 
             if ( parts.length == 6 )
+            {
                 throw new IllegalArgumentException( "Pattern contains too many delimiters." );
+            }
 
             for ( String part : parts )
             {
                 if ( "".equals( part ) )
+                {
                     throw new IllegalArgumentException( "Pattern or its part is empty." );
+                }
             }
         }
 
@@ -67,7 +73,9 @@ public final class ArtifactMatcher
             throws InvalidVersionSpecificationException
         {
             if ( artifact == null )
+            {
                 throw new NullPointerException( "artifact" );
+            }
 
             switch ( parts.length )
             {
@@ -78,9 +86,10 @@ public final class ArtifactMatcher
                         scope = "compile";
                     }
 
-                    if ( !"*".equals( parts[4] ) && !parts[4].equals( scope ) )
+                    if ( !matches( parts[4], scope ) )
+                    {
                         return false;
-
+                    }
                 case 4:
                     String type = artifact.getType();
                     if ( type == null || type.equals( "" ) )
@@ -88,11 +97,13 @@ public final class ArtifactMatcher
                         type = "jar";
                     }
 
-                    if ( !"*".equals( parts[3] ) && !parts[3].equals( type ) )
+                    if ( !matches( parts[3], type ) )
+                    {
                         return false;
+                    }
 
                 case 3:
-                    if ( !"*".equals( parts[2] ) && !parts[2].equals( artifact.getVersion() ) )
+                    if ( !matches( parts[2], artifact.getVersion() ) )
                     {
                         if ( !AbstractVersionEnforcer.containsVersion( VersionRange.createFromVersionSpec( parts[2] ),
                                                                        new DefaultArtifactVersion(
@@ -103,18 +114,30 @@ public final class ArtifactMatcher
                     }
 
                 case 2:
-                    if ( !"*".equals( parts[1] ) && !parts[1].equals( artifact.getArtifactId() ) )
+                    if ( !matches( parts[1],artifact.getArtifactId() ) )
+                    {
                         return false;
-
+                    }
                 case 1:
-                    if ( !"*".equals( parts[0] ) && !parts[0].equals( artifact.getGroupId() ) )
+                    if ( !matches( parts[0], artifact.getGroupId() ) )
+                    {
                         return false;
+                    }
                     else
+                    {
                         return true;
+                    }
                 default:
                     throw new AssertionError();
             }
         }
+        
+        private boolean matches( String expression, String input )
+        {
+            String regex = expression.replace( ".", "\\." ).replace( "*", ".*" ).replace( ":", "\\:" ).replace( '?', '.' );
+
+            return java.util.regex.Pattern.matches( regex , input );
+        }
 
         @Override
         public String toString()
@@ -135,10 +158,13 @@ public final class ArtifactMatcher
     public ArtifactMatcher( final Collection<String> patterns, final Collection<String> ignorePatterns )
     {
         if ( patterns == null )
+        {
             throw new NullPointerException( "patterns" );
+        }
         if ( ignorePatterns == null )
+        {
             throw new NullPointerException( "ignorePatterns" );
-
+        }
         for ( String pattern : patterns )
         {
             if ( pattern != null && !"".equals( pattern ) )

Modified: maven/enforcer/trunk/enforcer-rules/src/site/apt/bannedDependencies.apt.vm
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/site/apt/bannedDependencies.apt.vm?rev=1489638&r1=1489637&r2=1489638&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/site/apt/bannedDependencies.apt.vm (original)
+++ maven/enforcer/trunk/enforcer-rules/src/site/apt/bannedDependencies.apt.vm Tue Jun  4 21:45:03 2013
@@ -32,7 +32,7 @@ Banned Dependencies
    
    * searchTransitive - if transitive dependencies should be checked.
    
-   * excludes - a list of artifacts to ban. The format is groupId[:artifactId][:version][:type][:scope] where artifactId, version, type, and scope are optional. Wildcards may be used to replace an entire section.
+   * excludes - a list of artifacts to ban. The format is groupId[:artifactId][:version][:type][:scope] where artifactId, version, type, and scope are optional. Wildcards may be used to replace an entire or just parts of a section.
       Examples:
        
         * org.apache.maven
@@ -44,6 +44,8 @@ Banned Dependencies
         * org.apache.maven:*:1.2
         
         * org.apache.maven:*:*:jar:test
+
+        * org.apache.*:maven-*:*
         
         []
 

Modified: maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/utils/TestArtifactMatcher.java
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/utils/TestArtifactMatcher.java?rev=1489638&r1=1489637&r2=1489638&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/utils/TestArtifactMatcher.java (original)
+++ maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/utils/TestArtifactMatcher.java Tue Jun  4 21:45:03 2013
@@ -92,6 +92,13 @@ public class TestArtifactMatcher extends
 		executePatternMatch("*:artifactId:*", "groupId", "artifactId", "1.0", "", "", true);
 		
 		executePatternMatch("*", "groupId", "artifactId", "1.0", "", "", true);
+		
+		// MENFORCER-83
+        executePatternMatch("*upId", "groupId", "artifactId", "1.0", "", "", true);
+        
+        executePatternMatch("gr*pId:?rt?f?ct?d:1.0", "groupId", "artifactId", "1.0", "", "", true);
+        
+        executePatternMatch("org.apache.*:maven-*:*", "org.apache.maven", "maven-core", "3.0", "", "", true);
 	}
 	
 	public void testMatch() throws InvalidVersionSpecificationException