Author: brett
Date: Thu Jan 29 02:25:53 2009
New Revision: 738715

URL: http://svn.apache.org/viewvc?rev=738715&view=rev
Log:
[MNG-2668] honour plugin dependencies in reactor sort order
Submitted by: Tibor Varga

Modified:
    
maven/components/branches/maven-2.1.x/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java
    
maven/components/branches/maven-2.1.x/maven-project/src/test/java/org/apache/maven/project/ProjectSorterTest.java

Modified: 
maven/components/branches/maven-2.1.x/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/maven-2.1.x/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java?rev=738715&r1=738714&r2=738715&view=diff
==============================================================================
--- 
maven/components/branches/maven-2.1.x/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java
 (original)
+++ 
maven/components/branches/maven-2.1.x/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java
 Thu Jan 29 02:25:53 2009
@@ -145,6 +145,23 @@
                     {
                         addEdgeWithParentCheck( projectMap, pluginId, project, 
id );
                     }
+
+                    if ( !pluginId.equals( id ) ) {
+                        for ( Iterator k = 
plugin.getDependencies().iterator(); k.hasNext(); )
+                        {
+                          Dependency dependency = (Dependency) k.next();
+
+                          String dependencyId = ArtifactUtils
+                              .versionlessKey( dependency.getGroupId(), 
dependency.getArtifactId() );
+
+                          if ( dag.getVertex( dependencyId ) != null )
+                          {
+                              project.addProjectReference( (MavenProject) 
projectMap.get( dependencyId ) );
+
+                              dag.addEdge( id, dependencyId );
+                          }
+                       }
+                    }
                 }
             }
 

Modified: 
maven/components/branches/maven-2.1.x/maven-project/src/test/java/org/apache/maven/project/ProjectSorterTest.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/maven-2.1.x/maven-project/src/test/java/org/apache/maven/project/ProjectSorterTest.java?rev=738715&r1=738714&r2=738715&view=diff
==============================================================================
--- 
maven/components/branches/maven-2.1.x/maven-project/src/test/java/org/apache/maven/project/ProjectSorterTest.java
 (original)
+++ 
maven/components/branches/maven-2.1.x/maven-project/src/test/java/org/apache/maven/project/ProjectSorterTest.java
 Thu Jan 29 02:25:53 2009
@@ -25,6 +25,7 @@
 import org.apache.maven.model.Dependency;
 import org.apache.maven.model.Extension;
 import org.apache.maven.model.Model;
+import org.apache.maven.model.Plugin;
 import org.codehaus.plexus.util.dag.CycleDetectedException;
 
 import java.util.ArrayList;
@@ -277,6 +278,49 @@
         }
     }
 
+    public void testPluginDependenciesInfluenceSorting()
+        throws Exception {
+      List projects = new ArrayList();
+
+      MavenProject parentProject = createProject( "groupId", "parent", "1.0" );
+
+      MavenProject project1 = createProject( "groupId", "artifactId1", "1.0" );
+      project1.setParent(parentProject);
+      projects.add( project1 );
+
+      MavenProject project2 = createProject( "groupId", "artifactId2", "1.0" );
+      project2.setParent(parentProject);
+      projects.add( project2 );
+
+      MavenProject pluginProject = createProject( "groupId", "pluginArtifact", 
"1.0" );
+      pluginProject.setParent(parentProject);
+      projects.add( pluginProject );
+
+      Plugin plugin = new Plugin();
+      plugin.setGroupId(pluginProject.getGroupId());
+      plugin.setArtifactId(pluginProject.getArtifactId());
+      plugin.setVersion(pluginProject.getVersion());
+
+      plugin.addDependency( createDependency( project2 ) );
+
+      Model model = project1.getModel();
+      Build build = model.getBuild();
+
+      if ( build == null )
+      {
+          build = new Build();
+          model.setBuild( build );
+      }
+
+      build.addPlugin( plugin );
+
+      projects = new ProjectSorter( projects ).getSortedProjects();
+
+      assertEquals( project1, projects.get( 2 ) );
+      assertTrue( projects.contains( project2 ) );
+      assertTrue( projects.contains( pluginProject ) );
+    }
+
     private Dependency createDependency( MavenProject project )
     {
         Dependency depdendency = new Dependency();


Reply via email to