You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2008/08/26 03:24:29 UTC

svn commit: r688932 [1/2] - in /maven/components/branches/maven-2.0.x: ./ apache-maven/ maven-artifact-manager/ maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/ maven-artifact-manager/src/test/java/org/apache/maven/artifact/manag...

Author: jdcasey
Date: Mon Aug 25 18:24:27 2008
New Revision: 688932

URL: http://svn.apache.org/viewvc?rev=688932&view=rev
Log:
Reinstating all changes since 2.0.9 that aren't associated with the two major changes related to concrete/dynamic build sections and POM interpolation.

Added:
    maven/components/branches/maven-2.0.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/StringWagon.java
      - copied, changed from r675074, maven/components/branches/maven-2.0.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/StringWagon.java
    maven/components/branches/maven-2.0.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/WagonString.java
      - copied unchanged from r675074, maven/components/branches/maven-2.0.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/WagonString.java
Modified:
    maven/components/branches/maven-2.0.x/   (props changed)
    maven/components/branches/maven-2.0.x/apache-maven/pom.xml
    maven/components/branches/maven-2.0.x/maven-artifact-manager/pom.xml
    maven/components/branches/maven-2.0.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java
    maven/components/branches/maven-2.0.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/DefaultWagonManagerTest.java
    maven/components/branches/maven-2.0.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java
    maven/components/branches/maven-2.0.x/maven-artifact-manager/src/test/resources/org/apache/maven/artifact/manager/DefaultWagonManagerTest.xml
    maven/components/branches/maven-2.0.x/maven-artifact-test/pom.xml
    maven/components/branches/maven-2.0.x/maven-artifact-test/src/main/java/org/apache/maven/artifact/test/ArtifactTestCase.java
    maven/components/branches/maven-2.0.x/maven-artifact/pom.xml
    maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadataSource.java
    maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java
    maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java
    maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java
    maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/DefaultArtifactVersion.java
    maven/components/branches/maven-2.0.x/maven-artifact/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactCollectorTest.java
    maven/components/branches/maven-2.0.x/maven-core-it-runner/pom.xml
    maven/components/branches/maven-2.0.x/maven-core/pom.xml
    maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/MavenArtifactFilterManager.java
    maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java
    maven/components/branches/maven-2.0.x/maven-core/src/main/resources/META-INF/plexus/components.xml
    maven/components/branches/maven-2.0.x/maven-error-diagnostics/pom.xml
    maven/components/branches/maven-2.0.x/maven-model/pom.xml
    maven/components/branches/maven-2.0.x/maven-monitor/pom.xml
    maven/components/branches/maven-2.0.x/maven-plugin-api/pom.xml
    maven/components/branches/maven-2.0.x/maven-plugin-descriptor/pom.xml
    maven/components/branches/maven-2.0.x/maven-plugin-parameter-documenter/pom.xml
    maven/components/branches/maven-2.0.x/maven-plugin-registry/pom.xml
    maven/components/branches/maven-2.0.x/maven-profile/pom.xml
    maven/components/branches/maven-2.0.x/maven-project/pom.xml
    maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ProjectUtils.java
    maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
    maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/TestArtifactResolver.java
    maven/components/branches/maven-2.0.x/maven-reporting/maven-reporting-api/pom.xml
    maven/components/branches/maven-2.0.x/maven-reporting/pom.xml
    maven/components/branches/maven-2.0.x/maven-repository-metadata/pom.xml
    maven/components/branches/maven-2.0.x/maven-script/maven-script-ant/pom.xml
    maven/components/branches/maven-2.0.x/maven-script/maven-script-beanshell/pom.xml
    maven/components/branches/maven-2.0.x/maven-script/pom.xml
    maven/components/branches/maven-2.0.x/maven-settings/pom.xml
    maven/components/branches/maven-2.0.x/maven-toolchain/pom.xml
    maven/components/branches/maven-2.0.x/pom.xml

Propchange: maven/components/branches/maven-2.0.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Aug 25 18:24:27 2008
@@ -0,0 +1 @@
+/maven/components/branches/maven-2.0.x:533160,636838,645583,645642,647357,649903,657432,659677,662033,662251,669665,670358,673499,673905,674059,675074,675087,675096,675375,675380,680604,682055

Modified: maven/components/branches/maven-2.0.x/apache-maven/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/apache-maven/pom.xml?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/apache-maven/pom.xml (original)
+++ maven/components/branches/maven-2.0.x/apache-maven/pom.xml Mon Aug 25 18:24:27 2008
@@ -23,7 +23,7 @@
   <parent>
     <artifactId>maven</artifactId>
     <groupId>org.apache.maven</groupId>
-    <version>2.0.11-SNAPSHOT</version>
+    <version>2.0.10-SNAPSHOT</version>
   </parent>
 
   <artifactId>apache-maven</artifactId>

Modified: maven/components/branches/maven-2.0.x/maven-artifact-manager/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-artifact-manager/pom.xml?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-artifact-manager/pom.xml (original)
+++ maven/components/branches/maven-2.0.x/maven-artifact-manager/pom.xml Mon Aug 25 18:24:27 2008
@@ -23,7 +23,7 @@
   <parent>
     <artifactId>maven</artifactId>
     <groupId>org.apache.maven</groupId>
-    <version>2.0.11-SNAPSHOT</version>
+    <version>2.0.10-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>maven-artifact-manager</artifactId>

Modified: maven/components/branches/maven-2.0.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java (original)
+++ maven/components/branches/maven-2.0.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java Mon Aug 25 18:24:27 2008
@@ -49,6 +49,7 @@
 import org.apache.maven.wagon.events.TransferListener;
 import org.apache.maven.wagon.observers.ChecksumObserver;
 import org.apache.maven.wagon.proxy.ProxyInfo;
+import org.apache.maven.wagon.proxy.ProxyInfoProvider;
 import org.apache.maven.wagon.repository.Repository;
 import org.apache.maven.wagon.repository.RepositoryPermissions;
 import org.codehaus.plexus.PlexusConstants;
@@ -239,7 +240,11 @@
                 }
             }
 
-            wagon.connect( artifactRepository, getAuthenticationInfo( repository.getId() ), getProxy( protocol ) );
+            wagon.connect( artifactRepository, getAuthenticationInfo( repository.getId() ), new ProxyInfoProvider(){
+                public ProxyInfo getProxyInfo(String protocol) {
+                    return (ProxyInfo) proxies.get( protocol );
+                }
+            });
 
             wagon.put( source, remotePath );
 
@@ -433,7 +438,11 @@
         try
         {
             wagon.connect( new Repository( repository.getId(), repository.getUrl() ),
-                           getAuthenticationInfo( repository.getId() ), getProxy( protocol ) );
+                           getAuthenticationInfo( repository.getId() ), new ProxyInfoProvider(){
+                public ProxyInfo getProxyInfo(String protocol) {
+                    return (ProxyInfo) proxies.get( protocol );
+                }
+            });
 
             boolean firstRun = true;
             boolean retry = true;
@@ -465,10 +474,20 @@
                         downloaded = true;
                     }
                 }
-                else
+                catch ( NoSuchAlgorithmException e )
+                {
+                    throw new TransferFailedException( "Unable to add checksum methods: " + e.getMessage(), e );
+                }
+                finally
                 {
-                    wagon.get( remotePath, temp );
-                    downloaded = true;
+                    if ( md5ChecksumObserver != null )
+                    {
+                        wagon.removeTransferListener( md5ChecksumObserver );
+                    }
+                    if ( sha1ChecksumObserver != null )
+                    {
+                        wagon.removeTransferListener( sha1ChecksumObserver );
+                    }
                 }
 
                 if ( downloaded )

Modified: maven/components/branches/maven-2.0.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/DefaultWagonManagerTest.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/DefaultWagonManagerTest.java?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/DefaultWagonManagerTest.java (original)
+++ maven/components/branches/maven-2.0.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/DefaultWagonManagerTest.java Mon Aug 25 18:24:27 2008
@@ -19,14 +19,31 @@
  * under the License.
  */
 
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.DefaultArtifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
 import org.apache.maven.artifact.repository.DefaultArtifactRepository;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
 import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.wagon.ResourceDoesNotExistException;
+import org.apache.maven.wagon.TransferFailedException;
 import org.apache.maven.wagon.UnsupportedProtocolException;
 import org.apache.maven.wagon.Wagon;
+import org.apache.maven.wagon.authorization.AuthorizationException;
+import org.apache.maven.wagon.events.TransferListener;
+import org.apache.maven.wagon.observers.Debug;
 import org.apache.maven.wagon.repository.Repository;
 import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.util.FileUtils;
 import org.codehaus.plexus.util.xml.Xpp3Dom;
