You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by st...@apache.org on 2009/11/21 13:40:37 UTC

svn commit: r882889 - in /maven/enforcer/trunk/enforcer-rules/src: main/java/org/apache/maven/plugins/enforcer/ test/java/org/apache/maven/plugins/enforcer/ test/resources/requireNoRepositories/snapshot-plugin-repositories/ test/resources/requireNoRepo...

Author: stephenc
Date: Sat Nov 21 12:40:35 2009
New Revision: 882889

URL: http://svn.apache.org/viewvc?rev=882889&view=rev
Log:
[MENFORCER-87] Adding two new parameters to requireNoRepositories which can allow the permission of repositories which are only enabled for snapshots

These two parameters default to false.

In actuality, when true they just ban repositories which are enabled for releases. So you could have a repository which was enabled for nothing, and that would be OK. I see that as being no harm

Added:
    maven/enforcer/trunk/enforcer-rules/src/test/resources/requireNoRepositories/snapshot-plugin-repositories/
      - copied from r882884, maven/enforcer/trunk/enforcer-rules/src/test/resources/requireNoRepositories/with-plugin-repositories/
    maven/enforcer/trunk/enforcer-rules/src/test/resources/requireNoRepositories/snapshot-repositories/
      - copied from r882884, maven/enforcer/trunk/enforcer-rules/src/test/resources/requireNoRepositories/with-repositories/
Modified:
    maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireNoRepositories.java
    maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireNoRepositories.java
    maven/enforcer/trunk/enforcer-rules/src/test/resources/requireNoRepositories/snapshot-plugin-repositories/child/pom.xml
    maven/enforcer/trunk/enforcer-rules/src/test/resources/requireNoRepositories/snapshot-plugin-repositories/pom.xml
    maven/enforcer/trunk/enforcer-rules/src/test/resources/requireNoRepositories/snapshot-repositories/child/pom.xml
    maven/enforcer/trunk/enforcer-rules/src/test/resources/requireNoRepositories/snapshot-repositories/pom.xml

Modified: maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireNoRepositories.java
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireNoRepositories.java?rev=882889&r1=882888&r2=882889&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireNoRepositories.java (original)
+++ maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireNoRepositories.java Sat Nov 21 12:40:35 2009
@@ -19,13 +19,6 @@
  * under the License.
  */
 
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
 import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
@@ -38,9 +31,16 @@
 import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
 /**
  * This rule checks that this pom or its parents don't define a repository.
- * 
+ *
  * @author <a href="mailto:brianf@apache.org">Brian Fox</a>
  */
 public class RequireNoRepositories
@@ -66,6 +66,16 @@
      */
     public List allowedPluginRepositories = Collections.EMPTY_LIST;
 
