Author: jdcasey
Date: Tue Apr  8 16:49:27 2008
New Revision: 646141

URL: http://svn.apache.org/viewvc?rev=646141&view=rev
Log:
Fixing MNG-2861 and MNG-2123 based on fixed in 2.0.x codebase.

Modified:
    
maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java
    
maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java

Modified: 
maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java
URL: 
http://svn.apache.org/viewvc/maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java?rev=646141&r1=646140&r2=646141&view=diff
==============================================================================
--- 
maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java
 (original)
+++ 
maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java
 Tue Apr  8 16:49:27 2008
@@ -31,6 +31,8 @@
 import org.apache.maven.artifact.versioning.ManagedVersionMap;
 import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
 import org.apache.maven.artifact.versioning.VersionRange;
+import org.codehaus.plexus.logging.LogEnabled;
+import org.codehaus.plexus.logging.Logger;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -53,13 +55,14 @@
  * @plexus.component
  */
 public class DefaultArtifactCollector
-    implements ArtifactCollector
+    implements ArtifactCollector, LogEnabled
 {
     /**
      * The conflict resolver to use when none is specified.
-     * @plexus.requirement role-hint="nearest" 
+     * @plexus.requirement role-hint="nearest"
      */
     private ConflictResolver defaultConflictResolver;
+    private Logger logger;
 
     public ArtifactResolutionResult collect( Set artifacts,
                                              Artifact originatingArtifact,
@@ -97,9 +100,9 @@
                                              List conflictResolvers )
     {
         ArtifactResolutionResult result = new ArtifactResolutionResult();
-        
+
         result.ListOriginatingArtifact( originatingArtifact );
-        
+
         if ( conflictResolvers == null )
         {
             // TODO: warn that we're using the default conflict resolver
@@ -110,7 +113,7 @@
         Map resolvedArtifacts = new LinkedHashMap();
 
         ResolutionNode root = new ResolutionNode( originatingArtifact, 
remoteRepositories );
-        
+
         try
         {
             root.addDependencies( artifacts, remoteRepositories, filter );
@@ -130,8 +133,26 @@
 
         ManagedVersionMap versionMap = getManagedVersionsMap( 
originatingArtifact, managedVersions );
 
-        recurse( result, root, resolvedArtifacts, versionMap, localRepository, 
remoteRepositories, source, filter,
-            listeners, conflictResolvers );
+        try
+        {
+            recurse( result, root, resolvedArtifacts, versionMap, 
localRepository, remoteRepositories, source, filter,
+                listeners, conflictResolvers );
+        }
+        catch ( CyclicDependencyException e )
+        {
+            logger.debug( "While recursing: " + e.getMessage(), e );
+            result.addCircularDependencyException( e );
+        }
+        catch ( OverConstrainedVersionException e )
+        {
+            logger.debug( "While recursing: " + e.getMessage(), e );
+            result.addVersionRangeViolation( e );
+        }
+        catch ( ArtifactResolutionException e )
+        {
+            logger.debug( "While recursing: " + e.getMessage(), e );
+            result.addErrorArtifactException( e );
+        }
 
         Set set = new LinkedHashSet();
 
@@ -221,7 +242,7 @@
                           ArtifactFilter filter,
                           List listeners,
                           List conflictResolvers )
-    //throws ArtifactResolutionException
+        throws CyclicDependencyException, ArtifactResolutionException, 
OverConstrainedVersionException
     {
         fireEvent( ResolutionListener.TEST_ARTIFACT, listeners, node );
 
@@ -272,12 +293,46 @@
                             for ( int j = 0; j < 2; j++ )
                             {
                                 Artifact resetArtifact = 
resetNodes[j].getArtifact();
-                                if ( ( resetArtifact.getVersion() == null ) && 
( resetArtifact.getVersionRange() != null ) &&
-                                    ( resetArtifact.getAvailableVersions() != 
null ) )
+
+                                //MNG-2123: if the previous node was not a 
range, then it wouldn't have any available
+                                //versions. We just clobbered the selected 
version above. (why? i have no idea.)
+                                //So since we are here and this is ranges we 
must go figure out the version (for a third time...)
+                                if ( resetArtifact.getVersion() == null && 
resetArtifact.getVersionRange() != null )
                                 {
 
-                                    resetArtifact.selectVersion( 
resetArtifact.getVersionRange().matchVersion(
-                                        resetArtifact.getAvailableVersions() 
).toString() );
+                                    // go find the version. This is a total 
hack. See previous comment.
+                                    List versions = 
resetArtifact.getAvailableVersions();
+                                    if ( versions == null )
+                                    {
+                                        try
+                                        {
+                                            versions =
+                                                
source.retrieveAvailableVersions( resetArtifact, localRepository,
+                                                                               
   remoteRepositories );
+                                            
resetArtifact.setAvailableVersions( versions );
+                                        }
+                                        catch ( 
ArtifactMetadataRetrievalException e )
+                                        {
+                                            resetArtifact.setDependencyTrail( 
node.getDependencyTrail() );
+                                            throw new 
ArtifactResolutionException(
+                                                                               
    "Unable to get dependency information: " +
+                                                                               
        e.getMessage(), resetArtifact,
+                                                                               
    remoteRepositories, e );
+                                        }
+                                    }
+                                    //end hack
+
+                                    //MNG-2861: match version can return null
+                                    ArtifactVersion selectedVersion = 
resetArtifact.getVersionRange().matchVersion( 
resetArtifact.getAvailableVersions() );
+                                    if (selectedVersion != null)
+                                    {
+                                      resetArtifact.selectVersion( 
selectedVersion.toString() );
+                                    }
+                                    else
+                                    {
+                                      throw new 
OverConstrainedVersionException(" Unable to find a version in "+ 
resetArtifact.getAvailableVersions()+" to match the range "+ 
resetArtifact.getVersionRange(), resetArtifact);
+                                    }
+
                                     fireEvent( 
ResolutionListener.SELECT_VERSION_FROM_RANGE, listeners, resetNodes[j] );
                                 }
                             }
@@ -689,6 +744,11 @@
                     throw new IllegalStateException( "Unknown event: " + event 
);
             }
         }
+    }
+
+    public void enableLogging( Logger logger )
+    {
+        this.logger = logger;
     }
 
 }