+import org.easymock.MockControl;
 
 /**
  * @author <a href="michal.maczka@dimatics.com">Michal Maczka</a>
@@ -35,17 +52,57 @@
 public class DefaultWagonManagerTest
     extends PlexusTestCase
 {
+    private DefaultWagonManager wagonManager;
+
+    private TransferListener transferListener = new Debug();
 
-    private WagonManager wagonManager;
+    private ArtifactFactory artifactFactory;
 
     protected void setUp()
         throws Exception
     {
         super.setUp();
 
-        wagonManager = (WagonManager) lookup( WagonManager.ROLE );
+        wagonManager = (DefaultWagonManager) lookup( WagonManager.ROLE );
+        
+        artifactFactory = (ArtifactFactory) lookup( ArtifactFactory.ROLE );
+    }
+
+    private Artifact createTestPomArtifact( String directory )
+        throws IOException
+    {
+        File testData = getTestFile( directory );
+        FileUtils.deleteDirectory( testData );
+        testData.mkdirs();
+
+        Artifact artifact = artifactFactory.createProjectArtifact( "test", "test", "1.0" );
+        artifact.setFile( new File( testData, "test-1.0.pom" ) );
+        assertFalse( artifact.getFile().exists() );
+        return artifact;
+    }
+    
+    public void testGetArtifactSha1MissingMd5Present()
+        throws IOException, UnsupportedProtocolException, TransferFailedException, ResourceDoesNotExistException
+    {
+        Artifact artifact = createTestPomArtifact( "target/test-data/get-remote-artifact" );
+
+        ArtifactRepository repo = createStringRepo();
+
+        StringWagon wagon = (StringWagon) wagonManager.getWagon( "string" );
+        wagon.addExpectedContent( repo.getLayout().pathOf( artifact ), "expected" );
+        wagon.addExpectedContent( repo.getLayout().pathOf( artifact ) + ".md5", "bad_checksum" );
+        
+        wagonManager.getArtifact( artifact, repo );
+
+        assertTrue( artifact.getFile().exists() );
     }
 
+    private ArtifactRepository createStringRepo()
+    {
+        ArtifactRepository repo =
+            new DefaultArtifactRepository( "id", "string://url", new ArtifactRepositoryLayoutStub() );
+        return repo;
+    }
     
     /**
      * checks the handling of urls
@@ -53,27 +110,26 @@
     public void testExternalURL()
     {
         DefaultWagonManager mgr = new DefaultWagonManager();
-        assertTrue(mgr.isExternalRepo( getRepo( "foo", "http://somehost" ) ));
-        assertTrue(mgr.isExternalRepo( getRepo( "foo", "http://somehost:9090/somepath" ) ));
-        assertTrue(mgr.isExternalRepo( getRepo( "foo", "ftp://somehost" ) ));
-        assertTrue(mgr.isExternalRepo( getRepo( "foo", "http://192.168.101.1" ) ));
-        assertTrue(mgr.isExternalRepo( getRepo( "foo", "http://" ) ));        
-        //these are local
-        assertFalse(mgr.isExternalRepo( getRepo( "foo", "http://localhost:8080" ) ));
-        assertFalse(mgr.isExternalRepo( getRepo( "foo", "http://127.0.0.1:9090" ) ));
-        assertFalse(mgr.isExternalRepo( getRepo( "foo", "file://localhost/somepath" ) ));
-        assertFalse(mgr.isExternalRepo( getRepo( "foo", "file://localhost/D:/somepath" ) ));
-        assertFalse(mgr.isExternalRepo( getRepo( "foo", "http://localhost" ) ));
-        assertFalse(mgr.isExternalRepo( getRepo( "foo", "http://127.0.0.1" ) ));
-        assertFalse(mgr.isExternalRepo( getRepo( "foo", "file:///somepath" ) ));
-        assertFalse(mgr.isExternalRepo( getRepo( "foo", "file://D:/somepath" ) ));
-
-        //not a proper url so returns false;
-        assertFalse(mgr.isExternalRepo( getRepo( "foo", "192.168.101.1" ) ));
-        assertFalse(mgr.isExternalRepo( getRepo( "foo", "" ) ));
+        assertTrue( mgr.isExternalRepo( getRepo( "foo", "http://somehost" ) ) );
+        assertTrue( mgr.isExternalRepo( getRepo( "foo", "http://somehost:9090/somepath" ) ) );
+        assertTrue( mgr.isExternalRepo( getRepo( "foo", "ftp://somehost" ) ) );
+        assertTrue( mgr.isExternalRepo( getRepo( "foo", "http://192.168.101.1" ) ) );
+        assertTrue( mgr.isExternalRepo( getRepo( "foo", "http://" ) ) );
+        // these are local
+        assertFalse( mgr.isExternalRepo( getRepo( "foo", "http://localhost:8080" ) ) );
+        assertFalse( mgr.isExternalRepo( getRepo( "foo", "http://127.0.0.1:9090" ) ) );
+        assertFalse( mgr.isExternalRepo( getRepo( "foo", "file://localhost/somepath" ) ) );
+        assertFalse( mgr.isExternalRepo( getRepo( "foo", "file://localhost/D:/somepath" ) ) );
+        assertFalse( mgr.isExternalRepo( getRepo( "foo", "http://localhost" ) ) );
+        assertFalse( mgr.isExternalRepo( getRepo( "foo", "http://127.0.0.1" ) ) );
+        assertFalse( mgr.isExternalRepo( getRepo( "foo", "file:///somepath" ) ) );
+        assertFalse( mgr.isExternalRepo( getRepo( "foo", "file://D:/somepath" ) ) );
+
+        // not a proper url so returns false;
+        assertFalse( mgr.isExternalRepo( getRepo( "foo", "192.168.101.1" ) ) );
+        assertFalse( mgr.isExternalRepo( getRepo( "foo", "" ) ) );
     }
 
-    
     /**
      * Check that lookups with exact matches work and that no matches don't corrupt the repo.
      */
@@ -81,20 +137,19 @@
     {
         wagonManager.addMirror( "a", "a", "http://a" );
         wagonManager.addMirror( "b", "b", "http://b" );
-        
+
         ArtifactRepository repo = null;
-        repo = wagonManager.getMirrorRepository( getRepo("a","http://a.a" ));   
+        repo = wagonManager.getMirrorRepository( getRepo( "a", "http://a.a" ) );
         assertEquals( "http://a", repo.getUrl() );
-        
-        repo = wagonManager.getMirrorRepository( getRepo("b","http://a.a" ));   
+
+        repo = wagonManager.getMirrorRepository( getRepo( "b", "http://a.a" ) );
         assertEquals( "http://b", repo.getUrl() );
-        
-        repo = wagonManager.getMirrorRepository( getRepo("c","http://c.c") ); 
+
+        repo = wagonManager.getMirrorRepository( getRepo( "c", "http://c.c" ) );
         assertEquals( "http://c.c", repo.getUrl() );
-        
-    
+
     }
-       
+
     /**
      * Check that wildcards don't override exact id matches.
      */
@@ -103,107 +158,104 @@
         wagonManager.addMirror( "a", "a", "http://a" );
         wagonManager.addMirror( "b", "b", "http://b" );
         wagonManager.addMirror( "c", "*", "http://wildcard" );
-        
+
         ArtifactRepository repo = null;
-        repo = wagonManager.getMirrorRepository( getRepo("a","http://a.a" ));   
+        repo = wagonManager.getMirrorRepository( getRepo( "a", "http://a.a" ) );
         assertEquals( "http://a", repo.getUrl() );
-        
-        repo = wagonManager.getMirrorRepository( getRepo("b","http://a.a" ));   
+
+        repo = wagonManager.getMirrorRepository( getRepo( "b", "http://a.a" ) );
         assertEquals( "http://b", repo.getUrl() );
