Author: bentmann
Date: Thu Aug 27 18:00:56 2009
New Revision: 808556

URL: http://svn.apache.org/viewvc?rev=808556&view=rev
Log:
[MNG-4327] [regression] Forking mojos that are bound to a lifecycle phase that 
gets forked execute multiple times

Modified:
    
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java

Modified: 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java?rev=808556&r1=808555&r2=808556&view=diff
==============================================================================
--- 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
 (original)
+++ 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/lifecycle/DefaultLifecycleExecutor.java
 Thu Aug 27 18:00:56 2009
@@ -984,6 +984,8 @@
 
             mojoExecution.addForkedExecutions( getKey( forkedProject ), 
forkedExecutions );
         }
+
+        alreadyForkedExecutions.remove( mojoDescriptor );
     }
 
     private List<MojoExecution> calculateForkedGoal( MojoExecution 
mojoExecution, MavenSession session,
@@ -1005,6 +1007,11 @@
             throw new MojoNotFoundException( forkedGoal, pluginDescriptor );
         }
 
+        if ( alreadyForkedExecutions.contains( forkedMojoDescriptor ) )
+        {
+            return Collections.emptyList();
+        }
+
         MojoExecution forkedExecution = new MojoExecution( 
forkedMojoDescriptor, forkedGoal );
 
         populateMojoExecutionConfiguration( project, forkedExecution, true );
@@ -1052,13 +1059,18 @@
 
         for ( List<MojoExecution> forkedExecutions : 
lifecycleMappings.values() )
         {
-            for ( MojoExecution forkedExecution : forkedExecutions )
+            for ( Iterator<MojoExecution> it = forkedExecutions.iterator(); 
it.hasNext(); )
             {
-                extractMojoConfiguration( forkedExecution );
+                MojoExecution forkedExecution = it.next();
+
+                if ( !alreadyForkedExecutions.contains( 
forkedExecution.getMojoDescriptor() ) )
+                {
+                    extractMojoConfiguration( forkedExecution );
 
-                calculateForkedExecutions( forkedExecution, session, project, 
alreadyForkedExecutions );
+                    calculateForkedExecutions( forkedExecution, session, 
project, alreadyForkedExecutions );
 
-                mojoExecutions.add( forkedExecution );
+                    mojoExecutions.add( forkedExecution );
+                }
             }
         }
 


Reply via email to