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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]