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