Index: src/test/java/org/apache/maven/werkz/GoalTest.java
===================================================================
--- src/test/java/org/apache/maven/werkz/GoalTest.java (revision 170449)
+++ src/test/java/org/apache/maven/werkz/GoalTest.java (working copy)
@@ -21,6 +21,8 @@
import java.util.List;
+import org.apache.maven.jelly.MavenJellyContext;
+
public class GoalTest extends TestCase
{
private Session session;
@@ -33,6 +35,7 @@
public void setUp()
{
this.session = new Session();
+ this.session.setContext( new MavenJellyContext() );
}
public void tearDown()
Index: src/test/java/org/apache/maven/werkz/ProjectTest.java
===================================================================
--- src/test/java/org/apache/maven/werkz/ProjectTest.java (revision 170449)
+++ src/test/java/org/apache/maven/werkz/ProjectTest.java (working copy)
@@ -21,6 +21,8 @@
import java.util.Arrays;
+import org.apache.maven.jelly.MavenJellyContext;
+
public class ProjectTest extends TestCase
{
private Session session;
@@ -33,6 +35,7 @@
public void setUp()
{
this.session = new Session();
+ this.session.setContext( new MavenJellyContext() );
}
public void tearDown()
Index: src/java/org/apache/maven/jelly/MavenJellyContext.java
===================================================================
--- src/java/org/apache/maven/jelly/MavenJellyContext.java (revision 170449)
+++ src/java/org/apache/maven/jelly/MavenJellyContext.java (working copy)
@@ -28,11 +28,14 @@
import org.apache.maven.MavenSession;
import org.apache.maven.jelly.tags.jeez.MavenJeezTagLibrary;
import org.apache.maven.project.Project;
+import org.apache.maven.werkz.Goal;
+import org.apache.maven.werkz.Session;
import org.apache.maven.werkz.WerkzProject;
import java.io.File;
import java.net.URL;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -725,5 +728,14 @@
setVariable( var, f.getAbsolutePath() );
}
}
+
+ private HashMap attainedGoals = new HashMap();
+ public synchronized boolean wasAttained(Goal goal) {
+ return this.attainedGoals.containsKey(goal);
+ }
+
+ public synchronized void setAttained(Goal goal, Session session) {
+ this.attainedGoals.put( goal, session );
+ }
}
Index: src/java/org/apache/maven/jelly/tags/werkz/MavenAttainGoalTag.java
===================================================================
--- src/java/org/apache/maven/jelly/tags/werkz/MavenAttainGoalTag.java (revision 170449)
+++ src/java/org/apache/maven/jelly/tags/werkz/MavenAttainGoalTag.java (working copy)
@@ -100,6 +100,7 @@
MavenJellyContext baseContext = (MavenJellyContext) session.getAttribute( PluginManager.BASE_CONTEXT );
GoalToJellyScriptHousingMapper mapper = (GoalToJellyScriptHousingMapper) session.getAttribute(
PluginManager.GOAL_MAPPER );
+ session.setContext( baseContext );
PluginManager pluginManager = (PluginManager) session.getAttribute( PluginManager.PLUGIN_MANAGER );
Set pluginSet;
Index: src/java/org/apache/maven/plugin/PluginManager.java
===================================================================
--- src/java/org/apache/maven/plugin/PluginManager.java (revision 170449)
+++ src/java/org/apache/maven/plugin/PluginManager.java (working copy)
@@ -684,6 +684,9 @@
{
throw new NoSuchGoalException( goalName );
}
+ if ( session.getContext() == null ) {
+ session.setContext( baseContext );
+ }
goal.attain( session );
}
catch ( NoSuchGoalException e )
Index: src/java/org/apache/maven/werkz/Goal.java
===================================================================
--- src/java/org/apache/maven/werkz/Goal.java (revision 170449)
+++ src/java/org/apache/maven/werkz/Goal.java (working copy)
@@ -72,6 +72,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.maven.jelly.MavenJellyContext;
/** Abstract Goal to attain.
*
@@ -571,6 +572,7 @@
/** Attempt to attain this Goal.
*
* @param session The context in which to attain goals.
+ * @param baseContext
*
* @throws UnattainableGoalException if unable to attain this Goal
* or one of its precursor Goals.
@@ -578,18 +580,29 @@
*/
public final void attain(Session session) throws UnattainableGoalException, NoActionDefinitionException
{
- if ( session.isGoalSatisfied( this ) )
- {
- // session.info( getName() + ":" );
- // session.info( "" );
- return;
- }
-
- // session.info( getName() + ": checking precursors." );
-
- attainPrecursors( session );
-
- fire(session);
+// System.out.println( "### ATTAIN " + getName() + " on Session " + session.hashCode() + ": " + session.isGoalSatisfied(this) );
+ MavenJellyContext context = session.getContext();
+// System.out.println( "## Goal: "+ this + " Context: " + context );
+ if ( context == null ) {
+ throw new RuntimeException( "session has no context" );
+ }
+ if ( context.wasAttained(this) ) {
+ System.out.println("##### Skipping goal " + getName() + " because it has been attained already!" );
+ } else {
+ if ( session.isGoalSatisfied( this ) )
+ {
+// System.out.println( "### SATISFIED ALREADY:" );
+ // session.info( getName() + ":" );
+ // session.info( "" );
+ return;
+ }
+
+ // session.info( getName() + ": checking precursors." );
+
+ attainPrecursors( session );
+ fire(session);
+ context.setAttained(this, session);
+ }
}
/** Attempt to percolate this Goal through to its Postcursors.
Index: src/java/org/apache/maven/werkz/Session.java
===================================================================
--- src/java/org/apache/maven/werkz/Session.java (revision 170449)
+++ src/java/org/apache/maven/werkz/Session.java (working copy)
@@ -68,6 +68,8 @@
import java.util.Map;
import java.util.HashMap;
+import org.apache.maven.jelly.MavenJellyContext;
+
/** Goal satisfaction state.
*
*
@@ -217,4 +219,18 @@ // intentionally left blank } + private MavenJellyContext context = null; + + public void setContext(MavenJellyContext context) { + if ( this.context != null ) { + throw new IllegalStateException( "context already set: " + this.context ); + } + this.context = context; + + } + + public MavenJellyContext getContext() { + return context; + } + }