+    /**
+     * Whether to allow repositories which only resolve snapshots. By default they are banned.
+     */
+    public boolean allowSnapshotRepositories = false;
+
+    /**
+     * Whether to allow plugin repositories which only resolve snapshots. By default they are banned.
+     */
+    public boolean allowSnapshotPluginRepositories = false;
+
     /*
      * (non-Javadoc)
      * @see
@@ -97,12 +107,14 @@
                     List repos = model.getRepositories();
                     if ( repos != null && !repos.isEmpty() )
                     {
-                        List bannedRepos = findBannedRepositories( repos, allowedRepositories );
+                        List bannedRepos =
+                            findBannedRepositories( repos, allowedRepositories, allowSnapshotRepositories );
                         if ( !bannedRepos.isEmpty() )
                         {
                             badModels.add( model );
-                            newMsg.append( model.getGroupId() + ":" + model.getArtifactId() + " version:"
-                                + model.getVersion() + " has repositories " + bannedRepos );
+                            newMsg.append(
+                                model.getGroupId() + ":" + model.getArtifactId() + " version:" + model.getVersion()
+                                    + " has repositories " + bannedRepos );
                         }
                     }
                 }
@@ -111,12 +123,14 @@
                     List repos = model.getPluginRepositories();
                     if ( repos != null && !repos.isEmpty() )
                     {
-                        List bannedRepos = findBannedRepositories( repos, allowedPluginRepositories );
+                        List bannedRepos =
+                            findBannedRepositories( repos, allowedPluginRepositories, allowSnapshotPluginRepositories );
                         if ( !bannedRepos.isEmpty() )
                         {
                             badModels.add( model );
-                            newMsg.append( model.getGroupId() + ":" + model.getArtifactId() + " version:"
-                                + model.getVersion() + " has plugin repositories " + bannedRepos );
+                            newMsg.append(
+                                model.getGroupId() + ":" + model.getArtifactId() + " version:" + model.getVersion()
+                                    + " has plugin repositories " + bannedRepos );
                         }
                     }
                 }
@@ -157,7 +171,7 @@
         }
     }
 
-    private static List findBannedRepositories( List repos, List allowedRepos )
+    private static List findBannedRepositories( List repos, List allowedRepos, boolean allowSnapshots )
     {
         List bannedRepos = new ArrayList( allowedRepos.size() );
         for ( Iterator i = repos.iterator(); i.hasNext(); )
@@ -165,7 +179,14 @@
             Repository r = (Repository) i.next();
             if ( !allowedRepos.contains( r.getId() ) )
             {
-                bannedRepos.add( r.getId() );
+                if ( !allowSnapshots || r.getReleases().isEnabled() )
+                {
+                    // if we are not allowing snapshots and this repo is enabled for releases
+                    // it is banned.  We don't care whether it is enabled for snapshots
+                    // if you define a repo and don't enable it for anything, then we have nothing 
+                    // to worry about
+                    bannedRepos.add( r.getId() );
+                }
             }
         }
         return bannedRepos;

Modified: maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireNoRepositories.java
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireNoRepositories.java?rev=882889&r1=882888&r2=882889&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireNoRepositories.java (original)
+++ maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireNoRepositories.java Sat Nov 21 12:40:35 2009
@@ -184,6 +184,66 @@
         rule.execute( helper );
     }
 
+    public void testReposNotAllowedWithSnapshotRepositories()
+        throws EnforcerRuleException
+    {
+        rule.allowSnapshotRepositories = true;
+
+        project.setArtifactId( "snapshot-plugin-repositories-child" );
+        project.setBaseDir( getTestFile( "target/test-classes/requireNoRepositories/snapshot-plugin-repositories/child" ) );
+
+        try
+        {
+            rule.execute( helper );
+            fail( "Should have exception" );
+        }
+        catch ( EnforcerRuleException e )
+        {
+            assertTrue( true );
+        }
+    }
+
+    public void testReposAllowedWithSnapshotRepositories()
+        throws EnforcerRuleException
+    {
+        rule.allowSnapshotRepositories = true;
+
+        project.setArtifactId( "snapshot-repositories-child" );
+        project.setBaseDir( getTestFile( "target/test-classes/requireNoRepositories/snapshot-repositories/child" ) );
+
+        rule.execute( helper );
+    }
+
+    public void testPluginReposNotAllowedWithSnapshotRepositories()
+        throws EnforcerRuleException
+    {
+        rule.allowSnapshotPluginRepositories = true;
+
+        project.setArtifactId( "snapshot-repositories-child" );
+        project.setBaseDir( getTestFile( "target/test-classes/requireNoRepositories/snapshot-repositories/child" ) );
+
+        try
+        {
+            rule.execute( helper );
+            fail( "Should have exception" );
+        }
+        catch ( EnforcerRuleException e )
+        {
+            assertTrue( true );
+        }
+    }
+
+    public void testPluginReposAllowedWithSnapshotPluginRepositories()
+        throws EnforcerRuleException
+    {
+        rule.allowSnapshotPluginRepositories = true;
+
+        project.setArtifactId( "snapshot-plugin-repositories-child" );
+        project.setBaseDir( getTestFile( "target/test-classes/requireNoRepositories/snapshot-plugin-repositories/child" ) );
+
+        rule.execute( helper );
+    }
+
     /**
      * Test id.
      */

