Author: jdcasey Date: Wed Jul 26 14:29:08 2006 New Revision: 425848 URL: http://svn.apache.org/viewvc?rev=425848&view=rev Log: Merging from 425843 on trunk to fix MNG-1697.
Modified: maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/ProjectSorterTest.java Modified: maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java?rev=425848&r1=425847&r2=425848&view=diff ============================================================================== --- maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java (original) +++ maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ProjectSorter.java Wed Jul 26 14:29:08 2006 @@ -75,7 +75,7 @@ { throw new DuplicateProjectException( "Project '" + id + "' is duplicated in the reactor" ); } - + dag.addVertex( id ); projectMap.put( id, project ); @@ -91,8 +91,8 @@ { Dependency dependency = (Dependency) j.next(); - String dependencyId = ArtifactUtils.versionlessKey( dependency.getGroupId(), - dependency.getArtifactId() ); + String dependencyId = ArtifactUtils + .versionlessKey( dependency.getGroupId(), dependency.getArtifactId() ); if ( dag.getVertex( dependencyId ) != null ) { @@ -168,10 +168,16 @@ this.sortedProjects = Collections.unmodifiableList( sortedProjects ); } - private void addEdgeWithParentCheck( Map projectMap, String extensionId, MavenProject project, String id ) + private void addEdgeWithParentCheck( Map projectMap, String projectRefId, MavenProject project, String id ) throws CycleDetectedException { - MavenProject extProject = (MavenProject) projectMap.get( extensionId ); + MavenProject extProject = (MavenProject) projectMap.get( projectRefId ); + + if ( extProject == null ) + { + return; + } + project.addProjectReference( extProject ); MavenProject extParent = extProject.getParent(); @@ -179,9 +185,9 @@ { 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 ) ) + if ( !dag.hasEdge( projectRefId, id ) || !parentId.equals( id ) ) { - dag.addEdge( id, extensionId ); + dag.addEdge( id, projectRefId ); } } } Modified: maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/ProjectSorterTest.java URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/ProjectSorterTest.java?rev=425848&r1=425847&r2=425848&view=diff ============================================================================== --- maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/ProjectSorterTest.java (original) +++ maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/ProjectSorterTest.java Wed Jul 26 14:29:08 2006 @@ -18,11 +18,14 @@ import junit.framework.TestCase; +import org.apache.maven.model.Build; import org.apache.maven.model.Dependency; +import org.apache.maven.model.Extension; import org.apache.maven.model.Model; import org.codehaus.plexus.util.dag.CycleDetectedException; import java.util.ArrayList; +import java.util.Collections; import java.util.List; /** @@ -34,6 +37,32 @@ public class ProjectSorterTest extends TestCase { + + public void testShouldNotFailWhenProjectReferencesNonExistentProject() + throws CycleDetectedException, DuplicateProjectException + { + MavenProject project = createProject( "group", "artifact", "1.0" ); + Model model = project.getModel(); + + Build build = model.getBuild(); + + if ( build == null ) + { + build = new Build(); + model.setBuild( build ); + } + + Extension extension = new Extension(); + + extension.setArtifactId( "other-artifact" ); + extension.setGroupId( "other.group" ); + extension.setVersion( "1.0" ); + + build.addExtension( extension ); + + new ProjectSorter( Collections.singletonList( project ) ); + } + public void testMatchingArtifactIdsDifferentGroupIds() throws CycleDetectedException, DuplicateProjectException {