You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by br...@apache.org on 2008/08/06 02:13:22 UTC

svn commit: r683054 - in /maven/enforcer/trunk/enforcer-rules/src: main/java/org/apache/maven/plugins/enforcer/ site/apt/ test/java/org/apache/maven/plugins/enforcer/

Author: brianf
Date: Tue Aug  5 17:13:22 2008
New Revision: 683054

URL: http://svn.apache.org/viewvc?rev=683054&view=rev
Log:
MENFORCER-37: optionally enforce that the parent is not a snapshot. Adapted from patch by Nick Stolwijk

Added:
    maven/enforcer/trunk/enforcer-rules/src/site/apt/requireReleaseVersion.apt
Modified:
    maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireReleaseDeps.java
    maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireReleaseVersion.java
    maven/enforcer/trunk/enforcer-rules/src/site/apt/requireReleaseDeps.apt
    maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestNoSnapshots.java
    maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireReleaseVersion.java

Modified: maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireReleaseDeps.java
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireReleaseDeps.java?rev=683054&r1=683053&r2=683054&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireReleaseDeps.java (original)
+++ maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireReleaseDeps.java Tue Aug  5 17:13:22 2008
@@ -48,24 +48,24 @@
     public boolean onlyWhenRelease = false;
 
     /**
+     * Allows this rule to fail when the parent is defined as a snapshot.
+     * 
+     * @parameter
+     */
+    public boolean failWhenParentIsSnapshot = true;
+
+    /**
      * Override parent to allow optional ignore of this rule.
      */
     public void execute( EnforcerRuleHelper helper )
         throws EnforcerRuleException
     {
         boolean callSuper;
+        MavenProject project = null;
         if ( onlyWhenRelease )
         {
             // get the project
-            MavenProject project = null;
-            try
-            {
-                project = (MavenProject) helper.evaluate( "${project}" );
-            }
-            catch ( ExpressionEvaluationException eee )
-            {
-                throw new EnforcerRuleException( "Unable to retrieve the MavenProject: ", eee );
-            }
+            project = getProject( helper );
 
             // only call super if this project is a release
             callSuper = !project.getArtifact().isSnapshot();
@@ -76,16 +76,46 @@
         }
         if ( callSuper )
         {
-            super.execute(helper);
+            super.execute( helper );
+            if ( failWhenParentIsSnapshot )
+            {
+                if ( project == null )
+                {
+                    project = getProject( helper );
+                }
+                Artifact parentArtifact = project.getParentArtifact();
+                if ( parentArtifact != null && parentArtifact.isSnapshot() )
+                {
+                    throw new EnforcerRuleException( "Parent Cannot be a snapshot: " + parentArtifact.getId() );
+                }
+            }
         }
     }
 
     /**
-     * Checks the set of dependencies to see if any snapshots are included.
+     * @param helper
+     * @return
+     * @throws EnforcerRuleException
+     */
+    private MavenProject getProject( EnforcerRuleHelper helper )
+        throws EnforcerRuleException
+    {
+        try
+        {
+            return (MavenProject) helper.evaluate( "${project}" );
+        }
+        catch ( ExpressionEvaluationException eee )
+        {
+            throw new EnforcerRuleException( "Unable to retrieve the MavenProject: ", eee );
+        }
+    }
+
+    /**
+     * Checks the set of dependencies to see if any snapshots are included
      * 
-     * @param dependencies the dependencies to check
+     * @param dependencies the dependencies
      * @param log the log
-     * @return a set containing snapshot artifacts found
+     * @return the sets the
      * @throws EnforcerRuleException the enforcer rule exception
      */
     protected Set checkDependencies( Set dependencies, Log log )