-        
-        repo = wagonManager.getMirrorRepository( getRepo("c","http://c.c") ); 
-        assertEquals( "http://wildcard", repo.getUrl() );    
-    
+
+        repo = wagonManager.getMirrorRepository( getRepo( "c", "http://c.c" ) );
+        assertEquals( "http://wildcard", repo.getUrl() );
+
     }
 
     /**
-     * Check that patterns are processed correctly
-     * Valid patterns: 
-     * * = everything
-     * external:* = everything not on the localhost and not file based.
-     * repo,repo1 = repo or repo1
-     * *,!repo1 = everything except repo1
-     * 
+     * Check that patterns are processed correctly Valid patterns: * = everything external:* = everything not on the
+     * localhost and not file based. repo,repo1 = repo or repo1 *,!repo1 = everything except repo1
      */
     public void testPatterns()
     {
         DefaultWagonManager mgr = new DefaultWagonManager();
-        
-        assertTrue(mgr.matchPattern( getRepo("a"), "*" ));
-        assertTrue(mgr.matchPattern( getRepo("a"), "*," ));
-        assertTrue(mgr.matchPattern( getRepo("a"), ",*," ));
-        assertTrue(mgr.matchPattern( getRepo("a"), "*," ));
-        
-        assertTrue(mgr.matchPattern( getRepo("a"), "a" ));
-        assertTrue(mgr.matchPattern( getRepo("a"), "a," ));
-        assertTrue(mgr.matchPattern( getRepo("a"), ",a," ));
-        assertTrue(mgr.matchPattern( getRepo("a"), "a," ));
-        
-        assertFalse(mgr.matchPattern( getRepo("b"), "a" ));
-        assertFalse(mgr.matchPattern( getRepo("b"), "a," ));
-        assertFalse(mgr.matchPattern( getRepo("b"), ",a" ));
-        assertFalse(mgr.matchPattern( getRepo("b"), ",a," ));
-        
-        assertTrue(mgr.matchPattern( getRepo("a"), "a,b" ));
-        assertTrue(mgr.matchPattern( getRepo("b"), "a,b" ));
-        
-        assertFalse(mgr.matchPattern( getRepo("c"), "a,b" ));
-        
-        assertTrue(mgr.matchPattern( getRepo("a"), "*" ));
-        assertTrue(mgr.matchPattern( getRepo("a"), "*,b" ));
-        assertTrue(mgr.matchPattern( getRepo("a"), "*,!b" ));
-        
-        assertFalse(mgr.matchPattern( getRepo("a"), "*,!a" ));
-        assertFalse(mgr.matchPattern( getRepo("a"), "!a,*" ));
-        
-        assertTrue(mgr.matchPattern( getRepo("c"), "*,!a" ));
-        assertTrue(mgr.matchPattern( getRepo("c"), "!a,*" ));       
-        
-        assertFalse(mgr.matchPattern( getRepo("c"), "!a,!c" ));
-        assertFalse(mgr.matchPattern( getRepo("d"), "!a,!c*" ));
+
+        assertTrue( mgr.matchPattern( getRepo( "a" ), "*" ) );
+        assertTrue( mgr.matchPattern( getRepo( "a" ), "*," ) );
+        assertTrue( mgr.matchPattern( getRepo( "a" ), ",*," ) );
+        assertTrue( mgr.matchPattern( getRepo( "a" ), "*," ) );
+
+        assertTrue( mgr.matchPattern( getRepo( "a" ), "a" ) );
+        assertTrue( mgr.matchPattern( getRepo( "a" ), "a," ) );
+        assertTrue( mgr.matchPattern( getRepo( "a" ), ",a," ) );
+        assertTrue( mgr.matchPattern( getRepo( "a" ), "a," ) );
+
+        assertFalse( mgr.matchPattern( getRepo( "b" ), "a" ) );
+        assertFalse( mgr.matchPattern( getRepo( "b" ), "a," ) );
+        assertFalse( mgr.matchPattern( getRepo( "b" ), ",a" ) );
+        assertFalse( mgr.matchPattern( getRepo( "b" ), ",a," ) );
+
+        assertTrue( mgr.matchPattern( getRepo( "a" ), "a,b" ) );
+        assertTrue( mgr.matchPattern( getRepo( "b" ), "a,b" ) );
+
+        assertFalse( mgr.matchPattern( getRepo( "c" ), "a,b" ) );
+
+        assertTrue( mgr.matchPattern( getRepo( "a" ), "*" ) );
+        assertTrue( mgr.matchPattern( getRepo( "a" ), "*,b" ) );
+        assertTrue( mgr.matchPattern( getRepo( "a" ), "*,!b" ) );
+
+        assertFalse( mgr.matchPattern( getRepo( "a" ), "*,!a" ) );
+        assertFalse( mgr.matchPattern( getRepo( "a" ), "!a,*" ) );
+
+        assertTrue( mgr.matchPattern( getRepo( "c" ), "*,!a" ) );
+        assertTrue( mgr.matchPattern( getRepo( "c" ), "!a,*" ) );
+
+        assertFalse( mgr.matchPattern( getRepo( "c" ), "!a,!c" ) );
+        assertFalse( mgr.matchPattern( getRepo( "d" ), "!a,!c*" ) );
     }
-    
+
     /**
-     * make sure the external if is fully exercised. We can assume file and ips are also handled because they
-     * have a separate test above. 
+     * make sure the external if is fully exercised. We can assume file and ips are also handled because they have a
+     * separate test above.
      */
     public void testPatternsWithExternal()
     {
         DefaultWagonManager mgr = new DefaultWagonManager();
 
-        assertTrue( mgr.matchPattern( getRepo( "a","http://localhost" ), "*" ) );
-        assertFalse( mgr.matchPattern( getRepo( "a","http://localhost" ), "external:*" ) );
-        
-        assertTrue( mgr.matchPattern( getRepo( "a","http://localhost" ), "external:*,a" ) );
-        assertFalse( mgr.matchPattern( getRepo( "a","http://localhost" ), "external:*,!a" ) );
-        assertTrue( mgr.matchPattern( getRepo( "a","http://localhost" ), "a,external:*" ) );
-        assertFalse( mgr.matchPattern( getRepo( "a","http://localhost" ), "!a,external:*" ) );
-        
-        assertFalse( mgr.matchPattern( getRepo( "c","http://localhost" ), "!a,external:*" ) );
-        assertTrue( mgr.matchPattern( getRepo( "c","http://somehost" ), "!a,external:*" ) );
+        assertTrue( mgr.matchPattern( getRepo( "a", "http://localhost" ), "*" ) );
+        assertFalse( mgr.matchPattern( getRepo( "a", "http://localhost" ), "external:*" ) );
+
+        assertTrue( mgr.matchPattern( getRepo( "a", "http://localhost" ), "external:*,a" ) );
+        assertFalse( mgr.matchPattern( getRepo( "a", "http://localhost" ), "external:*,!a" ) );
+        assertTrue( mgr.matchPattern( getRepo( "a", "http://localhost" ), "a,external:*" ) );
+        assertFalse( mgr.matchPattern( getRepo( "a", "http://localhost" ), "!a,external:*" ) );
+
+        assertFalse( mgr.matchPattern( getRepo( "c", "http://localhost" ), "!a,external:*" ) );
+        assertTrue( mgr.matchPattern( getRepo( "c", "http://somehost" ), "!a,external:*" ) );
     }
+
     /**
      * Build an ArtifactRepository object.
+     * 
      * @param id
      * @param url
      * @return
      */
-    private ArtifactRepository getRepo (String id, String url)
+    private ArtifactRepository getRepo( String id, String url )
     {
-        return (ArtifactRepository) new DefaultArtifactRepository(id,url,new DefaultRepositoryLayout());
+        return new DefaultArtifactRepository( id, url, new DefaultRepositoryLayout() );
     }
-    
+
     /**
      * Build an ArtifactRepository object.
+     * 
      * @param id
-     * @param url
      * @return
      */
-    private ArtifactRepository getRepo (String id)
+    private ArtifactRepository getRepo( String id )
     {
-        return getRepo(id,"http://something");
+        return getRepo( id, "http://something" );
     }
-    
+
     public void testDefaultWagonManager()
         throws Exception
     {
@@ -215,6 +267,8 @@
 
         assertWagon( "c" );
 
+        assertWagon( "string" );
+
         try
         {
             assertWagon( "d" );
@@ -223,7 +277,7 @@
         }
         catch ( UnsupportedProtocolException e )
         {
-            //ok
+            // ok
             assertTrue( true );
         }
     }
@@ -247,7 +301,7 @@
         }
         catch ( UnsupportedProtocolException e )
         {
-            //ok
+            // ok
             assertTrue( true );
         }
     }
@@ -261,21 +315,121 @@
 
             repository.setProtocol( null );
 
-            Wagon wagon = (Wagon) wagonManager.getWagon( repository );
+            Wagon wagon = wagonManager.getWagon( repository );
 
             fail( "Expected :" + UnsupportedProtocolException.class.getName() );
         }
         catch ( UnsupportedProtocolException e )
         {
-            //ok
+            // ok
             assertTrue( true );
         }
     }
 
