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/04/20 18:48:11 UTC

cvs commit: maven-components/maven-core/src/test/java/org/apache/maven/project ProjectSorterTest.java

brett       2005/04/20 09:48:11

  Modified:    maven-core/src/main/java/org/apache/maven/project
                        MavenProject.java
               maven-core/src/main/java/org/apache/maven DefaultMaven.java
  Added:       maven-core/src/main/java/org/apache/maven/project
                        ProjectSorter.java
               maven-core/src/test/java/org/apache/maven/project
                        ProjectSorterTest.java
  Log:
  factor out project sorter, and use whole ID
  
  Revision  Changes    Path
  1.43      +9 -79     maven-components/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
  
  Index: MavenProject.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-core/src/main/java/org/apache/maven/project/MavenProject.java,v
  retrieving revision 1.42
  retrieving revision 1.43
  diff -u -r1.42 -r1.43
  --- MavenProject.java	18 Apr 2005 04:27:02 -0000	1.42
  +++ MavenProject.java	20 Apr 2005 16:48:11 -0000	1.43
  @@ -24,7 +24,6 @@
   import org.apache.maven.model.Build;
   import org.apache.maven.model.CiManagement;
   import org.apache.maven.model.Contributor;
  -import org.apache.maven.model.Dependency;
   import org.apache.maven.model.DependencyManagement;
   import org.apache.maven.model.Developer;
   import org.apache.maven.model.DistributionManagement;
  @@ -39,9 +38,6 @@
   import org.apache.maven.model.Reports;
   import org.apache.maven.model.Scm;
   import org.apache.maven.util.Xpp3DomUtils;
  -import org.codehaus.plexus.util.dag.CycleDetectedException;
  -import org.codehaus.plexus.util.dag.DAG;
  -import org.codehaus.plexus.util.dag.TopologicalSorter;
   import org.codehaus.plexus.util.xml.Xpp3Dom;
   
   import java.io.File;
  @@ -237,15 +233,18 @@
           {
               Artifact a = (Artifact) i.next();
   
  -            // TODO: let the scope handler deal with this
  -            if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) )
  +            if ( isAddedToClasspath( a ) )
               {
  -                File file = a.getFile();
  -                if ( file == null )
  +                // TODO: let the scope handler deal with this
  +                if ( Artifact.SCOPE_COMPILE.equals( a.getScope() ) )
                   {
  -                    throw new DependencyResolutionRequiredException( a );
  +                    File file = a.getFile();
  +                    if ( file == null )
  +                    {
  +                        throw new DependencyResolutionRequiredException( a );
  +                    }
  +                    list.add( file.getPath() );
                   }
  -                list.add( file.getPath() );
               }
           }
           return list;
  @@ -628,75 +627,6 @@
           this.collectedProjects = collectedProjects;
       }
   
  -    /**
  -     * Sort a list of projects.
  -     * <ul>
  -     * <li>collect all the vertices for the projects that we want to build.</li>
  -     * <li>iterate through the deps of each project and if that dep is within
  -     * the set of projects we want to build then add an edge, otherwise throw
  -     * the edge away because that dependency is not within the set of projects
  -     * we are trying to build. we assume a closed set.</li>
  -     * <li>do a topo sort on the graph that remains.</li>
  -     * </ul>
  -     */
  -    public static List getSortedProjects( List projects )
  -        throws CycleDetectedException
  -    {
  -        DAG dag = new DAG();
  -
  -        Map projectMap = new HashMap();
  -
  -        for ( Iterator i = projects.iterator(); i.hasNext(); )
  -        {
  -            MavenProject project = (MavenProject) i.next();
  -
  -            String artifactId = project.getArtifactId();
  -
  -            dag.addVertex( artifactId );
  -
  -            projectMap.put( artifactId, project );
  -        }
  -
  -        for ( Iterator i = projects.iterator(); i.hasNext(); )
  -        {
  -            MavenProject project = (MavenProject) i.next();
  -
  -            String artifactId = project.getArtifactId();
  -
  -            for ( Iterator j = project.getDependencies().iterator(); j.hasNext(); )
  -            {
  -                Dependency dependency = (Dependency) j.next();
  -
  -                String dependencyArtifactId = dependency.getArtifactId();
  -
  -                if ( dag.getVertex( dependencyArtifactId ) != null )
  -                {
  -                    dag.addEdge( artifactId, dependencyArtifactId );
  -                }
  -            }
  -
  -            MavenProject parent = project.getParent();
  -            if ( parent != null )
  -            {
  -                if ( dag.getVertex( parent.getArtifactId() ) != null )
  -                {
  -                    dag.addEdge( artifactId, parent.getArtifactId() );
  -                }
  -            }
  -        }
  -
  -        List sortedProjects = new ArrayList();
  -
  -        for ( Iterator i = TopologicalSorter.sort( dag ).iterator(); i.hasNext(); )
  -        {
  -            String artifactId = (String) i.next();
  -
  -            sortedProjects.add( projectMap.get( artifactId ) );
  -        }
  -
  -        return sortedProjects;
  -    }
  -
       public void addArtifacts( Collection newArtifacts )
       {
           //        project.getArtifacts().addAll( result.getArtifacts().values() );
  
  
  
  1.1                  maven-components/maven-core/src/main/java/org/apache/maven/project/ProjectSorter.java
  
  Index: ProjectSorter.java
  ===================================================================
  package org.apache.maven.project;
  
  /*
   * Copyright 2001-2005 The Apache Software Foundation.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  import org.apache.maven.model.Dependency;
  import org.codehaus.plexus.util.dag.CycleDetectedException;
  import org.codehaus.plexus.util.dag.DAG;
  import org.codehaus.plexus.util.dag.TopologicalSorter;
  
  import java.util.ArrayList;
  import java.util.HashMap;
  import java.util.Iterator;
  import java.util.List;
  import java.util.Map;
  
  /**
   * Sort projects by dependencies.
   *
   * @author <a href="mailto:brett@apache.org">Brett Porter</a>
   * @version $Id: ProjectSorter.java,v 1.1 2005/04/20 16:48:11 brett Exp $
   */
  public class ProjectSorter
  {
      private ProjectSorter()
      {
          // no touchy...
      }
  
      /**
       * Sort a list of projects.
       * <ul>
       * <li>collect all the vertices for the projects that we want to build.</li>
       * <li>iterate through the deps of each project and if that dep is within
       * the set of projects we want to build then add an edge, otherwise throw
       * the edge away because that dependency is not within the set of projects
       * we are trying to build. we assume a closed set.</li>
       * <li>do a topo sort on the graph that remains.</li>
       * </ul>
       */
      public static List getSortedProjects( List projects )
          throws CycleDetectedException
      {
          DAG dag = new DAG();
  
          Map projectMap = new HashMap();
  
          for ( Iterator i = projects.iterator(); i.hasNext(); )
          {
              MavenProject project = (MavenProject) i.next();
  
              String id = getProjectId( project );
  
              dag.addVertex( id );
  
              projectMap.put( id, project );
          }
  
          for ( Iterator i = projects.iterator(); i.hasNext(); )
          {
              MavenProject project = (MavenProject) i.next();
  
              String id = getProjectId( project );
  
              for ( Iterator j = project.getDependencies().iterator(); j.hasNext(); )
              {
                  Dependency dependency = (Dependency) j.next();
  
                  String dependencyId = getDependencyId( dependency );
  
                  if ( dag.getVertex( dependencyId ) != null )
                  {
                      dag.addEdge( id, dependencyId );
                  }
              }
  
              MavenProject parent = project.getParent();
              if ( parent != null )
              {
                  String parentId = getProjectId( parent );
                  if ( dag.getVertex( parentId ) != null )
                  {
                      dag.addEdge( id, parentId );
                  }
              }
          }
  
          List sortedProjects = new ArrayList();
  
          for ( Iterator i = TopologicalSorter.sort( dag ).iterator(); i.hasNext(); )
          {
              String id = (String) i.next();
  
              sortedProjects.add( projectMap.get( id ) );
          }
  
          return sortedProjects;
      }
  
      private static String getDependencyId( Dependency dependency )
      {
          return dependency.getGroupId() + ":" + dependency.getArtifactId();
      }
  
      private static String getProjectId( MavenProject project )
      {
          return project.getGroupId() + ":" + project.getArtifactId();
      }
  }
  
  
  
  1.49      +3 -2      maven-components/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
  
  Index: DefaultMaven.java
  ===================================================================
  RCS file: /home/cvs/maven-components/maven-core/src/main/java/org/apache/maven/DefaultMaven.java,v
  retrieving revision 1.48
  retrieving revision 1.49
  diff -u -r1.48 -r1.49
  --- DefaultMaven.java	20 Apr 2005 16:41:36 -0000	1.48
  +++ DefaultMaven.java	20 Apr 2005 16:48:11 -0000	1.49
  @@ -32,6 +32,7 @@
   import org.apache.maven.project.MavenProject;
   import org.apache.maven.project.MavenProjectBuilder;
   import org.apache.maven.project.ProjectBuildingException;
  +import org.apache.maven.project.ProjectSorter;
   import org.apache.maven.reactor.ReactorException;
   import org.apache.maven.settings.Proxy;
   import org.apache.maven.settings.Settings;
  @@ -104,7 +105,7 @@
           {
               projects = collectProjects( request.getFiles(), request.getLocalRepository(), request.isRecursive() );
   
  -            projects = MavenProject.getSortedProjects( projects );
  +            projects = ProjectSorter.getSortedProjects( projects );
   
               if ( projects.isEmpty() )
               {
  
  
  
  1.1                  maven-components/maven-core/src/test/java/org/apache/maven/project/ProjectSorterTest.java
  
  Index: ProjectSorterTest.java
  ===================================================================
  package org.apache.maven.project;
  
  /*
   * Copyright 2001-2005 The Apache Software Foundation.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  import junit.framework.TestCase;
  import org.apache.maven.model.Dependency;
  import org.apache.maven.model.Model;
  import org.codehaus.plexus.util.dag.CycleDetectedException;
  
  import java.util.ArrayList;
  import java.util.List;
  
  /**
   * Test sorting projects by dependencies.
   *
   * @author <a href="mailto:brett@apache.org">Brett Porter</a>
   * @version $Id: ProjectSorterTest.java,v 1.1 2005/04/20 16:48:11 brett Exp $
   */
  public class ProjectSorterTest
      extends TestCase
  {
      public void testMatchingArtifactIdsDifferentGroupIds()
          throws CycleDetectedException
      {
          List projects = new ArrayList();
          MavenProject project1 = createProject( "groupId1", "artifactId", "1.0" );
          projects.add( project1 );
          MavenProject project2 = createProject( "groupId2", "artifactId", "1.0" );
          projects.add( project2 );
          project1.getDependencies().add( createDependency( project2 ) );
  
          projects = ProjectSorter.getSortedProjects( projects );
  
          assertEquals( project2, projects.get( 0 ) );
          assertEquals( project1, projects.get( 1 ) );
      }
  
      public void testMatchingGroupIdsDifferentArtifactIds()
          throws CycleDetectedException
      {
          List projects = new ArrayList();
          MavenProject project1 = createProject( "groupId", "artifactId1", "1.0" );
          projects.add( project1 );
          MavenProject project2 = createProject( "groupId", "artifactId2", "1.0" );
          projects.add( project2 );
          project1.getDependencies().add( createDependency( project2 ) );
  
          projects = ProjectSorter.getSortedProjects( projects );
  
          assertEquals( project2, projects.get( 0 ) );
          assertEquals( project1, projects.get( 1 ) );
      }
  
      private Dependency createDependency( MavenProject project )
      {
          Dependency depdendency = new Dependency();
          depdendency.setArtifactId( project.getArtifactId() );
          depdendency.setGroupId( project.getGroupId() );
          depdendency.setVersion( project.getVersion() );
          return depdendency;
      }
  
      private static MavenProject createProject( String groupId, String artifactId, String version )
      {
          Model model = new Model();
          model.setGroupId( groupId );
          model.setArtifactId( artifactId );
          model.setVersion( version );
          return new MavenProject( model );
      }
  }
  
  
  

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