You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by br...@apache.org on 2009/07/28 21:57:45 UTC

svn commit: r798691 - in /maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src: main/java/org/apache/maven/artifact/manager/ test/java/org/apache/maven/artifact/manager/ test/resources/org/apache/maven/artifact/manager/

Author: brett
Date: Tue Jul 28 19:57:44 2009
New Revision: 798691

URL: http://svn.apache.org/viewvc?rev=798691&view=rev
Log:
[MNG-4254] ensure the wagon provider is used for all requests, not just the first one

Added:
    maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/WagonAWithImplementationHint.java
      - copied, changed from r798556, maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/WagonA.java
Modified:
    maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java
    maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/DefaultWagonManagerTest.java
    maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/test/resources/org/apache/maven/artifact/manager/DefaultWagonManagerTest.xml

Modified: maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java
URL: http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java?rev=798691&r1=798690&r2=798691&view=diff
==============================================================================
--- maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java (original)
+++ maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java Tue Jul 28 19:57:44 2009
@@ -103,6 +103,8 @@
     /** Map( String, XmlPlexusConfiguration ) with the repository id and the wagon configuration */
     private Map<String, XmlPlexusConfiguration> serverConfigurationMap = new HashMap<String, XmlPlexusConfiguration>();
 
+    private Map<String, String> serverWagonProviderMap = new HashMap<String, String>();
+
     private TransferListener downloadMonitor;
 
     private boolean online = true;
@@ -170,28 +172,18 @@
         // TODO: Implement a better way to get the hint, via settings.xml or something.
         String impl = null;
         
-        if ( repositoryId != null && serverConfigurationMap.containsKey( repositoryId ) )
+        if ( repositoryId != null && serverWagonProviderMap.containsKey( repositoryId ) )
         {
-            XmlPlexusConfiguration config = serverConfigurationMap.get( repositoryId );
-            
-            Xpp3Dom dom = config.getXpp3Dom();
-            for ( int i = 0; i < dom.getChildCount(); i++ )
-            {
-                Xpp3Dom domChild = dom.getChild( i );
-                if ( WAGON_PROVIDER_CONFIGURATION.equals( domChild.getName() ) )
-                {
-                    impl = domChild.getValue();
-                    dom.removeChild( i );
-                    break;
-                }
-                
-                i++;
-            }
+            impl = serverWagonProviderMap.get( repositoryId );
+            getLogger().debug( "Using Wagon implementation " + impl + " from settings for server " + repositoryId );
         }
-        
-        if ( impl == null )
+        else
         {
             impl = providerMapping.getWagonProvider( protocol );
+            if ( impl != null )
+            {
+                getLogger().debug( "Using Wagon implementation " + impl + " from default mapping for protocol " + protocol );
+            }
         }
         
         return impl == null ? protocol : protocol + "-" + impl;
@@ -1203,6 +1195,19 @@
 
         final XmlPlexusConfiguration xmlConf = new XmlPlexusConfiguration( configuration );
 
+        for ( int i = 0; i < configuration.getChildCount(); i++ )
+        {
+            Xpp3Dom domChild = configuration.getChild( i );
+            if ( WAGON_PROVIDER_CONFIGURATION.equals( domChild.getName() ) )
+            {
+                serverWagonProviderMap.put( repositoryId, domChild.getValue() );
+                configuration.removeChild( i );
+                break;
+            }
+            
+            i++;
+        }
+
         serverConfigurationMap.put( repositoryId, xmlConf );
     }
     

Modified: maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/DefaultWagonManagerTest.java
URL: http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/DefaultWagonManagerTest.java?rev=798691&r1=798690&r2=798691&view=diff
==============================================================================
--- maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/DefaultWagonManagerTest.java (original)
+++ maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/DefaultWagonManagerTest.java Tue Jul 28 19:57:44 2009
@@ -566,6 +566,39 @@
         assertEquals( "Check configuration for wagon, protocol=" + protocol, s, wagon.getConfigurableField() );
     }
 
+    public void testWagonWithImplHint()
+        throws Exception
+    {
+        Repository repository = new Repository();
+
+        repository.setId( "id" );
+
+        repository.setProtocol( "a" );
+
+        Xpp3Dom conf = new Xpp3Dom( "configuration" );
+
+        Xpp3Dom configurableField = new Xpp3Dom( "wagonProvider" );
+
+        configurableField.setValue( "foo" );
+
+        conf.addChild( configurableField );
+
+        wagonManager.addConfiguration( repository.getId(), conf );
+
+        WagonMock wagon = (WagonMock) wagonManager.getWagon( repository );
+
+        assertNotNull( "Check wagon", wagon );
+
+        assertEquals( "Check configuration for wagon", WagonAWithImplementationHint.class, wagon.getClass() );
+
+        // try again to check configuration alterations don't modify behaviour
+        wagon = (WagonMock) wagonManager.getWagon( repository );
+
+        assertNotNull( "Check wagon", wagon );
+
+        assertEquals( "Check configuration for wagon", WagonAWithImplementationHint.class, wagon.getClass() );
+    }
+
     private final class ArtifactRepositoryLayoutStub
         implements ArtifactRepositoryLayout
     {

Copied: maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/WagonAWithImplementationHint.java (from r798556, maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/WagonA.java)
URL: http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/WagonAWithImplementationHint.java?p2=maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/WagonAWithImplementationHint.java&p1=maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/WagonA.java&r1=798556&r2=798691&rev=798691&view=diff
==============================================================================
--- maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/WagonA.java (original)
+++ maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/test/java/org/apache/maven/artifact/manager/WagonAWithImplementationHint.java Tue Jul 28 19:57:44 2009
@@ -26,7 +26,7 @@
  * @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
  * @version $Id$
  */
-public class WagonA
+public class WagonAWithImplementationHint
     extends WagonMock
 {
     public String[] getSupportedProtocols()

Modified: maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/test/resources/org/apache/maven/artifact/manager/DefaultWagonManagerTest.xml
URL: http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/test/resources/org/apache/maven/artifact/manager/DefaultWagonManagerTest.xml?rev=798691&r1=798690&r2=798691&view=diff
==============================================================================
--- maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/test/resources/org/apache/maven/artifact/manager/DefaultWagonManagerTest.xml (original)
+++ maven/maven-2/branches/maven-2.2.x/maven-artifact-manager/src/test/resources/org/apache/maven/artifact/manager/DefaultWagonManagerTest.xml Tue Jul 28 19:57:44 2009
@@ -26,6 +26,11 @@
     </component>
     <component>
       <role>org.apache.maven.wagon.Wagon</role>
+      <role-hint>a-foo</role-hint>
+      <implementation>org.apache.maven.artifact.manager.WagonAWithImplementationHint</implementation>
+    </component>
+    <component>
+      <role>org.apache.maven.wagon.Wagon</role>
       <role-hint>b1</role-hint>
       <implementation>org.apache.maven.artifact.manager.WagonB</implementation>
     </component>