+    /**
+     * Checks the verification of checksums.
+     */
+    public void testChecksumVerification()
+        throws Exception
+    {
+        ArtifactRepositoryPolicy policy =
+            new ArtifactRepositoryPolicy( true, ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS,
+                                          ArtifactRepositoryPolicy.CHECKSUM_POLICY_FAIL );
+        ArtifactRepository repo =
+            new DefaultArtifactRepository( "id", "string://url", new ArtifactRepositoryLayoutStub(), policy, policy );
+
+        Artifact artifact =
+            new DefaultArtifact( "sample.group", "sample-art", VersionRange.createFromVersion( "1.0" ), "scope",
+                                 "jar", "classifier", null );
+        artifact.setFile( getTestFile( "target/sample-art" ) );            
+
+        StringWagon wagon = (StringWagon) wagonManager.getWagon( "string" );
+        
+        wagon.clearExpectedContent();
+        wagon.addExpectedContent( "path", "lower-case-checksum" );
+        wagon.addExpectedContent( "path.sha1", "2a25dc564a3b34f68237fc849066cbc7bb7a36a1" );
+
+        try
+        {
+            wagonManager.getArtifact( artifact, repo );
+        }
+        catch ( ChecksumFailedException e )
+        {
+            fail( "Checksum verification did not pass: " + e.getMessage() );
+        }
+
+        wagon.clearExpectedContent();
+        wagon.addExpectedContent( "path", "upper-case-checksum" );
+        wagon.addExpectedContent( "path.sha1", "B7BB97D7D0B9244398D9B47296907F73313663E6" );
+
+        try
+        {
+            wagonManager.getArtifact( artifact, repo );
+        }
+        catch ( ChecksumFailedException e )
+        {
+            fail( "Checksum verification did not pass: " + e.getMessage() );
+        }
+
+        wagon.clearExpectedContent();
+        wagon.addExpectedContent( "path", "expected-failure" );
+        wagon.addExpectedContent( "path.sha1", "b7bb97d7d0b9244398d9b47296907f73313663e6" );
+
+        try
+        {
+            wagonManager.getArtifact( artifact, repo );
+            fail( "Checksum verification did not fail" );
+        }
+        catch ( ChecksumFailedException e )
+        {
+            // expected
+        }
+
+        wagon.clearExpectedContent();
+        wagon.addExpectedContent( "path", "lower-case-checksum" );
+        wagon.addExpectedContent( "path.md5", "50b2cf50a103a965efac62b983035cac" );
+
+        try
+        {
+            wagonManager.getArtifact( artifact, repo );
+        }
+        catch ( ChecksumFailedException e )
+        {
+            fail( "Checksum verification did not pass: " + e.getMessage() );
+        }
+
+        wagon.clearExpectedContent();
+        wagon.addExpectedContent( "path", "upper-case-checksum" );
+        wagon.addExpectedContent( "path.md5", "842F568FCCFEB7E534DC72133D42FFDC" );
+
+        try
+        {
+            wagonManager.getArtifact( artifact, repo );
+        }
+        catch ( ChecksumFailedException e )
+        {
+            fail( "Checksum verification did not pass: " + e.getMessage() );
+        }
+
+        wagon.clearExpectedContent();
+        wagon.addExpectedContent( "path", "expected-failure" );
+        wagon.addExpectedContent( "path.md5", "b7bb97d7d0b9244398d9b47296907f73313663e6" );
+
+        try
+        {
+            wagonManager.getArtifact( artifact, repo );
+            fail( "Checksum verification did not fail" );
+        }
+        catch ( ChecksumFailedException e )
+        {
+            // expected
+        }
+    }
+
     private void assertWagon( String protocol )
         throws Exception
     {
-        Wagon wagon = (Wagon) wagonManager.getWagon( protocol );
+        Wagon wagon = wagonManager.getWagon( protocol );
 
         assertNotNull( "Check wagon, protocol=" + protocol, wagon );
     }
@@ -308,4 +462,23 @@
         assertEquals( "Check configuration for wagon, protocol=" + protocol, s, wagon.getConfigurableField() );
     }
 
+    private final class ArtifactRepositoryLayoutStub
+        implements ArtifactRepositoryLayout
+    {
+        public String pathOfRemoteRepositoryMetadata( ArtifactMetadata metadata )
+        {
+            return "path";
+        }
+
+        public String pathOfLocalRepositoryMetadata( ArtifactMetadata metadata, ArtifactRepository repository )
+        {
+            return "path";
+        }
+
+        public String pathOf( Artifact artifact )
+        {
+            return "path";
+        }
+    }
+
 }

Copied: maven/components/branches/maven-2.0.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/StringWagon.java (from r675074, maven/components/branches/maven-2.0.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/StringWagon.java)
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/StringWagon.java?p2=maven/components/branches/maven-2.0.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/StringWagon.java&p1=maven/components/branches/maven-2.0.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/StringWagon.java&r1=675074&r2=688932&rev=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/StringWagon.java (original)
+++ maven/components/branches/maven-2.0.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/StringWagon.java Mon Aug 25 18:24:27 2008
@@ -19,6 +19,8 @@
  * under the License.
  */
 
+import java.io.File;
+import java.io.InputStream;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -31,6 +33,7 @@
 import org.apache.maven.wagon.authentication.AuthenticationException;
 import org.apache.maven.wagon.authorization.AuthorizationException;
 import org.apache.maven.wagon.resource.Resource;
+import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.StringInputStream;
 import org.codehaus.plexus.util.StringOutputStream;
 
@@ -46,7 +49,7 @@
 
     public String[] getSupportedProtocols()
     {
-        return new String[] { "noop" };
+        return new String[] { "string" };
     }
 
     public void closeConnection()
@@ -64,6 +67,7 @@
         if ( content != null )
         {
             resource.setContentLength( content.length() );
+            resource.setLastModified( System.currentTimeMillis() );
 
             inputData.setInputStream( new StringInputStream( content ) );
         }
@@ -83,4 +87,9 @@
         throws ConnectionException, AuthenticationException
     {
     }
+
+    public void clearExpectedContent()
+    {
+        expectedContent.clear();        
+    }
 }

Modified: maven/components/branches/maven-2.0.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java (original)
+++ maven/components/branches/maven-2.0.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/resolver/ArtifactResolverTest.java Mon Aug 25 18:24:27 2008
@@ -130,6 +130,14 @@
             {
                 throw new UnsupportedOperationException( "Cannot get available versions in this test case" );
             }
