Author: brett
Date: Wed Jun 22 05:27:28 2005
New Revision: 191819

URL: http://svn.apache.org/viewcvs?rev=191819&view=rev
Log:
implement cycle detection

Modified:
    
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionException.java
    
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/CyclicDependencyException.java
    
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java
    
maven/components/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactCollectorTest.java

Modified: 
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionException.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionException.java?rev=191819&r1=191818&r2=191819&view=diff
==============================================================================
--- 
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionException.java
 (original)
+++ 
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionException.java
 Wed Jun 22 05:27:28 2005
@@ -54,6 +54,19 @@
         this.downloadUrl = downloadUrl;
     }
 
+    public ArtifactResolutionException( String message, String groupId, String 
artifactId, String version, String type,
+                                        List remoteRepositories, String 
downloadUrl )
+    {
+        super( constructMessage( message, groupId, artifactId, version, type, 
remoteRepositories, downloadUrl ) );
+
+        this.groupId = groupId;
+        this.artifactId = artifactId;
+        this.type = type;
+        this.version = version;
+        this.remoteRepositories = remoteRepositories;
+        this.downloadUrl = downloadUrl;
+    }
+
     private static final String LS = System.getProperty( "line.separator" );
 
     private static String constructMessage( String message, String groupId, 
String artifactId, String version,
@@ -65,18 +78,21 @@
         sb.append( LS );
         sb.append( "  " + groupId + ":" + artifactId + ":" + version + ":" + 
type );
         sb.append( LS );
-        sb.append( LS );
-        sb.append( "from the specified remote repositories:" );
-        sb.append( LS + "  " );
-
-        for ( Iterator i = remoteRepositories.iterator(); i.hasNext(); )
+        if ( remoteRepositories != null && !remoteRepositories.isEmpty() )
         {
-            ArtifactRepository remoteRepository = (ArtifactRepository) 
i.next();
+            sb.append( LS );
+            sb.append( "from the specified remote repositories:" );
+            sb.append( LS + "  " );
 
-            sb.append( remoteRepository.getUrl() );
-            if ( i.hasNext() )
+            for ( Iterator i = remoteRepositories.iterator(); i.hasNext(); )
             {
-                sb.append( ", " );
+                ArtifactRepository remoteRepository = (ArtifactRepository) 
i.next();
+
+                sb.append( remoteRepository.getUrl() );
+                if ( i.hasNext() )
+                {
+                    sb.append( ", " );
+                }
             }
         }
 
@@ -108,6 +124,12 @@
     {
         this( message, artifact.getGroupId(), artifact.getArtifactId(), 
artifact.getVersion(), artifact.getType(),
               remoteRepositories, artifact.getDownloadUrl(), t );
+    }
+
+    public ArtifactResolutionException( String message, Artifact artifact )
+    {
+        this( message, artifact.getGroupId(), artifact.getArtifactId(), 
artifact.getVersion(), artifact.getType(), null,
+              artifact.getDownloadUrl() );
     }
 
     public ArtifactResolutionException( String message, Throwable cause )

Modified: 
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/CyclicDependencyException.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/CyclicDependencyException.java?rev=191819&r1=191818&r2=191819&view=diff
==============================================================================
--- 
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/CyclicDependencyException.java
 (original)
+++ 
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/CyclicDependencyException.java
 Wed Jun 22 05:27:28 2005
@@ -18,30 +18,17 @@
 
 import org.apache.maven.artifact.Artifact;
 
-import java.util.List;
-
 /**
  * Indiciates a cycle in the dependency graph.
  *
  * @author <a href="mailto:[EMAIL PROTECTED]">Brett Porter</a>
  * @version $Id$
  */
-                      public class CyclicDependencyException
+public class CyclicDependencyException
     extends ArtifactResolutionException
 {
-    public CyclicDependencyException( String message, String groupId, String 
artifactId, String version, String type,
-                                      List remoteRepositories, String 
downloadUrl, Throwable t )
+    public CyclicDependencyException( String message, Artifact artifact )
     {
-        super( message, groupId, artifactId, version, type, 
remoteRepositories, downloadUrl, t );
-    }
-
-    public CyclicDependencyException( String message, Artifact artifact, List 
remoteRepositories, Throwable t )
-    {
-        super( message, artifact, remoteRepositories, t );
-    }
-
-    public CyclicDependencyException( String message, Throwable cause )
-    {
-        super( message, cause );
+        super( message, artifact );
     }
 }

Modified: 
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java?rev=191819&r1=191818&r2=191819&view=diff
==============================================================================
--- 
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java
 (original)
+++ 
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java
 Wed Jun 22 05:27:28 2005
@@ -204,6 +204,8 @@
 
         private List children = null;
 
+        private final Set parents;
+
         private final int depth;
 
         public ResolutionNode( Artifact artifact )
@@ -211,6 +213,7 @@
             this.artifact = artifact;
             this.parent = null;
             this.depth = 0;
+            this.parents = Collections.EMPTY_SET;
         }
 
         public ResolutionNode( Artifact artifact, ResolutionNode parent )
@@ -218,6 +221,9 @@
             this.artifact = artifact;
             this.parent = parent;
             this.depth = parent.depth + 1;
+            this.parents = new HashSet();
+            this.parents.add( parent.getKey() );
+            this.parents.addAll( parent.parents );
         }
 
         public Artifact getArtifact()
@@ -231,6 +237,7 @@
         }
 
         public void addDependencies( Set artifacts, ArtifactFilter filter )
+            throws CyclicDependencyException
         {
             children = new ArrayList( artifacts.size() );
 
@@ -240,6 +247,11 @@
 
                 if ( filter == null || filter.include( a ) )
                 {
+                    if ( parents.contains( a.getDependencyConflictId() ) )
+                    {
+                        throw new CyclicDependencyException( "The dependency 
is present in a cycle", a );
+                    }
+
                     children.add( new ResolutionNode( a, this ) );
                 }
             }

Modified: 
maven/components/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactCollectorTest.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactCollectorTest.java?rev=191819&r1=191818&r2=191819&view=diff
==============================================================================
--- 
maven/components/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactCollectorTest.java
 (original)
+++ 
maven/components/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactCollectorTest.java
 Wed Jun 22 05:27:28 2005
@@ -65,12 +65,12 @@
         this.projectArtifact = createArtifact( "project", "1.0", null );
     }
 
-    public void disabledtestCircularDependencyNotIncludingCurrentProject()
+    public void testCircularDependencyNotIncludingCurrentProject()
         throws ArtifactResolutionException
     {
         ArtifactSpec a = createArtifact( "a", "1.0" );
         ArtifactSpec b = a.addDependency( "b", "1.0" );
-        b.addDependency( "a", "1.0" );
+        b.addDependency( a );
         try
         {
             collect( a );
@@ -82,7 +82,7 @@
         }
     }
 
-    public void disabledtestCircularDependencyIncludingCurrentProject()
+    public void testCircularDependencyIncludingCurrentProject()
         throws ArtifactResolutionException
     {
         ArtifactSpec a = createArtifact( "a", "1.0" );
@@ -321,8 +321,13 @@
         public ArtifactSpec addDependency( String id, String version, String 
scope )
         {
             ArtifactSpec dep = createArtifact( id, version, scope );
-            dependencies.add( dep.artifact );
+            addDependency( dep );
             return dep;
+        }
+
+        public void addDependency( ArtifactSpec dep )
+        {
+            dependencies.add( dep.artifact );
         }
     }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to