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]