+
+            public Artifact retrieveRelocatedArtifact( Artifact artifact,
+                                                       ArtifactRepository localRepository,
+                                                       List remoteRepositories )
+                throws ArtifactMetadataRetrievalException
+            {
+                return artifact;
+            }
         };
 
         ArtifactResolutionResult result = artifactResolver.resolveTransitively( Collections.singleton( g ),
@@ -186,6 +194,14 @@
             {
                 throw new UnsupportedOperationException( "Cannot get available versions in this test case" );
             }
+
+            public Artifact retrieveRelocatedArtifact( Artifact artifact,
+                                                       ArtifactRepository localRepository,
+                                                       List remoteRepositories )
+                throws ArtifactMetadataRetrievalException
+            {
+                return artifact;
+            }
         };
 
         ArtifactResolutionResult result = artifactResolver.resolveTransitively( Collections.singleton( i ),

Modified: maven/components/branches/maven-2.0.x/maven-artifact-manager/src/test/resources/org/apache/maven/artifact/manager/DefaultWagonManagerTest.xml
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-artifact-manager/src/test/resources/org/apache/maven/artifact/manager/DefaultWagonManagerTest.xml?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-artifact-manager/src/test/resources/org/apache/maven/artifact/manager/DefaultWagonManagerTest.xml (original)
+++ maven/components/branches/maven-2.0.x/maven-artifact-manager/src/test/resources/org/apache/maven/artifact/manager/DefaultWagonManagerTest.xml Mon Aug 25 18:24:27 2008
@@ -40,8 +40,13 @@
       <implementation>org.apache.maven.artifact.manager.WagonC</implementation>
     </component>
     <component>
+      <role>org.apache.maven.wagon.Wagon</role>
+      <role-hint>string</role-hint>
+      <implementation>org.apache.maven.artifact.manager.StringWagon</implementation>
+    </component>
+    <component>
       <role>org.apache.maven.artifact.repository.authentication.AuthenticationInfoProvider</role>
       <implementation>org.apache.maven.artifact.repository.authentication.DummyAuthenticationInfoProvider</implementation>
     </component>
   </components>
-</plexus>
\ No newline at end of file
+</plexus>

Modified: maven/components/branches/maven-2.0.x/maven-artifact-test/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-artifact-test/pom.xml?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-artifact-test/pom.xml (original)
+++ maven/components/branches/maven-2.0.x/maven-artifact-test/pom.xml Mon Aug 25 18:24:27 2008
@@ -23,7 +23,7 @@
   <parent>
     <artifactId>maven</artifactId>
     <groupId>org.apache.maven</groupId>
-    <version>2.0.11-SNAPSHOT</version>
+    <version>2.0.10-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>maven-artifact-test</artifactId>

Modified: maven/components/branches/maven-2.0.x/maven-artifact-test/src/main/java/org/apache/maven/artifact/test/ArtifactTestCase.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-artifact-test/src/main/java/org/apache/maven/artifact/test/ArtifactTestCase.java?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-artifact-test/src/main/java/org/apache/maven/artifact/test/ArtifactTestCase.java (original)
+++ maven/components/branches/maven-2.0.x/maven-artifact-test/src/main/java/org/apache/maven/artifact/test/ArtifactTestCase.java Mon Aug 25 18:24:27 2008
@@ -26,9 +26,9 @@
 import org.apache.maven.settings.Settings;
 import org.apache.maven.settings.io.xpp3.SettingsXpp3Reader;
 import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.util.ReaderFactory;
 
 import java.io.File;
-import java.io.FileReader;
 
 /**
  * Test case that builds standard artifact stuff like repositories.
@@ -51,12 +51,16 @@
     {
         super.setUp();
 
-        File settingsFile = new File( System.getProperty( "user.home" ), ".m2/settings.xml" );
-        String localRepo = null;
-        if ( settingsFile.exists() )
+        String localRepo = System.getProperty( "maven.repo.local" );
+
+        if ( localRepo == null )
         {
-            Settings settings = new SettingsXpp3Reader().read( new FileReader( settingsFile ) );
-            localRepo = settings.getLocalRepository();
+            File settingsFile = new File( System.getProperty( "user.home" ), ".m2/settings.xml" );
+            if ( settingsFile.exists() )
+            {
+                Settings settings = new SettingsXpp3Reader().read( ReaderFactory.newXmlReader( settingsFile ) );
+                localRepo = settings.getLocalRepository();
+            }
         }
         if ( localRepo == null )
         {

Modified: maven/components/branches/maven-2.0.x/maven-artifact/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-artifact/pom.xml?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-artifact/pom.xml (original)
+++ maven/components/branches/maven-2.0.x/maven-artifact/pom.xml Mon Aug 25 18:24:27 2008
@@ -23,7 +23,7 @@
   <parent>
     <artifactId>maven</artifactId>
     <groupId>org.apache.maven</groupId>
-    <version>2.0.11-SNAPSHOT</version>
+    <version>2.0.10-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>maven-artifact</artifactId>

Modified: maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadataSource.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadataSource.java?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadataSource.java (original)
+++ maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/metadata/ArtifactMetadataSource.java Mon Aug 25 18:24:27 2008
@@ -28,7 +28,7 @@
 /**
  * Provides some metadata operations, like querying the remote repository for a list of versions available for an
  * artifact.
- * 
+ *
  * @author <a href="mailto:jason@maven.org">Jason van Zyl </a>
  * @version $Id$
  */
@@ -40,10 +40,16 @@
         throws ArtifactMetadataRetrievalException;
 
     /**
+     * Resolve all relocations in the POM for this artifact, and return the new artifact coordinate.
+     */
+    Artifact retrieveRelocatedArtifact( Artifact artifact, ArtifactRepository localRepository, List remoteRepositories )
+        throws ArtifactMetadataRetrievalException;
+
+    /**
      * Get a list of available versions for an artifact in the remote repository
-     * 
+     *
      * @param artifact artifact we are interested in. Only <code>groupid</code> and <code>artifactId</code>
-     *                 are needed, for instance the following code will work 
+     *                 are needed, for instance the following code will work
      *                 <code>artifactFactory.createProjectArtifact( "org.apache.maven", "maven", "" )</code>
      * @param localRepository local repository
      * @param remoteRepositories remote repositories, {@link List} $lt; {@link ArtifactRepository} >

Modified: maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java (original)
+++ maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/AbstractArtifactResolutionException.java Mon Aug 25 18:24:27 2008
@@ -45,7 +45,7 @@
 
     private String classifier;
 
-    private Artifact artifact; 
+    private Artifact artifact;
 
     private List remoteRepositories;
 
@@ -200,6 +200,7 @@
             }
         }
 
+        sb.append( LS );
         sb.append( constructArtifactPath( path, "" ) );
         sb.append( LS );
         return sb.toString();

Modified: maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java (original)
+++ maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java Mon Aug 25 18:24:27 2008
@@ -33,8 +33,6 @@
 
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
@@ -73,7 +71,7 @@
 
         ManagedVersionMap versionMap = getManagedVersionsMap( originatingArtifact, managedVersions );
 
-        recurse( root, resolvedArtifacts, versionMap, localRepository, remoteRepositories, source, filter,
+        recurse( originatingArtifact, root, resolvedArtifacts, versionMap, localRepository, remoteRepositories, source, filter,
                  listeners );
 
         Set set = new LinkedHashSet();
@@ -142,7 +140,7 @@
         return versionMap;
     }
 
-    private void recurse( ResolutionNode node, Map resolvedArtifacts, ManagedVersionMap managedVersions,
+    private void recurse( Artifact originatingArtifact, ResolutionNode node, Map resolvedArtifacts, ManagedVersionMap managedVersions,
                           ArtifactRepository localRepository, List remoteRepositories, ArtifactMetadataSource source,
                           ArtifactFilter filter, List listeners )
         throws CyclicDependencyException, ArtifactResolutionException, OverConstrainedVersionException
@@ -150,7 +148,7 @@
         fireEvent( ResolutionListener.TEST_ARTIFACT, listeners, node );
 
         Object key = node.getKey();
-        
+
         // TODO: Does this check need to happen here?  Had to add the same call
         // below when we iterate on child nodes -- will that suffice?
         if ( managedVersions.containsKey( key ))
@@ -192,7 +190,7 @@
                         for ( int j = 0; j < 2; j++ )
                         {
                             Artifact resetArtifact = resetNodes[j].getArtifact();
-                            
+
                             //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...)
@@ -220,7 +218,7 @@
                                     }
                                 }
                                 //end hack
-                               
+
                                 //MNG-2861: match version can return null
                                 ArtifactVersion selectedVersion = resetArtifact.getVersionRange().matchVersion( resetArtifact.getAvailableVersions() );
                                 if (selectedVersion != null)
@@ -231,7 +229,7 @@
                                 {
                                   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] );
                             }
                         }
@@ -296,85 +294,101 @@
                     Artifact artifact = child.getArtifact();
                     try
                     {
-                        Object childKey = child.getKey();
-                        if ( managedVersions.containsKey( childKey ) )
+                        Object childKey;
+                        do
                         {
-                            // If this child node is a managed dependency, ensure
-                            // we are using the dependency management version
-                            // of this child if applicable b/c we want to use the
-                            // managed version's POM, *not* any other version's POM.
-                            // We retrieve the POM below in the retrieval step.
-                            manageArtifact( child, managedVersions, listeners );
-                            
-                            // Also, we need to ensure that any exclusions it presents are
-                            // added to the artifact before we retrieve the metadata
-                            // for the artifact; otherwise we may end up with unwanted
-                            // dependencies.
-                            Artifact ma = (Artifact) managedVersions.get( childKey );
-                            ArtifactFilter managedExclusionFilter = ma.getDependencyFilter();
-                            if ( null != managedExclusionFilter )
+                            childKey = child.getKey();
+
+                            if ( managedVersions.containsKey( childKey ) )
                             {
-                                if ( null != artifact.getDependencyFilter() )
-                                {
-                                    AndArtifactFilter aaf = new AndArtifactFilter();
-                                    aaf.add( artifact.getDependencyFilter() );
-                                    aaf.add( managedExclusionFilter );
-                                    artifact.setDependencyFilter( aaf );
-                                }
-                                else
+                                // If this child node is a managed dependency, ensure
+                                // we are using the dependency management version
+                                // of this child if applicable b/c we want to use the
+                                // managed version's POM, *not* any other version's POM.
+                                // We retrieve the POM below in the retrieval step.
+                                manageArtifact( child, managedVersions, listeners );
+
+                                // Also, we need to ensure that any exclusions it presents are
+                                // added to the artifact before we retrieve the metadata
+                                // for the artifact; otherwise we may end up with unwanted
+                                // dependencies.
+                                Artifact ma = (Artifact) managedVersions.get( childKey );
+                                ArtifactFilter managedExclusionFilter = ma.getDependencyFilter();
+                                if ( null != managedExclusionFilter )
                                 {
-                                    artifact.setDependencyFilter( managedExclusionFilter );
+                                    if ( null != artifact.getDependencyFilter() )
+                                    {
+                                        AndArtifactFilter aaf = new AndArtifactFilter();
+                                        aaf.add( artifact.getDependencyFilter() );
+                                        aaf.add( managedExclusionFilter );
+                                        artifact.setDependencyFilter( aaf );
+                                    }
+                                    else
+                                    {
+                                        artifact.setDependencyFilter( managedExclusionFilter );
+                                    }
                                 }
                             }
-                        }
 
-                        if ( artifact.getVersion() == null )
-                        {
-                            // set the recommended version
-                            // TODO: maybe its better to just pass the range through to retrieval and use a transformation?
-                            ArtifactVersion version;
-                            if ( artifact.isSelectedVersionKnown() )
-                            {
-                                version = artifact.getSelectedVersion();
-                            }
-                            else
+                            if ( artifact.getVersion() == null )
                             {
-                                //go find the version
-                                List versions = artifact.getAvailableVersions();
-                                if ( versions == null )
+                                // set the recommended version
+                                // TODO: maybe its better to just pass the range through to retrieval and use a transformation?
+                                ArtifactVersion version;
+                                if ( artifact.isSelectedVersionKnown() )
                                 {
-                                    versions = source.retrieveAvailableVersions( artifact, localRepository,
-                                                                                 remoteRepositories );
-                                    artifact.setAvailableVersions( versions );
+                                    version = artifact.getSelectedVersion();
                                 }
-
-                                VersionRange versionRange = artifact.getVersionRange();
-
-                                version = versionRange.matchVersion( versions );
-
-                                if ( version == null )
+                                else
                                 {
-                                    if ( versions.isEmpty() )
+                                    //go find the version
+                                    List versions = artifact.getAvailableVersions();
+                                    if ( versions == null )
                                     {
-                                        throw new OverConstrainedVersionException(
-                                            "No versions are present in the repository for the artifact with a range " +
-                                                versionRange, artifact, remoteRepositories );
+                                        versions = source.retrieveAvailableVersions( artifact, localRepository,
+                                                                                     childRemoteRepositories );
+                                        artifact.setAvailableVersions( versions );
                                     }
-                                    else
+
+                                    Collections.sort( versions );
+
+                                    VersionRange versionRange = artifact.getVersionRange();
+
+                                    version = versionRange.matchVersion( versions );
+
+                                    if ( version == null )
                                     {
+                                        // Getting the dependency trail so it can be logged in the exception
+                                        artifact.setDependencyTrail( node.getDependencyTrail() );
+
+                                        if ( versions.isEmpty() )
+                                        {
+                                            throw new OverConstrainedVersionException(
+                                                "No versions are present in the repository for the artifact with a range " +
+                                                    versionRange, artifact, childRemoteRepositories );
+                                        }
+
                                         throw new OverConstrainedVersionException( "Couldn't find a version in " +
                                             versions + " to match range " + versionRange, artifact,
-                                                                                          remoteRepositories );
+                                            childRemoteRepositories );
                                     }
                                 }
+
+                                //this is dangerous because artifact.getSelectedVersion() can
+                                //return null. However it is ok here because we first check if the
+                                //selected version is known. As currently coded we can't get a null here.
+                                artifact.selectVersion( version.toString() );
+                                fireEvent( ResolutionListener.SELECT_VERSION_FROM_RANGE, listeners, child );
                             }
 
-                            //this is dangerous because artifact.getSelectedVersion() can
-                            //return null. However it is ok here because we first check if the
-                            //selected version is known. As currently coded we can't get a null here.
-                            artifact.selectVersion( version.toString() );
-                            fireEvent( ResolutionListener.SELECT_VERSION_FROM_RANGE, listeners, child );
+                            Artifact relocated = source.retrieveRelocatedArtifact( artifact, localRepository, childRemoteRepositories );
+                            if ( !artifact.equals( relocated ) )
+                            {
+                                artifact = relocated;
+                                child.setArtifact( artifact );
+                            }
                         }
+                        while( !childKey.equals( child.getKey() ) );
 
                         artifact.setDependencyTrail( node.getDependencyTrail() );
                         ResolutionGroup rGroup = source.retrieve( artifact, localRepository, remoteRepositories );
@@ -405,7 +419,7 @@
                             e );
                     }
 
-                    recurse( child, resolvedArtifacts, managedVersions, localRepository, remoteRepositories, source,
+                    recurse( originatingArtifact, child, resolvedArtifacts, managedVersions, localRepository, remoteRepositories, source,
                              filter, listeners );
                 }
             }

Modified: maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java (original)
+++ maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java Mon Aug 25 18:24:27 2008
@@ -19,6 +19,11 @@
  * under the License.
  */
 
+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;
 import java.util.Collections;
 import java.util.Iterator;
@@ -26,14 +31,9 @@
 import java.util.List;
 import java.util.Set;
 
-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;
-
 public class ResolutionNode
 {
-    private final Artifact artifact;
+    private Artifact artifact;
 
     private List children;
 
@@ -53,22 +53,27 @@
     {
         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, List remoteRepositories, ResolutionNode parent )
     {
         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 void setArtifact( Artifact artifact )
+    {
+        this.artifact = artifact;
+    }
+
     public Artifact getArtifact()
     {
         return artifact;
@@ -142,13 +147,13 @@
                     //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 );
@@ -191,7 +196,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 )
         {
@@ -205,7 +210,7 @@
 
     public void disable()
     {
-        this.active = false;
+        active = false;
         if ( children != null )
         {
             for ( Iterator i = children.iterator(); i.hasNext(); )

Modified: maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/DefaultArtifactVersion.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/DefaultArtifactVersion.java?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/DefaultArtifactVersion.java (original)
+++ maven/components/branches/maven-2.0.x/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/DefaultArtifactVersion.java Mon Aug 25 18:24:27 2008
@@ -183,6 +183,7 @@
         else
         {
             boolean fallback = false;
+
             StringTokenizer tok = new StringTokenizer( part1, "." );
             try
             {
@@ -199,6 +200,12 @@
                 {
                     fallback = true;
                 }
+
+                // string tokenzier won't detect these and ignores them
+                if ( part1.indexOf( ".." ) >= 0 || part1.startsWith( "." ) || part1.endsWith( "." ) )
+                {
+                    fallback = true;
+                }
             }
             catch ( NumberFormatException e )
             {

Modified: maven/components/branches/maven-2.0.x/maven-artifact/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactCollectorTest.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-artifact/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactCollectorTest.java?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-artifact/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactCollectorTest.java (original)
+++ maven/components/branches/maven-2.0.x/maven-artifact/src/test/java/org/apache/maven/artifact/resolver/DefaultArtifactCollectorTest.java Mon Aug 25 18:24:27 2008
@@ -1037,5 +1037,13 @@
                 artifactVersions.add( new DefaultArtifactVersion( spec.artifact.getVersion() ) );
             }
         }
+
+        public Artifact retrieveRelocatedArtifact( Artifact artifact,
+                                                   ArtifactRepository localRepository,
+                                                   List remoteRepositories )
+            throws ArtifactMetadataRetrievalException
+        {
+            return artifact;
+        }
     }
 }

Modified: maven/components/branches/maven-2.0.x/maven-core-it-runner/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-core-it-runner/pom.xml?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-core-it-runner/pom.xml (original)
+++ maven/components/branches/maven-2.0.x/maven-core-it-runner/pom.xml Mon Aug 25 18:24:27 2008
@@ -20,9 +20,11 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     <modelVersion>4.0.0</modelVersion>
-
-    <groupId>org.apache.maven</groupId>
-    <version>2.0.11-SNAPSHOT</version>
+    <parent>
+        <artifactId>maven</artifactId>
+        <groupId>org.apache.maven</groupId>
+        <version>2.0.10-SNAPSHOT</version>
+    </parent>
     <artifactId>maven-core-it-runner</artifactId>
     <name>Integration Test Executor</name>
     

Modified: maven/components/branches/maven-2.0.x/maven-core/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-core/pom.xml?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-core/pom.xml (original)
+++ maven/components/branches/maven-2.0.x/maven-core/pom.xml Mon Aug 25 18:24:27 2008
@@ -23,7 +23,7 @@
   <parent>
     <artifactId>maven</artifactId>
     <groupId>org.apache.maven</groupId>
-    <version>2.0.11-SNAPSHOT</version>
+    <version>2.0.10-SNAPSHOT</version>
   </parent>
 
   <artifactId>maven-core</artifactId>

Modified: maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/MavenArtifactFilterManager.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/MavenArtifactFilterManager.java?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/MavenArtifactFilterManager.java (original)
+++ maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/MavenArtifactFilterManager.java Mon Aug 25 18:24:27 2008
@@ -34,13 +34,36 @@
 {
     public static ArtifactFilter createStandardFilter()
     {
+        Set artifacts = createBaseArtifactSet();
+
+        artifacts.add( "wagon-file" );
+        artifacts.add( "wagon-http-lightweight" );
+        artifacts.add( "wagon-webdav" );
+        artifacts.add( "wagon-ssh" );
+        artifacts.add( "wagon-ssh-external" );
+
+        return new ExclusionSetFilter( artifacts );
+    }
+
+    public static ArtifactFilter createExtensionFilter()
+    {
+        Set artifacts = createBaseArtifactSet();
+
+        // It should be safe to include wagon implementations, and since this is used by the extension manager they would
+        // get filtered out otherwise
+        
+        return new ExclusionSetFilter( artifacts );
+    }
+
+    private static Set createBaseArtifactSet()
+    {
         // TODO: configure this from bootstrap or scan lib
         Set artifacts = new HashSet();
 
         artifacts.add( "classworlds" );
         artifacts.add( "commons-cli" );
         artifacts.add( "doxia-sink-api" );
-        artifacts.add( "jsch" );
+        artifacts.add( "doxia-logging-api" );
         artifacts.add( "maven-artifact" );
         artifacts.add( "maven-artifact-manager" );
         artifacts.add( "maven-core" );
@@ -58,20 +81,8 @@
         artifacts.add( "maven-settings" );
         artifacts.add( "plexus-container-default" );
         artifacts.add( "plexus-interactivity-api" );
-        //adding shared/maven-toolchain project here, even though not part of the default 
-        //distro yet.
         artifacts.add( "maven-toolchain" );
-        //artifacts.add( "plexus-utils" );
         artifacts.add( "wagon-provider-api" );
-
-        // It should be safe to include implementations, and since this is used by the extension manager they would
-        // get filtered out otherwise
-        //artifacts.add( "wagon-file" );
-        //artifacts.add( "wagon-http-lightweight" );
-        //artifacts.add( "wagon-webdav" );
-        //artifacts.add( "wagon-ssh" );
-        //artifacts.add( "wagon-ssh-external" );
-
-        return new ExclusionSetFilter( artifacts );
+        return artifacts;
     }
 }

Modified: maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java (original)
+++ maven/components/branches/maven-2.0.x/maven-core/src/main/java/org/apache/maven/extension/DefaultExtensionManager.java Mon Aug 25 18:24:27 2008
@@ -82,7 +82,7 @@
 
     private DefaultPlexusContainer container;
 
-    private ArtifactFilter artifactFilter = MavenArtifactFilterManager.createStandardFilter();
+    private ArtifactFilter artifactFilter = MavenArtifactFilterManager.createExtensionFilter();
 
     private WagonManager wagonManager;
 
@@ -270,7 +270,7 @@
             }
             catch ( ComponentLookupException e )
             {
-                // now wagons found in the extension
+                // no wagons found in the extension
             }
         }
     }
@@ -332,7 +332,7 @@
         }
         catch( Exception e )
         {
-            // do nothingls
+            // do nothing
         }
 
         return false;

