You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@maven.apache.org by br...@apache.org on 2005/10/03 03:34:32 UTC

svn commit: r293200 - in /maven/components/trunk: maven-plugins/pom.xml maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java

Author: brett
Date: Sun Oct  2 18:34:26 2005
New Revision: 293200

URL: http://svn.apache.org/viewcvs?rev=293200&view=rev
Log:
PR: MNG-1045
ensure parent always come first, but doesn't introduce a cycle

Modified:
    maven/components/trunk/maven-plugins/pom.xml
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java

Modified: maven/components/trunk/maven-plugins/pom.xml
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-plugins/pom.xml?rev=293200&r1=293199&r2=293200&view=diff
==============================================================================
--- maven/components/trunk/maven-plugins/pom.xml (original)
+++ maven/components/trunk/maven-plugins/pom.xml Sun Oct  2 18:34:26 2005
@@ -180,7 +180,6 @@
     <developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/components/trunk/maven-plugins/</developerConnection>
     <url>http://svn.apache.org/viewcvs.cgi/maven/components/trunk/maven-plugins/</url>
   </scm>
-<!-- TODO: reinstate one parent situation is sorted
   <build>
     <pluginManagement>
       <plugins>
@@ -201,5 +200,4 @@
       </plugin>
     </plugins>
   </reporting>
--->
 </project>

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java?rev=293200&r1=293199&r2=293200&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java Sun Oct  2 18:34:26 2005
@@ -96,13 +96,17 @@
                 }
             }
 
-            // TODO: this MUST be fixed before beta-3, but it is required for a sane release plugin.
             MavenProject parent = project.getParent();
             if ( parent != null )
             {
                 String parentId = ArtifactUtils.versionlessKey( parent.getGroupId(), parent.getArtifactId() );
                 if ( dag.getVertex( parentId ) != null )
                 {
+                    // Parent is added as an edge, but must not cause a cycle - so we remove any other edges it has in conflict
+                    if ( dag.hasEdge( parentId, id ) )
+                    {
+                        dag.removeEdge( parentId, id );
+                    }
                     dag.addEdge( id, parentId );
                 }
             }
@@ -116,9 +120,7 @@
                     String pluginId = ArtifactUtils.versionlessKey( plugin.getGroupId(), plugin.getArtifactId() );
                     if ( dag.getVertex( pluginId ) != null && !pluginId.equals( id ) )
                     {
-                        project.addProjectReference( (MavenProject) projectMap.get( pluginId ) );
-
-                        dag.addEdge( id, pluginId );
+                        addEdgeWithParentCheck( projectMap, pluginId, project, id );
                     }
                 }
             }
@@ -132,9 +134,7 @@
                     String pluginId = ArtifactUtils.versionlessKey( plugin.getGroupId(), plugin.getArtifactId() );
                     if ( dag.getVertex( pluginId ) != null && !pluginId.equals( id ) )
                     {
-                        project.addProjectReference( (MavenProject) projectMap.get( pluginId ) );
-
-                        dag.addEdge( id, pluginId );
+                        addEdgeWithParentCheck( projectMap, pluginId, project, id );
                     }
                 }
             }
@@ -145,9 +145,7 @@
                 String extensionId = ArtifactUtils.versionlessKey( extension.getGroupId(), extension.getArtifactId() );
                 if ( dag.getVertex( extensionId ) != null )
                 {
-                    project.addProjectReference( (MavenProject) projectMap.get( extensionId ) );
-
-                    dag.addEdge( id, extensionId );
+                    addEdgeWithParentCheck( projectMap, extensionId, project, id );
                 }
             }
         }
@@ -162,6 +160,21 @@
         }
 
         this.sortedProjects = Collections.unmodifiableList( sortedProjects );
+    }
+
+    private void addEdgeWithParentCheck( Map projectMap, String extensionId, MavenProject project, String id )
+        throws CycleDetectedException
+    {
+        MavenProject extProject = (MavenProject) projectMap.get( extensionId );
+        project.addProjectReference( extProject );
+
+        MavenProject extParent = extProject.getParent();
+        String parentId = ArtifactUtils.versionlessKey( extParent.getGroupId(), extParent.getArtifactId() );
+        // Don't add edge from parent to extension if a reverse edge already exists
+        if ( !dag.hasEdge( extensionId, id ) || !parentId.equals( id ) )
+        {
+            dag.addEdge( id, extensionId );
+        }
     }
 
     // TODO: !![jc; 28-jul-2005] check this; if we're using '-r' and there are aggregator tasks, this will result in weirdness.



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@maven.apache.org
For additional commands, e-mail: dev-help@maven.apache.org