Modified: 
maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java
URL: 
http://svn.apache.org/viewvc/maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java?rev=646141&r1=646140&r2=646141&view=diff
==============================================================================
--- 
maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java
 (original)
+++ 
maven/artifact/trunk/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java
 Tue Apr  8 16:49:27 2008
@@ -21,6 +21,7 @@
 
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
 import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
 
 import java.util.ArrayList;
@@ -53,9 +54,9 @@
     {
         this.artifact = artifact;
         this.remoteRepositories = remoteRepositories;
-        this.depth = 0;
-        this.parents = Collections.EMPTY_LIST;
-        this.parent = null;
+        depth = 0;
+        parents = Collections.EMPTY_LIST;
+        parent = null;
     }
 
     public ResolutionNode( Artifact artifact,
@@ -64,13 +65,13 @@
     {
         this.artifact = artifact;
         this.remoteRepositories = remoteRepositories;
-        this.depth = parent.depth + 1;
-        this.parents = new ArrayList();
-        this.parents.addAll( parent.parents );
-        this.parents.add( parent.getKey() );
+        depth = parent.depth + 1;
+        parents = new ArrayList();
+        parents.addAll( parent.parents );
+        parents.add( parent.getKey() );
         this.parent = parent;
     }
-    
+
     public Artifact getArtifact()
     {
         return artifact;
@@ -142,8 +143,17 @@
                 if ( artifact.getVersion() == null )
                 {
                     // set the recommended version
-                    String version = artifact.getSelectedVersion().toString();
-                    artifact.selectVersion( version );
+                    ArtifactVersion selected = artifact.getSelectedVersion();
+                    //MNG-2123: null is a valid response to 
getSelectedVersion, don't
+                    //assume it won't ever be.
+                    if (selected != null)
+                    {
+                        artifact.selectVersion( selected.toString() );
+                    }
+                    else
+                    {
+                        throw new OverConstrainedVersionException("Unable to 
get a selected Version for "+ artifact.getArtifactId(),artifact);
+                    }
                 }
 
                 ids.add( 0, artifact );
@@ -190,7 +200,7 @@
 
     public void enable()
     {
-        this.active = true;
+        active = true;
         // TODO: if it was null, we really need to go find them now... or is 
this taken care of by the ordering?
         if ( children != null )
         {
@@ -204,7 +214,7 @@
 
     public void disable()
     {
-        this.active = false;
+        active = false;
         if ( children != null )
         {
             for ( Iterator i = children.iterator(); i.hasNext(); )
@@ -233,6 +243,7 @@
         return success;
     }
 
+    @Override
     public String toString()
     {
         return artifact.toString() + " (" + depth + "; " + ( active ? 
"enabled" : "disabled" ) + ")";


Reply via email to