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 2007/11/07 22:24:36 UTC
svn commit: r592902 - in /maven/enforcer/trunk: ./
enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/
enforcer-rules/
enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/
enforcer-rules/src/test/java/org/apache/maven/plugins/enfo...
Author: brianf
Date: Wed Nov 7 13:24:35 2007
New Revision: 592902
URL: http://svn.apache.org/viewvc?rev=592902&view=rev
Log:
MENFORCER-12: new rule caching system to improve rule performance on multi-module builds
Modified:
maven/enforcer/trunk/enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/EnforcerRule.java
maven/enforcer/trunk/enforcer-rules/pom.xml
maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java
maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractVersionEnforcer.java
maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/EvaluateBeanshell.java
maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireNoRepositories.java
maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireOS.java
maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequirePluginVersions.java
maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireProperty.java
maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestMavenVersion.java
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/TestRequireJavaVersion.java
maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireOS.java
maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequirePluginVersions.java
maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireProperty.java
maven/enforcer/trunk/maven-enforcer-plugin/pom.xml
maven/enforcer/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugins/enforcer/EnforceMojo.java
maven/enforcer/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugins/enforcer/EnforceOnceMojo.java
maven/enforcer/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/MockEnforcerRule.java
maven/enforcer/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/TestEnforceMojo.java
maven/enforcer/trunk/pom.xml
Modified: maven/enforcer/trunk/enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/EnforcerRule.java
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/EnforcerRule.java?rev=592902&r1=592901&r2=592902&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/EnforcerRule.java (original)
+++ maven/enforcer/trunk/enforcer-api/src/main/java/org/apache/maven/enforcer/rule/api/EnforcerRule.java Wed Nov 7 13:24:35 2007
@@ -30,7 +30,7 @@
public interface EnforcerRule
{
/**
- * This is the inteface into the rule. This method should throw an exception
+ * This is the interface into the rule. This method should throw an exception
* containing a reason message if the rule fails the check. The plugin will
* then decide based on the fail flag if it should stop or just log the
* message as a warning.
@@ -43,5 +43,32 @@
*/
public void execute( EnforcerRuleHelper helper )
throws EnforcerRuleException;
+
+ /**
+ * This method tells the enforcer if the rule results may be cached. If the result is true,
+ * the results will be remembered for future executions in the same build (ie children). Subsequent
+ * iterations of the rule will be queried to see if they are also cacheable. This will allow the rule to be
+ * uncached further down the tree if needed.
+ *
+ * @return
+ */
+ public boolean isCacheable();
+
+ /**
+ *
+ * @param cachedRule the last cached instance of the rule. This is to be used by the rule to
+ * potentially determine if the results are still valid (ie if the configuration has been overridden)
+ * @return true if the stored results are valid for the same id.
+ */
+ public boolean isResultValid(EnforcerRule cachedRule);
+
+ /**
+ * If the rule is to be cached, this id is used as part of the key. This can allow rules to take parameters
+ * that allow multiple results of the same rule to be cached.
+ * @return id to be used by the enforcer to determine uniqueness of cache results. The ids only need to be unique
+ * within a given rule implementation as the full key will be [classname]-[id]
+ */
+ public String getCacheId();
+
}
Modified: maven/enforcer/trunk/enforcer-rules/pom.xml
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/pom.xml?rev=592902&r1=592901&r2=592902&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/pom.xml (original)
+++ maven/enforcer/trunk/enforcer-rules/pom.xml Wed Nov 7 13:24:35 2007
@@ -34,13 +34,7 @@
<description>This component contains the standard Enforcer Rules</description>
<build>
<plugins>
- <plugin>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.4</source>
- <target>1.4</target>
- </configuration>
- </plugin>
+
<plugin>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-maven-plugin</artifactId>
@@ -69,54 +63,44 @@
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-artifact</artifactId>
- <version>2.0.7</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
- <version>2.0.7</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-project</artifactId>
- <version>2.0.7</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
- <version>2.0.7</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-utils</artifactId>
- <version>1.4.5</version>
</dependency>
<dependency>
<groupId>org.apache.maven.shared</groupId>
<artifactId>maven-plugin-testing-harness</artifactId>
<scope>test</scope>
- <version>1.1</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
- <version>2.3</version>
</dependency>
<dependency>
<groupId>org.apache.maven.enforcer</groupId>
<artifactId>enforcer-api</artifactId>
- <version>1.0-alpha-3-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.beanshell</groupId>
<artifactId>bsh</artifactId>
- <version>2.0b4</version>
+ <version>2.0b4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.1</version>
- <scope>test</scope>
+ <artifactId>junit</artifactId>
</dependency>
</dependencies>
</project>
Modified: maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java?rev=592902&r1=592901&r2=592902&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java (original)
+++ maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractBanDependencies.java Wed Nov 7 13:24:35 2007
@@ -151,4 +151,30 @@
{
this.searchTransitive = theSearchTransitive;
}
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.enforcer.rule.api.EnforcerRule#getCacheId()
+ */
+ public String getCacheId ()
+ {
+ return "0";
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.enforcer.rule.api.EnforcerRule#isCacheable()
+ */
+ public boolean isCacheable ()
+ {
+ //dependencies change per project, therefore they must always be rerun.
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.enforcer.rule.api.EnforcerRule#isResultValid(org.apache.maven.enforcer.rule.api.EnforcerRule)
+ */
+ public boolean isResultValid ( EnforcerRule theCachedRule )
+ {
+ //dependencies change per project, therefore they must always be rerun.
+ return false;
+ }
}
Modified: maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractVersionEnforcer.java
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractVersionEnforcer.java?rev=592902&r1=592901&r2=592902&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractVersionEnforcer.java (original)
+++ maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractVersionEnforcer.java Wed Nov 7 13:24:35 2007
@@ -24,6 +24,7 @@
import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
import org.apache.maven.artifact.versioning.Restriction;
import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.enforcer.rule.api.EnforcerRule;
import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.logging.Log;
@@ -160,6 +161,42 @@
return matched;
}
+ /* (non-Javadoc)
+ * @see org.apache.maven.enforcer.rule.api.EnforcerRule#getCacheId()
+ */
+ public String getCacheId ()
+ {
+ if (StringUtils.isNotEmpty( version ))
+ {
+ //return the hashcodes of the parameter that matters
+ return ""+version.hashCode();
+ }
+ else
+ {
+ return "0";
+ }
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.enforcer.rule.api.EnforcerRule#isCacheable()
+ */
+ public boolean isCacheable ()
+ {
+ //the maven version is not going to change between projects in the same build.
+ return true;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.enforcer.rule.api.EnforcerRule#isResultValid(org.apache.maven.enforcer.rule.api.EnforcerRule)
+ */
+ public boolean isResultValid ( EnforcerRule theCachedRule )
+ {
+ //i will always return the hash of the parameters as my id. If my parameters are the same, this
+ //rule must always have the same result.
+ return true;
+ }
+
/**
* @return the version
*/
@@ -176,4 +213,6 @@
{
this.version = theVersion;
}
+
+
}
Modified: maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/EvaluateBeanshell.java
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/EvaluateBeanshell.java?rev=592902&r1=592901&r2=592902&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/EvaluateBeanshell.java (original)
+++ maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/EvaluateBeanshell.java Wed Nov 7 13:24:35 2007
@@ -64,7 +64,7 @@
* @parameter
*/
public String message;
-
+
public void execute( EnforcerRuleHelper helper )
throws EnforcerRuleException
{
@@ -131,6 +131,30 @@
log.warn( "Couldn't evaluate condition: " + script, ex );
}
return evaluation.booleanValue();
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.enforcer.rule.api.EnforcerRule#getCacheId()
+ */
+ public String getCacheId ()
+ {
+ return "" + this.condition.hashCode();
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.enforcer.rule.api.EnforcerRule#isCacheable()
+ */
+ public boolean isCacheable ()
+ {
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.enforcer.rule.api.EnforcerRule#isResultValid(org.apache.maven.enforcer.rule.api.EnforcerRule)
+ */
+ public boolean isResultValid ( EnforcerRule theCachedRule )
+ {
+ return false;
}
}
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=592902&r1=592901&r2=592902&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 Wed Nov 7 13:24:35 2007
@@ -108,4 +108,28 @@
}
return badModels;
}
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.enforcer.rule.api.EnforcerRule#getCacheId()
+ */
+ public String getCacheId ()
+ {
+ return "0";
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.enforcer.rule.api.EnforcerRule#isCacheable()
+ */
+ public boolean isCacheable ()
+ {
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.enforcer.rule.api.EnforcerRule#isResultValid(org.apache.maven.enforcer.rule.api.EnforcerRule)
+ */
+ public boolean isResultValid ( EnforcerRule theCachedRule )
+ {
+ return false;
+ }
}
Modified: maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireOS.java
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireOS.java?rev=592902&r1=592901&r2=592902&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireOS.java (original)
+++ maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireOS.java Wed Nov 7 13:24:35 2007
@@ -93,27 +93,9 @@
*/
public boolean display = false;
- private Set validFamilies = null;
-
- public static final String OS_NAME = System.getProperty( "os.name" ).toLowerCase( Locale.US );
-
- public static final String OS_ARCH = System.getProperty( "os.arch" ).toLowerCase( Locale.US );
-
- public static final String OS_VERSION = System.getProperty( "os.version" ).toLowerCase( Locale.US );
-
public RequireOS()
{
- validFamilies = new HashSet();
- validFamilies.add( "dos" );
- validFamilies.add( "mac" );
- validFamilies.add( "netware" );
- validFamilies.add( "os/2" );
- validFamilies.add( "tandem" );
- validFamilies.add( "unix" );
- validFamilies.add( "windows" );
- validFamilies.add( "win9x" );
- validFamilies.add( "z/os" );
- validFamilies.add( "os/400" );
+
}
public void execute( EnforcerRuleHelper helper )
@@ -134,8 +116,8 @@
{
if ( StringUtils.isEmpty( message ) )
{
- message = ( "OS Arch: " + RequireOS.OS_ARCH + " Family: " + determineOsFamily() + " Name: "
- + RequireOS.OS_NAME + " Version: " + RequireOS.OS_VERSION + " is not allowed by"
+ message = ( "OS Arch: " + Os.OS_ARCH + " Family: " + Os.OS_FAMILY + " Name: "
+ + Os.OS_NAME + " Version: " + Os.OS_VERSION + " is not allowed by"
+ ( arch != null ? " Arch=" + arch : "" ) + ( family != null ? " Family=" + family : "" )
+ ( name != null ? " Name=" + name : "" ) + ( version != null ? " Version=" + version : "" ) );
}
@@ -145,7 +127,7 @@
else
{
StringBuffer buffer = new StringBuffer( 50 );
- Iterator iter = validFamilies.iterator();
+ Iterator iter = Os.getValidFamilies().iterator();
while ( iter.hasNext() )
{
buffer.append( iter.next() );
@@ -163,8 +145,8 @@
*/
public void displayOSInfo( Log log, boolean info )
{
- String string = "OS Info: Arch: " + RequireOS.OS_ARCH + " Family: " + determineOsFamily() + " Name: "
- + RequireOS.OS_NAME + " Version: " + RequireOS.OS_VERSION;
+ String string = "OS Info: Arch: " + Os.OS_ARCH + " Family: " + Os.OS_FAMILY + " Name: "
+ + Os.OS_NAME + " Version: " + Os.OS_VERSION;
if ( !info )
{
@@ -176,24 +158,6 @@
}
}
- /**
- * Helper method to determine the current OS family.
- *
- * @return name of current OS family.
- */
- public String determineOsFamily()
- {
- Iterator iter = getValidFamilies().iterator();
- while ( iter.hasNext() )
- {
- String fam = (String) iter.next();
- if ( Os.isFamily( fam ) )
- {
- return fam;
- }
- }
- return null;
- }
/**
* Helper method to determine if the current OS is
@@ -296,7 +260,7 @@
// in case they are checking !family
theFamily = StringUtils.stripStart( theFamily, "!" );
- return ( StringUtils.isEmpty( theFamily ) || validFamilies.contains( theFamily ) );
+ return ( StringUtils.isEmpty( theFamily ) || Os.getValidFamilies().contains( theFamily ) );
}
/**
@@ -362,21 +326,49 @@
{
this.version = theVersion;
}
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.enforcer.rule.api.EnforcerRule#getCacheId()
+ */
+ public String getCacheId ()
+ {
+ //return the hashcodes of all the parameters
+ StringBuffer b = new StringBuffer();
+ if (StringUtils.isNotEmpty( version ))
+ {
+ b.append( version.hashCode() );
+ }
+ if (StringUtils.isNotEmpty( name ))
+ {
+ b.append( name.hashCode() );
+ }
+ if (StringUtils.isNotEmpty( arch ))
+ {
+ b.append( arch.hashCode() );
+ }
+ if (StringUtils.isNotEmpty( family ))
+ {
+ b.append( family.hashCode() );
+ }
+ return b.toString();
+ }
- /**
- * @return the validFamilies
+ /* (non-Javadoc)
+ * @see org.apache.maven.enforcer.rule.api.EnforcerRule#isCacheable()
*/
- public Set getValidFamilies()
+ public boolean isCacheable ()
{
- return this.validFamilies;
+ //the os is not going to change between projects in the same build.
+ return true;
}
- /**
- * @param theValidFamilies the validFamilies to set
+ /* (non-Javadoc)
+ * @see org.apache.maven.enforcer.rule.api.EnforcerRule#isResultValid(org.apache.maven.enforcer.rule.api.EnforcerRule)
*/
- public void setValidFamilies( Set theValidFamilies )
+ public boolean isResultValid ( EnforcerRule theCachedRule )
{
- this.validFamilies = theValidFamilies;
+ //i will always return the hash of the parameters as my id. If my parameters are the same, this
+ //rule must always have the same result.
+ return true;
}
-
}
Modified: maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequirePluginVersions.java
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequirePluginVersions.java?rev=592902&r1=592901&r2=592902&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequirePluginVersions.java (original)
+++ maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequirePluginVersions.java Wed Nov 7 13:24:35 2007
@@ -648,4 +648,28 @@
{
this.utils = theUtils;
}
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.enforcer.rule.api.EnforcerRule#getCacheId()
+ */
+ public String getCacheId ()
+ {
+ return "0";
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.enforcer.rule.api.EnforcerRule#isCacheable()
+ */
+ public boolean isCacheable ()
+ {
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.enforcer.rule.api.EnforcerRule#isResultValid(org.apache.maven.enforcer.rule.api.EnforcerRule)
+ */
+ public boolean isResultValid ( EnforcerRule theCachedRule )
+ {
+ return false;
+ }
}
Modified: maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireProperty.java
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireProperty.java?rev=592902&r1=592901&r2=592902&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireProperty.java (original)
+++ maven/enforcer/trunk/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/RequireProperty.java Wed Nov 7 13:24:35 2007
@@ -23,6 +23,7 @@
import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
+import org.codehaus.plexus.util.StringUtils;
/**
* This rule checks that certain properties are set.
@@ -98,6 +99,42 @@
}
throw new EnforcerRuleException(regexMessage);
}
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.enforcer.rule.api.EnforcerRule#getCacheId()
+ */
+ public String getCacheId ()
+ {
+ //return the hashcodes of all the parameters
+ StringBuffer b = new StringBuffer();
+ if (StringUtils.isNotEmpty( property ))
+ {
+ b.append( property.hashCode() );
+ }
+ if (StringUtils.isNotEmpty( regex ))
+ {
+ b.append( regex.hashCode() );
+ }
+ return b.toString();
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.enforcer.rule.api.EnforcerRule#isCacheable()
+ */
+ public boolean isCacheable ()
+ {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.enforcer.rule.api.EnforcerRule#isResultValid(org.apache.maven.enforcer.rule.api.EnforcerRule)
+ */
+ public boolean isResultValid ( EnforcerRule theCachedRule )
+ {
+ // TODO Auto-generated method stub
+ return false;
}
}
Modified: maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestMavenVersion.java
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestMavenVersion.java?rev=592902&r1=592901&r2=592902&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestMavenVersion.java (original)
+++ maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestMavenVersion.java Wed Nov 7 13:24:35 2007
@@ -62,4 +62,10 @@
rule.execute( helper );
}
+
+ public void testId ()
+ {
+ RequireMavenVersion rule = new RequireMavenVersion();
+ rule.getCacheId();
+ }
}
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=592902&r1=592901&r2=592902&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 Wed Nov 7 13:24:35 2007
@@ -84,4 +84,10 @@
helper.getLog().debug(e.getMessage());
}
}
+
+ public void testId ()
+ {
+ NoSnapshots rule = new NoSnapshots();
+ rule.getCacheId();
+ }
}
Modified: maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireJavaVersion.java
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireJavaVersion.java?rev=592902&r1=592901&r2=592902&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireJavaVersion.java (original)
+++ maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireJavaVersion.java Wed Nov 7 13:24:35 2007
@@ -85,4 +85,10 @@
rule.execute( helper );
}
+
+ public void testId ()
+ {
+ RequireJavaVersion rule = new RequireJavaVersion();
+ rule.getCacheId();
+ }
}
Modified: maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireOS.java
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireOS.java?rev=592902&r1=592901&r2=592902&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireOS.java (original)
+++ maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireOS.java Wed Nov 7 13:24:35 2007
@@ -44,22 +44,21 @@
RequireOS rule = new RequireOS();
rule.displayOSInfo( log, true );
- Iterator iter = rule.getValidFamilies().iterator();
+ Iterator iter = Os.getValidFamilies().iterator();
String validFamily = null;
String invalidFamily = null;
- while ( iter.hasNext() && ( validFamily == null || invalidFamily == null ) )
+ while ( iter.hasNext())
{
String fam = (String) iter.next();
- if ( Os.isFamily( fam ) )
- {
- validFamily = fam;
- }
- else
+ if ( !Os.isFamily( fam ) )
{
invalidFamily = fam;
+ break;
}
}
+ validFamily = Os.OS_FAMILY;
+
log.info( "Testing Mojo Using Valid Family: " + validFamily + " Invalid Family: " + invalidFamily );
rule.setFamily( validFamily );
@@ -83,7 +82,7 @@
}
rule.setFamily( null );
- rule.setArch( RequireOS.OS_ARCH );
+ rule.setArch( Os.OS_ARCH );
assertTrue( rule.isAllowed() );
rule.setArch( "somecrazyarch" );
@@ -94,7 +93,7 @@
rule.setArch( null );
- rule.setName( RequireOS.OS_NAME );
+ rule.setName( Os.OS_NAME );
assertTrue( rule.isAllowed() );
rule.setName( "somecrazyname" );
@@ -105,7 +104,7 @@
rule.setName( null );
- rule.setVersion( RequireOS.OS_VERSION );
+ rule.setVersion( Os.OS_VERSION );
assertTrue( rule.isAllowed() );
rule.setVersion( "somecrazyversion" );
@@ -113,6 +112,12 @@
rule.setVersion( "!somecrazyversion" );
assertTrue( rule.isAllowed() );
+ }
+
+ public void testId ()
+ {
+ RequireOS rule = new RequireOS();
+ rule.getCacheId();
}
}
Modified: maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequirePluginVersions.java
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequirePluginVersions.java?rev=592902&r1=592901&r2=592902&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequirePluginVersions.java (original)
+++ maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequirePluginVersions.java Wed Nov 7 13:24:35 2007
@@ -123,4 +123,10 @@
// there should be 3
assertEquals( 3, plugins.size() );
}
+
+ public void testId ()
+ {
+ RequirePluginVersions rule = new RequirePluginVersions();
+ rule.getCacheId();
+ }
}
Modified: maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireProperty.java
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireProperty.java?rev=592902&r1=592901&r2=592902&view=diff
==============================================================================
--- maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireProperty.java (original)
+++ maven/enforcer/trunk/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireProperty.java Wed Nov 7 13:24:35 2007
@@ -28,13 +28,15 @@
* @author Paul Gier
*
*/
-public class TestRequireProperty extends TestCase
+public class TestRequireProperty
+ extends TestCase
{
- public void testRule() throws EnforcerRuleException
+ public void testRule ()
+ throws EnforcerRuleException
{
- MockProject project = new MockProject();
- project.setProperty("testProp", "This is a test.");
- EnforcerRuleHelper helper = EnforcerTestUtils.getHelper(project);
+ MockProject project = new MockProject();
+ project.setProperty( "testProp", "This is a test." );
+ EnforcerRuleHelper helper = EnforcerTestUtils.getHelper( project );
RequireProperty rule = new RequireProperty();
// this property should not be set
@@ -50,29 +52,32 @@
// expected to catch this.
}
- // this property should be set by the surefire plugin
+ // this property should be set by the surefire
+ // plugin
rule.property = "testProp";
- try
+ try
{
- rule.execute( helper );
- }
+ rule.execute( helper );
+ }
catch ( EnforcerRuleException e )
{
- fail("This should not throw an exception");
+ fail( "This should not throw an exception" );
}
}
-
- public void testRuleWithRegex() throws EnforcerRuleException
+
+ public void testRuleWithRegex ()
+ throws EnforcerRuleException
{
- MockProject project = new MockProject();
- project.setProperty("testProp", "This is a test.");
- EnforcerRuleHelper helper = EnforcerTestUtils.getHelper(project);
+ MockProject project = new MockProject();
+ project.setProperty( "testProp", "This is a test." );
+ EnforcerRuleHelper helper = EnforcerTestUtils.getHelper( project );
RequireProperty rule = new RequireProperty();
rule.property = "testProp";
- // This expression should not match the property value
+ // This expression should not match the property
+ // value
rule.regex = "[^abc]";
-
+
try
{
rule.execute( helper );
@@ -85,13 +90,19 @@
// this expr should match the property
rule.regex = "[This].*[.]";
- try
+ try
{
- rule.execute( helper );
- }
+ rule.execute( helper );
+ }
catch ( EnforcerRuleException e )
{
- fail("This should not throw an exception");
+ fail( "This should not throw an exception" );
}
+ }
+
+ public void testId ()
+ {
+ RequireProperty rule = new RequireProperty();
+ rule.getCacheId();
}
}
Modified: maven/enforcer/trunk/maven-enforcer-plugin/pom.xml
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/maven-enforcer-plugin/pom.xml?rev=592902&r1=592901&r2=592902&view=diff
==============================================================================
--- maven/enforcer/trunk/maven-enforcer-plugin/pom.xml (original)
+++ maven/enforcer/trunk/maven-enforcer-plugin/pom.xml Wed Nov 7 13:24:35 2007
@@ -20,9 +20,9 @@
-->
<modelVersion>4.0.0</modelVersion>
<parent>
- <artifactId>maven-plugins</artifactId>
- <groupId>org.apache.maven.plugins</groupId>
- <version>8</version>
+ <groupId>org.apache.maven.enforcer</groupId>
+ <artifactId>enforcer</artifactId>
+ <version>1-SNAPSHOT</version>
</parent>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
@@ -74,17 +74,7 @@
</executions>
</plugin>
</plugins>
- <pluginManagement>
- <plugins>
- <plugin>
- <artifactId>maven-release-plugin</artifactId>
- <configuration>
- <tagBase>https://svn.apache.org/repos/asf/maven/enforcer/tags</tagBase>
- </configuration>
- </plugin>
- </plugins>
- </pluginManagement>
- <resources>
+ <resources>
<!-- Include super-pom defined main/resources
Removing this section will break the build.
Since we have defined a new build/resources
@@ -97,63 +87,51 @@
</resources>
</build>
<dependencies>
- <dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-artifact</artifactId>
- <version>2.0.7</version>
- </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact</artifactId>
+ </dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
- <version>2.0.7</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-project</artifactId>
- <version>2.0.7</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
- <version>2.0.7</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-utils</artifactId>
- <version>1.4.6</version>
</dependency>
- <dependency>
- <groupId>commons-lang</groupId>
- <artifactId>commons-lang</artifactId>
- <version>2.3</version>
- </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ </dependency>
<dependency>
<groupId>org.apache.maven.enforcer</groupId>
<artifactId>enforcer-api</artifactId>
- <version>1.0-alpha-3-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.maven.enforcer</groupId>
<artifactId>enforcer-rules</artifactId>
- <version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.maven.enforcer</groupId>
<artifactId>enforcer-rules</artifactId>
- <version>1.0-SNAPSHOT</version>
<classifier>tests</classifier>
- <scope>test</scope>
</dependency>
<dependency>
<groupId>org.beanshell</groupId>
<artifactId>bsh</artifactId>
- <version>2.0b4</version>
+ <version>2.0b4</version>
</dependency>
- <dependency>
- <groupId>org.apache.maven.shared</groupId>
- <artifactId>maven-plugin-testing-harness</artifactId>
- <scope>test</scope>
- <version>1.1</version>
- </dependency>
- </dependencies>
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-plugin-testing-harness</artifactId>
+ </dependency>
+ </dependencies>
</project>
Modified: maven/enforcer/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugins/enforcer/EnforceMojo.java
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugins/enforcer/EnforceMojo.java?rev=592902&r1=592901&r2=592902&view=diff
==============================================================================
--- maven/enforcer/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugins/enforcer/EnforceMojo.java (original)
+++ maven/enforcer/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugins/enforcer/EnforceMojo.java Wed Nov 7 13:24:35 2007
@@ -20,6 +20,7 @@
*/
import java.util.ArrayList;
+import java.util.Hashtable;
import java.util.Iterator;
import org.apache.maven.enforcer.rule.api.EnforcerRule;
@@ -33,12 +34,15 @@
import org.apache.maven.project.path.PathTranslator;
/**
- * This goal executes the defined enforcer-rules once per module.
+ * This goal executes the defined enforcer-rules once per
+ * module.
+ *
* @requiresDependencyResolution test
* @goal enforce
* @author <a href="mailto:brianf@apache.org">Brian Fox</a>
* @phase validate
- * @version $Id$
+ * @version $Id: EnforceMojo.java 571676 2007-09-01
+ * 03:28:56Z brianf $
*/
public class EnforceMojo
extends AbstractMojo
@@ -70,26 +74,30 @@
/**
* Flag to fail the build if a version check fails.
*
- * @parameter expression="${enforcer.fail}" default-value="true"
+ * @parameter expression="${enforcer.fail}"
+ * default-value="true"
*/
protected boolean fail = true;
/**
* Flag to easily skip all checks
*
- * @parameter expression="${enforcer.skip}" default-value="false"
+ * @parameter expression="${enforcer.skip}"
+ * default-value="false"
*/
protected boolean skip = false;
/**
* Fail on the first rule that doesn't pass
*
- * @parameter expression="${enforcer.failFast}" default-value="false"
+ * @parameter expression="${enforcer.failFast}"
+ * default-value="false"
*/
protected boolean failFast = false;
/**
- * List of objects that implement the EnforcerRule interface to execute.
+ * Array of objects that implement the EnforcerRule
+ * interface to execute.
*
* @parameter
* @required
@@ -97,14 +105,20 @@
private EnforcerRule[] rules;
/**
- * True if dependencies are resolved
+ * Use this flag to disable rule result caching. This will cause
+ * all rules to execute on each project even if the rule indicates it can
+ * safely be cached.
+ * @parameter expression="${enforcer.ignoreCache}"
+ * default-value="false"
*/
- private boolean dependenciesAreResolved = false;
+ protected boolean ignoreCache = false;
+
+ protected static Hashtable cache = new Hashtable();
/**
* Entry point to the mojo
*/
- public void execute()
+ public void execute ()
throws MojoExecutionException
{
Log log = this.getLog();
@@ -125,13 +139,14 @@
// create my helper
EnforcerRuleHelper helper = new DefaultEnforcementRuleHelper( session, evaluator, log );
- // if we are only warning, then disable failFast
+ // if we are only warning, then disable
+ // failFast
if ( !fail )
{
failFast = false;
}
- // go through each rul
+ // go through each rule
for ( int i = 0; i < rules.length; i++ )
{
@@ -139,17 +154,22 @@
EnforcerRule rule = rules[i];
if ( rule != null )
{
- // store the current rule for logging purposes
+ // store the current rule for
+ // logging purposes
currentRule = rule.getClass().getName();
log.debug( "Executing rule: " + currentRule );
try
{
- // execute the rule
- rules[i].execute( helper );
+ if ( ignoreCache || shouldExecute( rule ) )
+ {
+ // execute the rule
+ rules[i].execute( helper );
+ }
}
catch ( EnforcerRuleException e )
{
- // i can throw an exception because failfast will be
+ // i can throw an exception
+ // because failfast will be
// false if fail is false.
if ( failFast )
{
@@ -175,7 +195,8 @@
}
if ( fail )
{
- throw new MojoExecutionException( "Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed." );
+ throw new MojoExecutionException(
+ "Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed." );
}
}
}
@@ -192,18 +213,47 @@
}
/**
+ * This method determines if a rule should execute based
+ * on the cache
+ *
+ * @param rule
+ * @return
+ */
+ protected boolean shouldExecute ( EnforcerRule rule )
+ {
+ if ( rule.isCacheable() )
+ {
+ Log log = this.getLog();
+ log.debug( "Rule " + rule.getClass().getName() + " is cacheable." );
+ String key = rule.getClass().getName() + " " + rule.getCacheId();
+ if ( EnforceMojo.cache.containsKey( key ) )
+ {
+ log.debug( "Key " + key + " was found in the cache" );
+ if ( rule.isResultValid( (EnforcerRule) cache.get( key ) ) )
+ {
+ log.info( "The cached results are still valid. Skipping the rule: "+rule.getClass().getName() );
+ return false;
+ }
+ }
+
+ //add it to the cache of executed rules
+ EnforceMojo.cache.put( key, rule );
+ }
+ return true;
+ }
+
+ /**
* @return the fail
*/
- public boolean isFail()
+ public boolean isFail ()
{
return this.fail;
}
/**
- * @param theFail
- * the fail to set
+ * @param theFail the fail to set
*/
- public void setFail( boolean theFail )
+ public void setFail ( boolean theFail )
{
this.fail = theFail;
}
@@ -211,16 +261,15 @@
/**
* @return the rules
*/
- public EnforcerRule[] getRules()
+ public EnforcerRule[] getRules ()
{
return this.rules;
}
/**
- * @param theRules
- * the rules to set
+ * @param theRules the rules to set
*/
- public void setRules( EnforcerRule[] theRules )
+ public void setRules ( EnforcerRule[] theRules )
{
this.rules = theRules;
}
@@ -228,16 +277,15 @@
/**
* @return the skip
*/
- public boolean isSkip()
+ public boolean isSkip ()
{
return this.skip;
}
/**
- * @param theSkip
- * the skip to set
+ * @param theSkip the skip to set
*/
- public void setSkip( boolean theSkip )
+ public void setSkip ( boolean theSkip )
{
this.skip = theSkip;
}
@@ -245,16 +293,15 @@
/**
* @return the failFast
*/
- public boolean isFailFast()
+ public boolean isFailFast ()
{
return this.failFast;
}
/**
- * @param theFailFast
- * the failFast to set
+ * @param theFailFast the failFast to set
*/
- public void setFailFast( boolean theFailFast )
+ public void setFailFast ( boolean theFailFast )
{
this.failFast = theFailFast;
}
@@ -262,16 +309,15 @@
/**
* @return the project
*/
- public MavenProject getProject()
+ public MavenProject getProject ()
{
return this.project;
}
/**
- * @param theProject
- * the project to set
+ * @param theProject the project to set
*/
- public void setProject( MavenProject theProject )
+ public void setProject ( MavenProject theProject )
{
this.project = theProject;
}
@@ -279,16 +325,15 @@
/**
* @return the session
*/
- public MavenSession getSession()
+ public MavenSession getSession ()
{
return this.session;
}
/**
- * @param theSession
- * the session to set
+ * @param theSession the session to set
*/
- public void setSession( MavenSession theSession )
+ public void setSession ( MavenSession theSession )
{
this.session = theSession;
}
@@ -296,33 +341,16 @@
/**
* @return the translator
*/
- public PathTranslator getTranslator()
+ public PathTranslator getTranslator ()
{
return this.translator;
}
/**
- * @param theTranslator
- * the translator to set
+ * @param theTranslator the translator to set
*/
- public void setTranslator( PathTranslator theTranslator )
+ public void setTranslator ( PathTranslator theTranslator )
{
this.translator = theTranslator;
- }
-
- /**
- * @return the dependenciesAreResolved
- */
- public boolean isDependenciesAreResolved ()
- {
- return this.dependenciesAreResolved;
- }
-
- /**
- * @param theDependenciesAreResolved the dependenciesAreResolved to set
- */
- public void setDependenciesAreResolved ( boolean theDependenciesAreResolved )
- {
- this.dependenciesAreResolved = theDependenciesAreResolved;
}
}
Modified: maven/enforcer/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugins/enforcer/EnforceOnceMojo.java
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugins/enforcer/EnforceOnceMojo.java?rev=592902&r1=592901&r2=592902&view=diff
==============================================================================
--- maven/enforcer/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugins/enforcer/EnforceOnceMojo.java (original)
+++ maven/enforcer/trunk/maven-enforcer-plugin/src/main/java/org/apache/maven/plugins/enforcer/EnforceOnceMojo.java Wed Nov 7 13:24:35 2007
@@ -37,7 +37,7 @@
public void execute()
throws MojoExecutionException
{
- this.getLog().warn( "enforcer:enforce-once is deprecated. Use enforcer:enforce instead. See MENFORCER-11 for more information." );
+ this.getLog().warn( "enforcer:enforce-once is deprecated. Use enforcer:enforce instead. See MENFORCER-11/MENFORCER-12 for more information." );
super.execute();
}
}
Modified: maven/enforcer/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/MockEnforcerRule.java
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/MockEnforcerRule.java?rev=592902&r1=592901&r2=592902&view=diff
==============================================================================
--- maven/enforcer/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/MockEnforcerRule.java (original)
+++ maven/enforcer/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/MockEnforcerRule.java Wed Nov 7 13:24:35 2007
@@ -32,15 +32,31 @@
{
public boolean failRule = false;
+
+ public String cacheId="";
+
+ public boolean isCacheable = false;
+
+ public boolean isResultValid = false;
+
+ public boolean executed = false;
public MockEnforcerRule( boolean fail )
{
this.failRule = fail;
}
+ public MockEnforcerRule( boolean fail, String cacheId, boolean isCacheable, boolean isResultValid )
+ {
+ this.failRule = fail;
+ this.isCacheable = isCacheable;
+ this.isResultValid= isResultValid;
+ this.cacheId = cacheId;
+ }
public void execute( EnforcerRuleHelper helper )
throws EnforcerRuleException
{
+ executed = true;
if ( isFailRule() )
{
throw new EnforcerRuleException( " this condition is not allowed." );
@@ -62,6 +78,62 @@
public void setFailRule( boolean theFailRule )
{
this.failRule = theFailRule;
+ }
+
+ /**
+ * @return the isResultValid
+ */
+ public boolean isResultValid ()
+ {
+ return this.isResultValid;
+ }
+
+ /**
+ * @param theIsResultValid the isResultValid to set
+ */
+ public void setResultValid ( boolean theIsResultValid )
+ {
+ this.isResultValid = theIsResultValid;
+ }
+
+ /**
+ * @param theCacheId the cacheId to set
+ */
+ public void setCacheId ( String theCacheId )
+ {
+ this.cacheId = theCacheId;
+ }
+
+ /**
+ * @param theIsCacheable the isCacheable to set
+ */
+ public void setCacheable ( boolean theIsCacheable )
+ {
+ this.isCacheable = theIsCacheable;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.enforcer.rule.api.EnforcerRule#getCacheId()
+ */
+ public String getCacheId ()
+ {
+ return cacheId;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.enforcer.rule.api.EnforcerRule#isCacheable()
+ */
+ public boolean isCacheable ()
+ {
+ return isCacheable;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.enforcer.rule.api.EnforcerRule#isResultValid(org.apache.maven.enforcer.rule.api.EnforcerRule)
+ */
+ public boolean isResultValid ( EnforcerRule theCachedRule )
+ {
+ return isResultValid;
}
}
Modified: maven/enforcer/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/TestEnforceMojo.java
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/TestEnforceMojo.java?rev=592902&r1=592901&r2=592902&view=diff
==============================================================================
--- maven/enforcer/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/TestEnforceMojo.java (original)
+++ maven/enforcer/trunk/maven-enforcer-plugin/src/test/java/org/apache/maven/plugins/enforcer/TestEnforceMojo.java Wed Nov 7 13:24:35 2007
@@ -34,7 +34,7 @@
extends TestCase
{
- public void testEnforceMojo()
+ public void testEnforceMojo ()
throws MojoExecutionException
{
EnforceMojo mojo = new EnforceMojo();
@@ -87,5 +87,152 @@
( (MockEnforcerRule) rules[1] ).setFailRule( false );
mojo.execute();
+ }
+
+ public void testCaching () throws MojoExecutionException
+ {
+ EnforceMojo mojo = new EnforceMojo();
+ mojo.setFail( true );
+ mojo.setSession( EnforcerTestUtils.getMavenSession() );
+ mojo.setProject( new MockProject() );
+
+ MockEnforcerRule[] rules = new MockEnforcerRule[10];
+
+ //check that basic caching works.
+ rules[0] = new MockEnforcerRule( false, "", true, true );
+ rules[1] = new MockEnforcerRule( false, "", true, true );
+ mojo.setRules( rules );
+
+ EnforceMojo.cache.clear();
+ mojo.execute();
+
+ assertTrue( "Expected this rule to be executed.",rules[0].executed );
+ assertFalse( "Expected this rule not to be executed.",rules[1].executed);
+
+ //check that skip caching works.
+ rules[0] = new MockEnforcerRule( false, "", true, true );
+ rules[1] = new MockEnforcerRule( false, "", true, true );
+ mojo.setRules( rules );
+
+ EnforceMojo.cache.clear();
+ mojo.ignoreCache = true;
+ mojo.execute();
+
+ assertTrue( "Expected this rule to be executed.",rules[0].executed );
+ assertTrue( "Expected this rule to be executed.",rules[1].executed );
+
+ mojo.ignoreCache = false;
+
+ //check that different ids are compared.
+ rules[0] = new MockEnforcerRule( false, "1", true, true );
+ rules[1] = new MockEnforcerRule( false, "2", true, true );
+ rules[2] = new MockEnforcerRule( false, "2", true, true );
+ mojo.setRules( rules );
+
+ EnforceMojo.cache.clear();
+ mojo.execute();
+
+ assertTrue( "Expected this rule to be executed.",rules[0].executed );
+ assertTrue( "Expected this rule to be executed.",rules[1].executed);
+ assertFalse( "Expected this rule not to be executed.",rules[2].executed);
+
+ //check that future overrides are working
+ rules[0] = new MockEnforcerRule( false, "1", true, true );
+ rules[1] = new MockEnforcerRule( false, "1", false, true );
+ rules[2] = null;
+ mojo.setRules( rules );
+
+ EnforceMojo.cache.clear();
+ mojo.execute();
+
+ assertTrue( "Expected this rule to be executed.",rules[0].executed );
+ assertTrue( "Expected this rule to be executed.",rules[1].executed);
+
+ //check that future isResultValid is used
+ rules[0] = new MockEnforcerRule( false, "1", true, true );
+ rules[1] = new MockEnforcerRule( false, "1", true, false );
+ rules[2] = null;
+ mojo.setRules( rules );
+
+ EnforceMojo.cache.clear();
+ mojo.execute();
+
+ assertTrue( "Expected this rule to be executed.",rules[0].executed );
+ assertTrue( "Expected this rule to be executed.",rules[1].executed);
+
+ }
+
+ public void testCachePersistence1() throws MojoExecutionException
+ {
+ EnforceMojo mojo = new EnforceMojo();
+ mojo.setFail( true );
+ mojo.setSession( EnforcerTestUtils.getMavenSession() );
+ mojo.setProject( new MockProject() );
+
+ MockEnforcerRule[] rules = new MockEnforcerRule[10];
+
+ //check that basic caching works.
+ rules[0] = new MockEnforcerRule( false, "", true, true );
+ rules[1] = new MockEnforcerRule( false, "", true, true );
+ mojo.setRules( rules );
+
+ EnforceMojo.cache.clear();
+ mojo.execute();
+
+ assertTrue( "Expected this rule to be executed.",rules[0].executed );
+ assertFalse( "Expected this rule not to be executed.",rules[1].executed);
+
+ }
+
+ public void testCachePersistence2() throws MojoExecutionException
+ {
+ EnforceMojo mojo = new EnforceMojo();
+ mojo.setFail( true );
+ mojo.setSession( EnforcerTestUtils.getMavenSession() );
+ mojo.setProject( new MockProject() );
+
+ MockEnforcerRule[] rules = new MockEnforcerRule[10];
+
+ //check that basic caching works.
+ rules[0] = new MockEnforcerRule( false, "", true, true );
+ rules[1] = new MockEnforcerRule( false, "", true, true );
+ mojo.setRules( rules );
+
+ mojo.execute();
+
+ assertFalse( "Expected this rule not to be executed.",rules[0].executed);
+ assertFalse( "Expected this rule not to be executed.",rules[1].executed);
+
+ }
+
+ public void testCachePersistence3() throws MojoExecutionException
+ {
+ System.gc();
+
+ try
+ {
+ Thread.sleep( 1000 );
+ }
+ catch ( InterruptedException e )
+ {
+ }
+
+ EnforceMojo mojo = new EnforceMojo();
+ mojo.setFail( true );
+ mojo.setSession( EnforcerTestUtils.getMavenSession() );
+ mojo.setProject( new MockProject() );
+
+ MockEnforcerRule[] rules = new MockEnforcerRule[10];
+
+ //check that basic caching works.
+ rules[0] = new MockEnforcerRule( false, "", true, true );
+ rules[1] = new MockEnforcerRule( false, "", true, true );
+ mojo.setRules( rules );
+
+ mojo.execute();
+
+ assertFalse( "Expected this rule not to be executed.",rules[0].executed);
+ assertFalse( "Expected this rule not to be executed.",rules[1].executed);
+
}
}
Modified: maven/enforcer/trunk/pom.xml
URL: http://svn.apache.org/viewvc/maven/enforcer/trunk/pom.xml?rev=592902&r1=592901&r2=592902&view=diff
==============================================================================
--- maven/enforcer/trunk/pom.xml (original)
+++ maven/enforcer/trunk/pom.xml Wed Nov 7 13:24:35 2007
@@ -123,15 +123,47 @@
</resource>
</resources>
<pluginManagement>
- <plugins>
- <plugin>
- <artifactId>maven-release-plugin</artifactId>
- <configuration>
- <tagBase>https://svn.apache.org/repos/asf/maven/enforcer/tags</tagBase>
- </configuration>
- </plugin>
- </plugins>
- </pluginManagement>
+ <plugins>
+ <plugin>
+ <artifactId>maven-install-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.0.2</version>
+ <configuration>
+ <source>1.4</source>
+ <target>1.4</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-deploy-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-resources-plugin</artifactId>
+ <version>2.2</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-release-plugin</artifactId>
+ <configuration>
+ <tagBase>https://svn.apache.org/repos/asf/maven/enforcer/tags</tagBase>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
</build>
<distributionManagement>
<site>
@@ -150,6 +182,69 @@
</repository>
</repositories>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact</artifactId>
+ <version>2.0.7</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0.7</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project</artifactId>
+ <version>2.0.7</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-core</artifactId>
+ <version>2.0.7</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>1.4.6</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.4</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>2.3</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.enforcer</groupId>
+ <artifactId>enforcer-api</artifactId>
+ <version>1.0-alpha-3-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.enforcer</groupId>
+ <artifactId>enforcer-rules</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.enforcer</groupId>
+ <artifactId>enforcer-rules</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <classifier>tests</classifier>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-plugin-testing-harness</artifactId>
+ <scope>test</scope>
+ <version>1.1</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
<modules>
<module>enforcer-api</module>
<module>enforcer-rules</module>