Modified: maven/components/branches/maven-2.0.x/maven-core/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-core/src/main/resources/META-INF/plexus/components.xml?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-core/src/main/resources/META-INF/plexus/components.xml (original)
+++ maven/components/branches/maven-2.0.x/maven-core/src/main/resources/META-INF/plexus/components.xml Mon Aug 25 18:24:27 2008
@@ -583,5 +583,38 @@
         </requirement>
       </requirements>
     </component>
+    
+    <component>
+      <role>org.apache.maven.wagon.Wagon</role>
+      <role-hint>http</role-hint>
+      <implementation>org.apache.maven.wagon.providers.http.LightweightHttpWagon</implementation>
+      <instantiation-strategy>per-lookup</instantiation-strategy>
+      <description>LightweightHttpWagon</description>
+      <isolated-realm>false</isolated-realm>
+      <configuration>
+        <httpHeaders>
+          <property>
+            <name>User-Agent</name>
+            <value>Apache Maven/${project.version}</value>
+          </property>
+        </httpHeaders>
+      </configuration>
+    </component>
+    <component>
+      <role>org.apache.maven.wagon.Wagon</role>
+      <role-hint>https</role-hint>
+      <implementation>org.apache.maven.wagon.providers.http.LightweightHttpsWagon</implementation>
+      <instantiation-strategy>per-lookup</instantiation-strategy>
+      <description>LIghtweightHttpsWagon</description>
+      <isolated-realm>false</isolated-realm>
+      <configuration>
+        <httpHeaders>
+          <property>
+            <name>User-Agent</name>
+            <value>Apache Maven/${project.version}</value>
+          </property>
+        </httpHeaders>
+      </configuration>
+    </component>
   </components>
 </component-set>