@@ -93,10 +123,10 @@
     {
         Set foundExcludes = new HashSet();
 
-        Iterator dependencyIter = dependencies.iterator();
-        while ( dependencyIter.hasNext() )
+        Iterator DependencyIter = dependencies.iterator();
+        while ( DependencyIter.hasNext() )
         {
-            Artifact artifact = (Artifact) dependencyIter.next();
+            Artifact artifact = (Artifact) DependencyIter.next();
 
             if ( artifact.isSnapshot() )
             {
@@ -106,4 +136,24 @@
 
         return foundExcludes;
     }
+    
+    public boolean isOnlyWhenRelease()
+    {
+        return onlyWhenRelease;
+    }
+
+    public void setOnlyWhenRelease( boolean onlyWhenRelease )
+    {
+        this.onlyWhenRelease = onlyWhenRelease;
+    }
+
+    public boolean isFailWhenParentIsSnapshot()
+    {
+        return failWhenParentIsSnapshot;
+    }
+
+    public void setFailWhenParentIsSnapshot( boolean failWhenParentIsSnapshot )
+    {
+        this.failWhenParentIsSnapshot = failWhenParentIsSnapshot;
+    }
 }

Modified: maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireReleaseVersion.java
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireReleaseVersion.java?rev=683054&r1=683053&r2=683054&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireReleaseVersion.java (original)
+++ maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireReleaseVersion.java Tue Aug  5 17:13:22 2008
@@ -18,6 +18,7 @@
  */
 package org.apache.maven.plugins.enforcer;
 
+import org.apache.maven.artifact.Artifact;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
 import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
 import org.apache.maven.project.MavenProject;
@@ -33,6 +34,13 @@
     extends AbstractNonCacheableEnforcerRule
 {
 
+    /**
+     * Allows this rule to fail when the parent is defined as a snapshot.
+     * 
+     * @parameter
+     */
+    public boolean failWhenParentIsSnapshot = true;
+
     /*
      * (non-Javadoc)
      * 
@@ -41,25 +49,55 @@
     public void execute( EnforcerRuleHelper theHelper )
         throws EnforcerRuleException
     {
-        try
-        {
-            MavenProject project = (MavenProject) theHelper.evaluate( "${project}" );
 
-            if ( project.getArtifact().isSnapshot() )
+        MavenProject project = getProject( theHelper );
+
+        if ( project.getArtifact().isSnapshot() )
+        {
+            StringBuffer buf = new StringBuffer();
+            if ( message != null )
             {
-                StringBuffer buf = new StringBuffer();
-                if ( message != null )
-                {
-                    buf.append( message + "\n" );
-                }
-                buf.append( "This project cannot be a snapshot:" + project.getArtifact().getId() );
-                throw new EnforcerRuleException( buf.toString() );
+                buf.append( message + "\n" );
             }
+            buf.append( "This project cannot be a snapshot:" + project.getArtifact().getId() );
+            throw new EnforcerRuleException( buf.toString() );
         }
-        catch ( ExpressionEvaluationException e )
+        if ( failWhenParentIsSnapshot )
         {
-            throw new EnforcerRuleException( "Unable to retrieve the project.", e );
+            Artifact parentArtifact = project.getParentArtifact();
+            if ( parentArtifact != null && parentArtifact.isSnapshot() )
+            {
+                throw new EnforcerRuleException( "Parent Cannot be a snapshot: " + parentArtifact.getId() );
+            }
         }
 
     }
+
+    /**
+     * @param helper
+     * @return
+     * @throws EnforcerRuleException
+     */
+    private MavenProject getProject( EnforcerRuleHelper helper )
+        throws EnforcerRuleException
+    {
+        try
+        {
+            return (MavenProject) helper.evaluate( "${project}" );
+        }
+        catch ( ExpressionEvaluationException eee )
+        {
+            throw new EnforcerRuleException( "Unable to retrieve the MavenProject: ", eee );
+        }
+    }
+
+    public boolean isFailWhenParentIsSnapshot()
+    {
+        return failWhenParentIsSnapshot;
+    }
+
+    public void setFailWhenParentIsSnapshot( boolean failWhenParentIsSnapshot )
+    {
+        this.failWhenParentIsSnapshot = failWhenParentIsSnapshot;
+    }
 }

Modified: maven/enforcer/trunk/enforcer-rules/src/site/apt/requireReleaseDeps.apt
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/site/apt/requireReleaseDeps.apt?rev=683054&r1=683053&r2=683054&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/site/apt/requireReleaseDeps.apt (original)
+++ maven/enforcer/trunk/enforcer-rules/src/site/apt/requireReleaseDeps.apt Tue Aug  5 17:13:22 2008
@@ -23,17 +23,19 @@
   November 2007
   ------
 
-Require Release Dependencies
+Require Release Version
 
-  This rule checks the dependencies and fails if any snapshots are found.
+  This rule checks that the current project is not a snapshot.
 
 
    The following parameters are supported by this rule:
    
-   * searchTransitive - if transitive dependencies should be checked.
-   
    * message - an optional message to the user if the rule fails.
    
+   * onlyWhenRelease - if this rule should only be executed when the version is a non-SNAPSHOT version. Default: false
+   
+   * failWhenParentIsSnapshot - if the parent should be checked. Default: true 
+
    []
 
    
@@ -56,9 +58,9 @@
             </goals>
             <configuration>
               <rules>
-                <requireReleaseDeps>
+                <requireReleaseVersion>
                   <message>No Snapshots Allowed!</message>
-                </requireReleaseDeps>
+                </requireReleaseVersion>
               </rules>
               <fail>true</fail>
             </configuration>
@@ -69,4 +71,4 @@
   </build>
   [...]
 </project>
-+---+
\ No newline at end of file
++---+

Added: maven/enforcer/trunk/enforcer-rules/src/site/apt/requireReleaseVersion.apt
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/site/apt/requireReleaseVersion.apt?rev=683054&view=auto
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/site/apt/requireReleaseVersion.apt (added)
+++ maven/enforcer/trunk/enforcer-rules/src/site/apt/requireReleaseVersion.apt Tue Aug  5 17:13:22 2008
@@ -0,0 +1,76 @@
+~~ Licensed to the Apache Software Foundation (ASF) under one
+~~ or more contributor license agreements.  See the NOTICE file
+~~ distributed with this work for additional information
+~~ regarding copyright ownership.  The ASF licenses this file
+~~ to you under the Apache License, Version 2.0 (the
+~~ "License"); you may not use this file except in compliance
+~~ with the License.  You may obtain a copy of the License at
+~~
+~~ http://www.apache.org/licenses/LICENSE-2.0
+~~
+~~ Unless required by applicable law or agreed to in writing,
+~~ software distributed under the License is distributed on an
+~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+~~ KIND, either express or implied.  See the License for the
+~~ specific language governing permissions and limitations
+~~ under the License.    
+ 
+  ------
+  Require Release Dependencies
+  ------
+  Brian Fox
+  ------
+  November 2007
+  ------
+
+Require Release Dependencies
+
+  This rule checks the dependencies and fails if any snapshots are found.
+
+
+   The following parameters are supported by this rule:
+   
+   * searchTransitive - if transitive dependencies should be checked. Default: true
+   
+   * message - an optional message to the user if the rule fails.
+   
+   * onlyWhenRelease - if this rule should only be executed when the version is a non-SNAPSHOT version. Default: false
+   
+   * failWhenParentIsSnapshot - if the parent should be checked. Default: true 
+
+   []
+
+   
+  Sample Plugin Configuration:
+  
++---+
+<project>
+  [...]
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-enforcer-plugin</artifactId>
+        <version>1.0</version>
+        <executions>
+          <execution>
+            <id>enforce-no-snapshots</id>
+            <goals>
+              <goal>enforce</goal>
+            </goals>
+            <configuration>
+              <rules>
+                <requireReleaseDeps>
+                  <message>No Snapshots Allowed!</message>
+                </requireReleaseDeps>
+              </rules>
+              <fail>true</fail>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+  [...]
+</project>
++---+

Modified: maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestNoSnapshots.java
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestNoSnapshots.java?rev=683054&r1=683053&r2=683054&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestNoSnapshots.java (original)
+++ maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestNoSnapshots.java Tue Aug  5 17:13:22 2008
@@ -44,6 +44,7 @@
     public void testRule()
         throws IOException
     {
+        
         ArtifactStubFactory factory = new ArtifactStubFactory();
         MockProject project = new MockProject();
         EnforcerRuleHelper helper = EnforcerTestUtils.getHelper( project );
@@ -71,6 +72,19 @@
         project.setArtifact( factory.getReleaseArtifact() );
         
         TestEnforcerRuleUtils.execute( rule, helper, true );
+        
+        MockProject parent = new MockProject();
+        parent.setArtifact( factory.getSnapshotArtifact() );
+        project.setParent( parent );
+        helper = EnforcerTestUtils.getHelper(project);
+         
+        rule.setFailWhenParentIsSnapshot( true );
+        TestEnforcerRuleUtils.execute( rule, helper, true );
+        
+        rule.setFailWhenParentIsSnapshot( false );
+        TestEnforcerRuleUtils.execute( rule, helper, false );
+        
+        
     } 
 
     /**

Modified: maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireReleaseVersion.java
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireReleaseVersion.java?rev=683054&r1=683053&r2=683054&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireReleaseVersion.java (original)
+++ maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireReleaseVersion.java Tue Aug  5 17:13:22 2008
@@ -58,6 +58,17 @@
         project.setArtifact( factory.getSnapshotArtifact() );
 
         TestEnforcerRuleUtils.execute( rule, helper, true );
+        
+        MockProject parent = new MockProject();
+        parent.setArtifact( factory.getSnapshotArtifact() );
+        project.setParent( parent );
+        helper = EnforcerTestUtils.getHelper(project);
+         
+        ( (RequireReleaseVersion) rule ).setFailWhenParentIsSnapshot( true );
+        TestEnforcerRuleUtils.execute( rule, helper, true );
+        
+        ( (RequireReleaseVersion) rule ).setFailWhenParentIsSnapshot( false );
+        TestEnforcerRuleUtils.execute( rule, helper, false );
 
     }