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]