Modified: maven/components/branches/maven-2.0.x/maven-error-diagnostics/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-error-diagnostics/pom.xml?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-error-diagnostics/pom.xml (original)
+++ maven/components/branches/maven-2.0.x/maven-error-diagnostics/pom.xml Mon Aug 25 18:24:27 2008
@@ -23,7 +23,7 @@
   <parent>
     <artifactId>maven</artifactId>
     <groupId>org.apache.maven</groupId>
-    <version>2.0.11-SNAPSHOT</version>
+    <version>2.0.10-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>maven-error-diagnostics</artifactId>

Modified: maven/components/branches/maven-2.0.x/maven-model/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-model/pom.xml?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-model/pom.xml (original)
+++ maven/components/branches/maven-2.0.x/maven-model/pom.xml Mon Aug 25 18:24:27 2008
@@ -23,7 +23,7 @@
   <parent>
     <artifactId>maven</artifactId>
     <groupId>org.apache.maven</groupId>
-    <version>2.0.11-SNAPSHOT</version>
+    <version>2.0.10-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>maven-model</artifactId>

Modified: maven/components/branches/maven-2.0.x/maven-monitor/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-monitor/pom.xml?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-monitor/pom.xml (original)
+++ maven/components/branches/maven-2.0.x/maven-monitor/pom.xml Mon Aug 25 18:24:27 2008
@@ -23,7 +23,7 @@
   <parent>
     <artifactId>maven</artifactId>
     <groupId>org.apache.maven</groupId>
-    <version>2.0.11-SNAPSHOT</version>
+    <version>2.0.10-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>maven-monitor</artifactId>

Modified: maven/components/branches/maven-2.0.x/maven-plugin-api/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-plugin-api/pom.xml?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-plugin-api/pom.xml (original)
+++ maven/components/branches/maven-2.0.x/maven-plugin-api/pom.xml Mon Aug 25 18:24:27 2008
@@ -23,7 +23,7 @@
   <parent>
     <artifactId>maven</artifactId>
     <groupId>org.apache.maven</groupId>
-    <version>2.0.11-SNAPSHOT</version>
+    <version>2.0.10-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>maven-plugin-api</artifactId>

Modified: maven/components/branches/maven-2.0.x/maven-plugin-descriptor/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-plugin-descriptor/pom.xml?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-plugin-descriptor/pom.xml (original)
+++ maven/components/branches/maven-2.0.x/maven-plugin-descriptor/pom.xml Mon Aug 25 18:24:27 2008
@@ -23,7 +23,7 @@
   <parent>
     <artifactId>maven</artifactId>
     <groupId>org.apache.maven</groupId>
-    <version>2.0.11-SNAPSHOT</version>
+    <version>2.0.10-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>maven-plugin-descriptor</artifactId>

Modified: maven/components/branches/maven-2.0.x/maven-plugin-parameter-documenter/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-plugin-parameter-documenter/pom.xml?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-plugin-parameter-documenter/pom.xml (original)
+++ maven/components/branches/maven-2.0.x/maven-plugin-parameter-documenter/pom.xml Mon Aug 25 18:24:27 2008
@@ -23,7 +23,7 @@
   <parent>
     <artifactId>maven</artifactId>
     <groupId>org.apache.maven</groupId>
-    <version>2.0.11-SNAPSHOT</version>
+    <version>2.0.10-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>maven-plugin-parameter-documenter</artifactId>

Modified: maven/components/branches/maven-2.0.x/maven-plugin-registry/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-plugin-registry/pom.xml?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-plugin-registry/pom.xml (original)
+++ maven/components/branches/maven-2.0.x/maven-plugin-registry/pom.xml Mon Aug 25 18:24:27 2008
@@ -21,7 +21,7 @@
   <parent>
     <artifactId>maven</artifactId>
     <groupId>org.apache.maven</groupId>