Modified: maven/enforcer/trunk/enforcer-rules/src/test/resources/requireNoRepositories/snapshot-plugin-repositories/child/pom.xml
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/test/resources/requireNoRepositories/snapshot-plugin-repositories/child/pom.xml?rev=882889&r1=882884&r2=882889&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/test/resources/requireNoRepositories/snapshot-plugin-repositories/child/pom.xml (original)
+++ maven/enforcer/trunk/enforcer-rules/src/test/resources/requireNoRepositories/snapshot-plugin-repositories/child/pom.xml Sat Nov 21 12:40:35 2009
@@ -2,8 +2,8 @@
   <parent>
     <groupId>org.apache.maven.plugins.enforcer.test
     </groupId>
-    <artifactId>with-plugin-repositories</artifactId>
+    <artifactId>snapshot-plugin-repositories</artifactId>
     <version>1.0-SNAPSHOT</version>
   </parent>
-  <artifactId>with-plugin-repositories-child</artifactId>
+  <artifactId>snapshot-plugin-repositories-child</artifactId>
 </project>
\ No newline at end of file

Modified: maven/enforcer/trunk/enforcer-rules/src/test/resources/requireNoRepositories/snapshot-plugin-repositories/pom.xml
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/test/resources/requireNoRepositories/snapshot-plugin-repositories/pom.xml?rev=882889&r1=882884&r2=882889&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/test/resources/requireNoRepositories/snapshot-plugin-repositories/pom.xml (original)
+++ maven/enforcer/trunk/enforcer-rules/src/test/resources/requireNoRepositories/snapshot-plugin-repositories/pom.xml Sat Nov 21 12:40:35 2009
@@ -1,11 +1,17 @@
 <project>
   <groupId>org.apache.maven.plugins.enforcer.test</groupId>
-  <artifactId>with-plugin-repositories</artifactId>
+  <artifactId>snapshot-plugin-repositories</artifactId>
   <version>1.0-SNAPSHOT</version>
   <pluginRepositories>
     <pluginRepository>
       <id>repo</id>
       <url>http://example.com/repo</url>
+      <releases>
+        <enabled>false</enabled>
+      </releases>
+      <snapshots>
+        <enabled>true</enabled>
+      </snapshots>
     </pluginRepository>
   </pluginRepositories>
 </project>
\ No newline at end of file

Modified: maven/enforcer/trunk/enforcer-rules/src/test/resources/requireNoRepositories/snapshot-repositories/child/pom.xml
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/test/resources/requireNoRepositories/snapshot-repositories/child/pom.xml?rev=882889&r1=882884&r2=882889&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/test/resources/requireNoRepositories/snapshot-repositories/child/pom.xml (original)
+++ maven/enforcer/trunk/enforcer-rules/src/test/resources/requireNoRepositories/snapshot-repositories/child/pom.xml Sat Nov 21 12:40:35 2009
@@ -2,8 +2,8 @@
   <parent>
     <groupId>org.apache.maven.plugins.enforcer.test
     </groupId>
-    <artifactId>with-repositories</artifactId>
+    <artifactId>snapshot-repositories</artifactId>
     <version>1.0-SNAPSHOT</version>
   </parent>
-  <artifactId>with-repositories-child</artifactId>
+  <artifactId>snapshot-repositories-child</artifactId>
 </project>
\ No newline at end of file

Modified: maven/enforcer/trunk/enforcer-rules/src/test/resources/requireNoRepositories/snapshot-repositories/pom.xml
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/test/resources/requireNoRepositories/snapshot-repositories/pom.xml?rev=882889&r1=882884&r2=882889&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/test/resources/requireNoRepositories/snapshot-repositories/pom.xml (original)
+++ maven/enforcer/trunk/enforcer-rules/src/test/resources/requireNoRepositories/snapshot-repositories/pom.xml Sat Nov 21 12:40:35 2009
@@ -1,11 +1,17 @@
 <project>
   <groupId>org.apache.maven.plugins.enforcer.test</groupId>
-  <artifactId>with-repositories</artifactId>
+  <artifactId>snapshot-repositories</artifactId>
   <version>1.0-SNAPSHOT</version>
   <repositories>
     <repository>
       <id>repo</id>
       <url>http://example.com/repo</url>
+      <releases>
+        <enabled>false</enabled>
+      </releases>
+      <snapshots>
+        <enabled>true</enabled>
+      </snapshots>
     </repository>
   </repositories>
 </project>
\ No newline at end of file