-    <version>2.0.11-SNAPSHOT</version>
+    <version>2.0.10-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.apache.maven</groupId>

Modified: maven/components/branches/maven-2.0.x/maven-profile/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-profile/pom.xml?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-profile/pom.xml (original)
+++ maven/components/branches/maven-2.0.x/maven-profile/pom.xml Mon Aug 25 18:24:27 2008
@@ -23,7 +23,7 @@
   <parent>
     <artifactId>maven</artifactId>
     <groupId>org.apache.maven</groupId>
-    <version>2.0.11-SNAPSHOT</version>
+    <version>2.0.10-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>maven-profile</artifactId>

Modified: maven/components/branches/maven-2.0.x/maven-project/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/pom.xml?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-project/pom.xml (original)
+++ maven/components/branches/maven-2.0.x/maven-project/pom.xml Mon Aug 25 18:24:27 2008
@@ -23,7 +23,7 @@
   <parent>
     <artifactId>maven</artifactId>
     <groupId>org.apache.maven</groupId>
-    <version>2.0.11-SNAPSHOT</version>
+    <version>2.0.10-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>maven-project</artifactId>

Modified: maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ProjectUtils.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ProjectUtils.java?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ProjectUtils.java (original)
+++ maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/ProjectUtils.java Mon Aug 25 18:24:27 2008
@@ -96,6 +96,16 @@
             String id = repo.getId();
             String url = repo.getUrl();
 
+            if ( id == null || id.trim().length() < 1 )
+            {
+                throw new InvalidRepositoryException( "Repository ID must not be empty (URL is: " + url + ").", new IllegalArgumentException( "repository.id" ) );
+            }
+
+            if ( url == null || url.trim().length() < 1 )
+            {
+                throw new InvalidRepositoryException( "Repository URL must not be empty (ID is: " + id + ").", new IllegalArgumentException( "repository.url" ) );
+            }
+
             // TODO: make this a map inside the factory instead, so no lookup needed
             ArtifactRepositoryLayout layout = getRepositoryLayout( repo, container );
 

Modified: maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java (original)
+++ maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/artifact/MavenMetadataSource.java Mon Aug 25 18:24:27 2008
@@ -78,11 +78,52 @@
     private MavenProject superProject;
 
     /**
-     * Retrieve the metadata for the project from the repository.
-     * Uses the ProjectBuilder, to enable post-processing and inheritance calculation before retrieving the
-     * associated artifacts.
+     * Resolve all relocations in the POM for this artifact, and return the new artifact coordinate.
      */
-    public ResolutionGroup retrieve( Artifact artifact, ArtifactRepository localRepository, List remoteRepositories )
+    public Artifact retrieveRelocatedArtifact( Artifact artifact, ArtifactRepository localRepository, List remoteRepositories )
+        throws ArtifactMetadataRetrievalException
+    {
+        if ( artifact instanceof ActiveProjectArtifact )
+        {
+            return artifact;
+        }
+
+        MavenProject project = retrieveRelocatedProject( artifact, localRepository, remoteRepositories );
+
+        if ( project == null || getRelocationKey( artifact ).equals( getRelocationKey( project.getArtifact() ) ) )
+        {
+            return artifact;
+        }
+
+        Artifact result = null;
+        if ( artifact.getClassifier() != null )
+        {
+            result = artifactFactory.createArtifactWithClassifier( project.getGroupId(), project.getArtifactId(), project.getVersion(), artifact.getType(), artifact.getClassifier() );
+        }
+        else
+        {
+            result = artifactFactory.createArtifact( project.getGroupId(), project.getArtifactId(), project.getVersion(), artifact.getScope(), artifact.getType() );
+        }
+
+        result.setResolved( artifact.isResolved() );
+        result.setFile( artifact.getFile() );
+
+        result.setScope( artifact.getScope() );
+        result.setArtifactHandler( artifact.getArtifactHandler() );
+        result.setDependencyFilter( artifact.getDependencyFilter() );
+        result.setDependencyTrail( artifact.getDependencyTrail() );
+        result.setOptional( artifact.isOptional() );
+        result.setRelease( artifact.isRelease() );
+
+        return result;
+    }
+
+    private String getRelocationKey( Artifact artifact )
+    {
+        return artifact.getGroupId() + ":" + artifact.getArtifactId() + ":" + artifact.getVersion();
+    }
+
+    private MavenProject retrieveRelocatedProject( Artifact artifact, ArtifactRepository localRepository, List remoteRepositories )
         throws ArtifactMetadataRetrievalException
     {
         MavenProject project = null;
@@ -154,15 +195,18 @@
                         if ( relocation.getGroupId() != null )
                         {
                             artifact.setGroupId( relocation.getGroupId() );
+                            project.setGroupId( relocation.getGroupId() );
                         }
                         if ( relocation.getArtifactId() != null )
                         {
                             artifact.setArtifactId( relocation.getArtifactId() );
+                            project.setArtifactId( relocation.getArtifactId() );
                         }
                         if ( relocation.getVersion() != null )
                         {
                             //note: see MNG-3454. This causes a problem, but fixing it may break more.
                             artifact.setVersionRange( VersionRange.createFromVersion( relocation.getVersion() ) );
+                            project.setVersion( relocation.getVersion() );
                         }
 
                         if ( artifact.getDependencyFilter() != null &&
@@ -213,8 +257,34 @@
         }
         while ( !done );
 
+        return project;
+    }
+
+    /**
+     * Retrieve the metadata for the project from the repository.
+     * Uses the ProjectBuilder, to enable post-processing and inheritance calculation before retrieving the
+     * associated artifacts.
+     */
+    public ResolutionGroup retrieve( Artifact artifact, ArtifactRepository localRepository, List remoteRepositories )
+        throws ArtifactMetadataRetrievalException
+    {
+        MavenProject project = retrieveRelocatedProject( artifact, localRepository, remoteRepositories );
+        Artifact pomArtifact;
+        if ( project != null )
+        {
+            pomArtifact = project.getArtifact();
+        }
+        else
+        {
+            pomArtifact = artifactFactory.createProjectArtifact( artifact.getGroupId(),
+                                                   artifact.getArtifactId(),
+                                                   artifact.getVersion(),
+                                                   artifact.getScope() );
+        }
+
+
         // last ditch effort to try to get this set...
-        if ( artifact.getDownloadUrl() == null )
+        if ( artifact.getDownloadUrl() == null && pomArtifact != null )
         {
             // TODO: this could come straight from the project, negating the need to set it in the project itself?
             artifact.setDownloadUrl( pomArtifact.getDownloadUrl() );

Modified: maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/TestArtifactResolver.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/TestArtifactResolver.java?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/TestArtifactResolver.java (original)
+++ maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/TestArtifactResolver.java Mon Aug 25 18:24:27 2008
@@ -178,6 +178,14 @@
 
             return projectArtifacts;
         }
+
+        public Artifact retrieveRelocatedArtifact( Artifact artifact,
+                                                   ArtifactRepository localRepository,
+                                                   List remoteRepositories )
+            throws ArtifactMetadataRetrievalException
+        {
+            return artifact;
+        }
     }
 
     public Source source()
@@ -215,7 +223,7 @@
     public void contextualize( Context context )
         throws ContextException
     {
-        this.container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
+        container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
     }
 
 }
\ No newline at end of file

Modified: maven/components/branches/maven-2.0.x/maven-reporting/maven-reporting-api/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-reporting/maven-reporting-api/pom.xml?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-reporting/maven-reporting-api/pom.xml (original)
+++ maven/components/branches/maven-2.0.x/maven-reporting/maven-reporting-api/pom.xml Mon Aug 25 18:24:27 2008
@@ -23,7 +23,7 @@
   <parent>
     <artifactId>maven-reporting</artifactId>
     <groupId>org.apache.maven.reporting</groupId>
-    <version>2.0.11-SNAPSHOT</version>
+    <version>2.0.10-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>maven-reporting-api</artifactId>

Modified: maven/components/branches/maven-2.0.x/maven-reporting/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-reporting/pom.xml?rev=688932&r1=688931&r2=688932&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-reporting/pom.xml (original)
+++ maven/components/branches/maven-2.0.x/maven-reporting/pom.xml Mon Aug 25 18:24:27 2008
@@ -23,7 +23,7 @@
   <parent>
     <artifactId>maven</artifactId>
     <groupId>org.apache.maven</groupId>
-    <version>2.0.11-SNAPSHOT</version>
+    <version>2.0.10-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.apache.maven.reporting</groupId>