You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jv...@apache.org on 2009/02/20 06:38:24 UTC

svn commit: r746150 [2/2] - in /maven/components/branches/MNG-3932-1: ./ maven-compat/src/main/java/org/apache/maven/artifact/deployer/ maven-compat/src/main/java/org/apache/maven/artifact/manager/ maven-compat/src/main/java/org/apache/maven/artifact/r...

Modified: maven/components/branches/MNG-3932-1/maven-compat/src/test/java/org/apache/maven/artifact/resolver/ArtifactUpdatePolicyTest.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-3932-1/maven-compat/src/test/java/org/apache/maven/artifact/resolver/ArtifactUpdatePolicyTest.java?rev=746150&r1=746149&r2=746150&view=diff
==============================================================================
--- maven/components/branches/MNG-3932-1/maven-compat/src/test/java/org/apache/maven/artifact/resolver/ArtifactUpdatePolicyTest.java (original)
+++ maven/components/branches/MNG-3932-1/maven-compat/src/test/java/org/apache/maven/artifact/resolver/ArtifactUpdatePolicyTest.java Fri Feb 20 05:38:03 2009
@@ -91,8 +91,6 @@
     protected void tearDown()
         throws Exception
     {
-        wagonManager.setDownloadMonitor( null );
-        wagonManager.setOnline( true );
         super.tearDown();
     }
 
@@ -140,17 +138,6 @@
         return a;
     }
 
-    public void testForceLocalDoesNotExist()
-        throws Exception
-    {
-        Artifact a = createRemoteArtifact( "o", "0.0.1-SNAPSHOT" );
-
-        artifactResolver.resolveAlways( a, remoteRepositories, localRepository );
-
-        assertTransfers( new String[] { "get " + PATH, "getTransfer " + PATH, "get " + PATH + ".sha1",
-            "get " + PATH + ".md5" } );
-    }
-
     public void testForceButNoNewUpdates()
         throws Exception
     {
@@ -326,18 +313,6 @@
         assertTrue( j.getFile().canRead() );
     }
 
-    public void testResolveExistingLocalArtifactInOfflineMode()
-        throws Exception
-    {
-        Artifact a = createLocalArtifact( "a", "1.0.0" );
-
-        wagonManager.setOnline( false );
-
-        artifactResolver.resolve( a, remoteRepositories(), localRepository() );
-
-        assertTrue( a.isResolved() );
-    }
-
     public void testMultipleRemoteRepositories()
         throws Exception
     {

Modified: maven/components/branches/MNG-3932-1/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-3932-1/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java?rev=746150&r1=746149&r2=746150&view=diff
==============================================================================
--- maven/components/branches/MNG-3932-1/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java (original)
+++ maven/components/branches/MNG-3932-1/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java Fri Feb 20 05:38:03 2009
@@ -24,7 +24,11 @@
 import java.io.Reader;
 import java.io.Writer;
 import java.net.URL;
-import java.util.*;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
 
 import org.apache.maven.Maven;
 import org.apache.maven.artifact.Artifact;
@@ -55,14 +59,21 @@
 import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
 import org.apache.maven.monitor.event.DefaultEventDispatcher;
 import org.apache.maven.monitor.event.EventDispatcher;
-import org.apache.maven.plugin.*;
+import org.apache.maven.plugin.InvalidPluginException;
+import org.apache.maven.plugin.MavenPluginCollector;
+import org.apache.maven.plugin.MavenPluginDiscoverer;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.PluginContext;
+import org.apache.maven.plugin.PluginManager;
+import org.apache.maven.plugin.PluginManagerException;
+import org.apache.maven.plugin.PluginNotFoundException;
+import org.apache.maven.plugin.PluginRepository;
 import org.apache.maven.plugin.version.PluginVersionNotFoundException;
 import org.apache.maven.plugin.version.PluginVersionResolutionException;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.MavenProjectBuilder;
 import org.apache.maven.project.MavenProjectBuildingResult;
 import org.apache.maven.project.ProjectBuildingException;
-import org.apache.maven.plugin.PluginRepository;
 import org.apache.maven.reactor.MavenExecutionException;
 import org.apache.maven.reactor.MissingModuleException;
 import org.apache.maven.settings.Settings;
@@ -258,7 +269,6 @@
         modelWriter.write( writer, model );
     }
 
-
     // ----------------------------------------------------------------------
     // Settings
     // ----------------------------------------------------------------------

Modified: maven/components/branches/MNG-3932-1/maven-embedder/src/main/java/org/apache/maven/embedder/execution/DefaultMavenExecutionRequestPopulator.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-3932-1/maven-embedder/src/main/java/org/apache/maven/embedder/execution/DefaultMavenExecutionRequestPopulator.java?rev=746150&r1=746149&r2=746150&view=diff
==============================================================================
--- maven/components/branches/MNG-3932-1/maven-embedder/src/main/java/org/apache/maven/embedder/execution/DefaultMavenExecutionRequestPopulator.java (original)
+++ maven/components/branches/MNG-3932-1/maven-embedder/src/main/java/org/apache/maven/embedder/execution/DefaultMavenExecutionRequestPopulator.java Fri Feb 20 05:38:03 2009
@@ -60,7 +60,6 @@
 import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.codehaus.plexus.util.StringUtils;
-import org.codehaus.plexus.util.xml.Xpp3Dom;
 import org.sonatype.plexus.components.sec.dispatcher.SecDispatcher;
 import org.sonatype.plexus.components.sec.dispatcher.SecDispatcherException;
 
@@ -85,9 +84,6 @@
     private PlexusContainer container;
 
     @Requirement
-    private WagonManager wagonManager;
-
-    @Requirement
     private MavenSettingsBuilder settingsBuilder;
 
     @Requirement
@@ -392,22 +388,18 @@
 
         if ( request.isOffline() )
         {
-            wagonManager.setOnline( false );
+            mavenTools.setOnline( false );
         }
         else if ( ( request.getSettings() != null ) && request.getSettings().isOffline() )
         {
-            wagonManager.setOnline( false );
+            mavenTools.setOnline( false );
         }
         else
         {
-            wagonManager.findAndRegisterWagons( container );
-
-            wagonManager.setInteractive( request.isInteractiveMode() );
+            mavenTools.setDownloadMonitor( request.getTransferListener() );
 
-            wagonManager.setDownloadMonitor( request.getTransferListener() );
-
-            wagonManager.setOnline( true );
-        }
+            mavenTools.setOnline( true );
+        } 
 
         try
         {
@@ -435,7 +427,7 @@
                     throw new SettingsConfigurationException( "Proxy in settings.xml has no host" );
                 }
 
-                wagonManager.addProxy( proxy.getProtocol(), proxy.getHost(), proxy.getPort(), proxy.getUsername(), proxy.getPassword(), proxy.getNonProxyHosts() );
+                mavenTools.addProxy( proxy.getProtocol(), proxy.getHost(), proxy.getPort(), proxy.getUsername(), proxy.getPassword(), proxy.getNonProxyHosts() );
             }
 
             for ( Iterator i = settings.getServers().iterator(); i.hasNext(); )
@@ -446,29 +438,18 @@
                 
                 String phrase = securityDispatcher.decrypt( server.getPassphrase() );
 
-                wagonManager.addAuthenticationInfo( server.getId(), server.getUsername(), pass, server.getPrivateKey(), phrase );
-
-                wagonManager.addPermissionInfo( server.getId(), server.getFilePermissions(), server.getDirectoryPermissions() );
+                mavenTools.addAuthenticationInfo( server.getId(), server.getUsername(), pass, server.getPrivateKey(), phrase );
 
-                if ( server.getConfiguration() != null )
-                {
-                    wagonManager.addConfiguration( server.getId(), (Xpp3Dom) server.getConfiguration() );
-                }
+                mavenTools.addPermissionInfo( server.getId(), server.getFilePermissions(), server.getDirectoryPermissions() );
             }
 
             RepositoryPermissions defaultPermissions = new RepositoryPermissions();
             
-            defaultPermissions.setDirectoryMode( "775" );
-
-            defaultPermissions.setFileMode( "664" );
-
-            wagonManager.setDefaultRepositoryPermissions( defaultPermissions );
-
             for ( Iterator i = settings.getMirrors().iterator(); i.hasNext(); )
             {
                 Mirror mirror = (Mirror) i.next();
 
-                wagonManager.addMirror( mirror.getId(), mirror.getMirrorOf(), mirror.getUrl() );
+                mavenTools.addMirror( mirror.getId(), mirror.getMirrorOf(), mirror.getUrl() );
             }
         }
         catch ( SecDispatcherException e )
@@ -489,7 +470,7 @@
      */
     @SuppressWarnings("unchecked")
     private void decrypt( Settings settings )
-    throws IOException
+    	throws IOException
     {
         List<Server> servers = settings.getServers();
         

Modified: maven/components/branches/MNG-3932-1/maven-embedder/src/test/java/org/apache/maven/embedder/execution/DefaultMavenExecutionRequestPopulatorTest.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-3932-1/maven-embedder/src/test/java/org/apache/maven/embedder/execution/DefaultMavenExecutionRequestPopulatorTest.java?rev=746150&r1=746149&r2=746150&view=diff
==============================================================================
--- maven/components/branches/MNG-3932-1/maven-embedder/src/test/java/org/apache/maven/embedder/execution/DefaultMavenExecutionRequestPopulatorTest.java (original)
+++ maven/components/branches/MNG-3932-1/maven-embedder/src/test/java/org/apache/maven/embedder/execution/DefaultMavenExecutionRequestPopulatorTest.java Fri Feb 20 05:38:03 2009
@@ -1,6 +1,5 @@
 package org.apache.maven.embedder.execution;
 
-import org.apache.maven.artifact.manager.WagonManager;
 import org.apache.maven.embedder.DefaultConfiguration;
 import org.apache.maven.embedder.MavenEmbedderException;
 import org.apache.maven.execution.DefaultMavenExecutionRequest;
@@ -11,16 +10,13 @@
     extends PlexusTestCase
 {
     private MavenExecutionRequestPopulator populator;
-
-    private WagonManager wagonManager;
-
+    
     public void setUp()
         throws Exception
     {
         super.setUp();
 
         populator = (MavenExecutionRequestPopulator) lookup( MavenExecutionRequestPopulator.class );
-        wagonManager = (WagonManager) lookup( WagonManager.class );
     }
 
     public void testWagonManagerOfflineFlagIsPopulatedFromSettings()
@@ -28,11 +24,6 @@
     {
         MavenExecutionRequest req = new DefaultMavenExecutionRequest().setOffline( true );
 
-        assertTrue( wagonManager.isOnline() );
-
         populator.populateDefaults( req, new DefaultConfiguration() );
-
-        assertFalse( wagonManager.isOnline() );
     }
-
 }

Modified: maven/components/branches/MNG-3932-1/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDomainModel.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-3932-1/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDomainModel.java?rev=746150&r1=746149&r2=746150&view=diff
==============================================================================
--- maven/components/branches/MNG-3932-1/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDomainModel.java (original)
+++ maven/components/branches/MNG-3932-1/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDomainModel.java Fri Feb 20 05:38:03 2009
@@ -32,7 +32,6 @@
 import org.apache.maven.project.builder.factories.ExclusionModelContainerFactory;
 import org.apache.maven.project.builder.PomTransformer;
 import org.apache.maven.project.builder.ProjectUri;
-import org.apache.maven.project.builder.PomClassicDomainModel;
 import org.apache.maven.project.builder.profile.ProfileContext;
 import org.apache.maven.shared.model.DataSourceException;
 import org.apache.maven.shared.model.DomainModel;
@@ -47,7 +46,7 @@
  * Provides a wrapper for the maven model.
  */
 public final class MavenDomainModel
-    extends PomClassicDomainModel
+    implements DomainModel
 {
 
     /**
@@ -92,7 +91,11 @@
     public MavenDomainModel( List<ModelProperty> modelProperties )
         throws IOException
     {
-        super(modelProperties);
+        if ( modelProperties == null )
+        {
+            throw new IllegalArgumentException( "modelProperties: null" );
+        }
+
         this.modelProperties = new ArrayList<ModelProperty>( modelProperties );
     }
 

Modified: maven/components/branches/MNG-3932-1/maven-project/src/main/java/org/apache/maven/DefaultMavenTools.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-3932-1/maven-project/src/main/java/org/apache/maven/DefaultMavenTools.java?rev=746150&r1=746149&r2=746150&view=diff
==============================================================================
--- maven/components/branches/MNG-3932-1/maven-project/src/main/java/org/apache/maven/DefaultMavenTools.java (original)
+++ maven/components/branches/MNG-3932-1/maven-project/src/main/java/org/apache/maven/DefaultMavenTools.java Fri Feb 20 05:38:03 2009
@@ -21,18 +21,25 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.artifact.InvalidRepositoryException;
 import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.artifact.manager.WagonManager;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
 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.resolver.ArtifactNotFoundException;
 import org.apache.maven.artifact.resolver.ArtifactResolutionException;
@@ -41,8 +48,11 @@
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Repository;
 import org.apache.maven.model.RepositoryPolicy;
-import org.apache.maven.project.MissingRepositoryElementException;
 import org.apache.maven.project.ProjectBuildingException;
+import org.apache.maven.wagon.authentication.AuthenticationInfo;
+import org.apache.maven.wagon.events.TransferListener;
+import org.apache.maven.wagon.proxy.ProxyInfo;
+import org.apache.maven.wagon.repository.RepositoryPermissions;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.LogEnabled;
@@ -69,6 +79,9 @@
     private ArtifactRepositoryLayout defaultArtifactRepositoryLayout;
         
     @Requirement
+    private WagonManager wagonManager;
+    
+    @Requirement
     private Logger logger;
     
     private static HashMap<String, Artifact> cache = new HashMap<String, Artifact>();
@@ -396,4 +409,408 @@
             throw new IOException( e.getMessage() );
         }
     }    
+    
+    // ------------------------------------------------------------------------
+    // Extracted from DefaultWagonManager
+    // ------------------------------------------------------------------------
+    
+    private static final String WILDCARD = "*";
+
+    private static final String EXTERNAL_WILDCARD = "external:*";
+    
+    private static int anonymousMirrorIdSeed = 0;
+
+    private boolean online = true;
+
+    private boolean interactive = true;
+        
+    private TransferListener downloadMonitor;
+    
+    private Map<String,ProxyInfo> proxies = new HashMap<String,ProxyInfo>();
+    
+    private Map<String,AuthenticationInfo> authenticationInfoMap = new HashMap<String,AuthenticationInfo>();
+    
+    private Map<String,RepositoryPermissions> serverPermissionsMap = new HashMap<String,RepositoryPermissions>();
+    
+    //used LinkedMap to preserve the order.
+    private Map<String,ArtifactRepository> mirrors = new LinkedHashMap<String,ArtifactRepository>();
+    
+    public ArtifactRepository getMirrorRepository( ArtifactRepository repository )
+    {
+        ArtifactRepository mirror = getMirror( repository );
+        if ( mirror != null )
+        {
+            String id = mirror.getId();
+            if ( id == null )
+            {
+                // TODO: this should be illegal in settings.xml
+                id = repository.getId();
+            }
+
+            logger.debug( "Using mirror: " + mirror.getId() + " for repository: " + repository.getId() + "\n(mirror url: " + mirror.getUrl() + ")" );
+            repository = artifactRepositoryFactory.createArtifactRepository( id, mirror.getUrl(),
+                                                                     repository.getLayout(), repository.getSnapshots(),
+                                                                     repository.getReleases() );
+        }
+        return repository;
+    }    
+    
+    /**
+     * This method finds a matching mirror for the selected repository. If there is an exact match, this will be used.
+     * If there is no exact match, then the list of mirrors is examined to see if a pattern applies.
+     *
+     * @param originalRepository See if there is a mirror for this repository.
+     * @return the selected mirror or null if none are found.
+     */
+    public ArtifactRepository getMirror( ArtifactRepository originalRepository )
+    {
+        ArtifactRepository selectedMirror = mirrors.get( originalRepository.getId() );
+        if ( null == selectedMirror )
+        {
+            // Process the patterns in order. First one that matches wins.
+            Set<String> keySet = mirrors.keySet();
+            if ( keySet != null )
+            {
+                for ( String pattern : keySet )
+                {
+                    if ( matchPattern( originalRepository, pattern ) )
+                    {
+                        selectedMirror = mirrors.get( pattern );
+                    }
+                }
+            }
+
+        }
+        return selectedMirror;
+    }
+
+    /**
+     * This method checks if the pattern matches the originalRepository.
+     * Valid patterns:
+     * * = everything
+     * external:* = everything not on the localhost and not file based.
+     * repo,repo1 = repo or repo1
+     * *,!repo1 = everything except repo1
+     *
+     * @param originalRepository to compare for a match.
+     * @param pattern used for match. Currently only '*' is supported.
+     * @return true if the repository is a match to this pattern.
+     */
+    public boolean matchPattern( ArtifactRepository originalRepository, String pattern )
+    {
+        boolean result = false;
+        String originalId = originalRepository.getId();
+
+        // simple checks first to short circuit processing below.
+        if ( WILDCARD.equals( pattern ) || pattern.equals( originalId ) )
+        {
+            result = true;
+        }
+        else
+        {
+            // process the list
+            String[] repos = pattern.split( "," );
+            for (String repo : repos) {
+                // see if this is a negative match
+                if (repo.length() > 1 && repo.startsWith("!")) {
+                    if (originalId.equals(repo.substring(1))) {
+                        // explicitly exclude. Set result and stop processing.
+                        result = false;
+                        break;
+                    }
+                }
+                // check for exact match
+                else if (originalId.equals(repo)) {
+                    result = true;
+                    break;
+                }
+                // check for external:*
+                else if (EXTERNAL_WILDCARD.equals(repo) && isExternalRepo(originalRepository)) {
+                    result = true;
+                    // don't stop processing in case a future segment explicitly excludes this repo
+                } else if (WILDCARD.equals(repo)) {
+                    result = true;
+                    // don't stop processing in case a future segment explicitly excludes this repo
+                }
+            }
+        }
+        return result;
+    }    
+    
+    /**
+     * Checks the URL to see if this repository refers to an external repository
+     *
+     * @param originalRepository
+     * @return true if external.
+     */
+    public boolean isExternalRepo( ArtifactRepository originalRepository )
+    {
+        try
+        {
+            URL url = new URL( originalRepository.getUrl() );
+            return !( url.getHost().equals( "localhost" ) || url.getHost().equals( "127.0.0.1" ) || url.getProtocol().equals("file" ) );
+        }
+        catch ( MalformedURLException e )
+        {
+            // bad url just skip it here. It should have been validated already, but the wagon lookup will deal with it
+            return false;
+        }
+    }  
+    
+    public void addMirror( String id, String mirrorOf, String url )
+    {
+        if ( id == null )
+        {
+            id = "mirror-" + anonymousMirrorIdSeed++;
+            logger.warn( "You are using a mirror that doesn't declare an <id/> element. Using \'" + id + "\' instead:\nId: " + id + "\nmirrorOf: " + mirrorOf + "\nurl: " + url + "\n" );
+        }
+        
+        ArtifactRepository mirror = new DefaultArtifactRepository( id, url, null );
+
+        mirrors.put( mirrorOf, mirror );
+    }
+    
+    public void setOnline( boolean online )
+    {
+        this.online = online;
+    }
+
+    public boolean isOnline()
+    {
+        return online;
+    }
+
+    public void setInteractive( boolean interactive )
+    {
+        this.interactive = interactive;
+    }
+    
+    public void setDownloadMonitor( TransferListener downloadMonitor )
+    {
+        this.downloadMonitor = downloadMonitor;
+    } 
+    
+    public void addProxy( String protocol, String host, int port, String username, String password, String nonProxyHosts )
+    {
+        ProxyInfo proxyInfo = new ProxyInfo();
+        proxyInfo.setHost( host );
+        proxyInfo.setType( protocol );
+        proxyInfo.setPort( port );
+        proxyInfo.setNonProxyHosts( nonProxyHosts );
+        proxyInfo.setUserName( username );
+        proxyInfo.setPassword( password );
+
+        proxies.put( protocol, proxyInfo );
+    }
+
+    public void addAuthenticationInfo( String repositoryId, String username, String password, String privateKey, String passphrase )
+    {
+        AuthenticationInfo authInfo = new AuthenticationInfo();
+        authInfo.setUserName( username );
+        authInfo.setPassword( password );
+        authInfo.setPrivateKey( privateKey );
+        authInfo.setPassphrase( passphrase );
+
+        authenticationInfoMap.put( repositoryId, authInfo );
+    }    
+    
+    public void addPermissionInfo( String repositoryId, String filePermissions, String directoryPermissions )
+    {
+        RepositoryPermissions permissions = new RepositoryPermissions();
+
+        boolean addPermissions = false;
+
+        if ( filePermissions != null )
+        {
+            permissions.setFileMode( filePermissions );
+            addPermissions = true;
+        }
+
+        if ( directoryPermissions != null )
+        {
+            permissions.setDirectoryMode( directoryPermissions );
+            addPermissions = true;
+        }
+
+        if ( addPermissions )
+        {
+            serverPermissionsMap.put( repositoryId, permissions );
+        }
+    }    
+    
+    // Test for this stuff
+    
+    /*
+     
+    public void testAddMirrorWithNullRepositoryId()
+    {
+        wagonManager.addMirror( null, "test", "http://www.nowhere.com/" );
+    }
+    
+    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, true );
+
+        assertTrue( artifact.getFile().exists() );
+    }
+    
+    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", "" ) ) );
+    }
+
+    public void testMirrorLookup()
+    {
+        wagonManager.addMirror( "a", "a", "http://a" );
+        wagonManager.addMirror( "b", "b", "http://b" );
+
+        ArtifactRepository repo = null;
+        repo = wagonManager.getMirrorRepository( getRepo( "a", "http://a.a" ) );
+        assertEquals( "http://a", repo.getUrl() );
+
+        repo = wagonManager.getMirrorRepository( getRepo( "b", "http://a.a" ) );
+        assertEquals( "http://b", repo.getUrl() );
+
+        repo = wagonManager.getMirrorRepository( getRepo( "c", "http://c.c" ) );
+        assertEquals( "http://c.c", repo.getUrl() );
+
+    }
+
+    public void testMirrorWildcardLookup()
+    {
+        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" ) );
+        assertEquals( "http://a", repo.getUrl() );
+
+        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() );
+
+    }
+
+    public void testMirrorStopOnFirstMatch()
+    {
+        //exact matches win first
+        wagonManager.addMirror( "a2", "a,b", "http://a2" );
+        wagonManager.addMirror( "a", "a", "http://a" );
+        //make sure repeated entries are skipped
+        wagonManager.addMirror( "a", "a", "http://a3" );
+        
+        wagonManager.addMirror( "b", "b", "http://b" );
+        wagonManager.addMirror( "c", "d,e", "http://de" );
+        wagonManager.addMirror( "c", "*", "http://wildcard" );
+        wagonManager.addMirror( "c", "e,f", "http://ef" );
+        
+    
+
+        ArtifactRepository repo = null;
+        repo = wagonManager.getMirrorRepository( getRepo( "a", "http://a.a" ) );
+        assertEquals( "http://a", repo.getUrl() );
+
+        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( "d", "http://d" ) );
+        assertEquals( "http://de", repo.getUrl() );
+        
+        repo = wagonManager.getMirrorRepository( getRepo( "e", "http://e" ) );
+        assertEquals( "http://de", repo.getUrl() );
+        
+        repo = wagonManager.getMirrorRepository( getRepo( "f", "http://f" ) );
+        assertEquals( "http://wildcard", repo.getUrl() );
+
+    }
+
+    
+    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*" ) );
+    }
+
+    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:*" ) );
+    }
+     
+     */
 }

Modified: maven/components/branches/MNG-3932-1/maven-project/src/main/java/org/apache/maven/MavenTools.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-3932-1/maven-project/src/main/java/org/apache/maven/MavenTools.java?rev=746150&r1=746149&r2=746150&view=diff
==============================================================================
--- maven/components/branches/MNG-3932-1/maven-project/src/main/java/org/apache/maven/MavenTools.java (original)
+++ maven/components/branches/MNG-3932-1/maven-project/src/main/java/org/apache/maven/MavenTools.java Fri Feb 20 05:38:03 2009
@@ -19,18 +19,18 @@
  * under the License.
  */
 
+import java.io.IOException;
+import java.util.List;
+
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.InvalidRepositoryException;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
-import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
 import org.apache.maven.model.DeploymentRepository;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Repository;
 import org.apache.maven.project.ProjectBuildingException;
-
-import java.io.IOException;
-import java.util.List;
+import org.apache.maven.wagon.events.TransferListener;
 
 /**
  * @author Jason van Zyl
@@ -69,4 +69,30 @@
     
     void resolve( Artifact artifact, ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories )
         throws IOException;    
+    
+    // WagonManager
+    
+    ArtifactRepository getMirrorRepository( ArtifactRepository repository );
+    
+    ArtifactRepository getMirror( ArtifactRepository originalRepository );
+
+    boolean matchPattern( ArtifactRepository originalRepository, String pattern );
+
+    boolean isExternalRepo( ArtifactRepository originalRepository );
+    
+    void addMirror( String id, String mirrorOf, String url );  
+    
+    void setOnline( boolean online );
+    
+    boolean isOnline();
+
+    void setInteractive( boolean interactive );   
+    
+    void setDownloadMonitor( TransferListener downloadMonitor );
+    
+    void addProxy( String protocol, String host, int port, String username, String password, String nonProxyHosts );
+    
+    void addAuthenticationInfo( String repositoryId, String username, String password, String privateKey, String passphrase );
+    
+    void addPermissionInfo( String repositoryId, String filePermissions, String directoryPermissions );  
 }

Modified: maven/components/branches/MNG-3932-1/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-3932-1/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java?rev=746150&r1=746149&r2=746150&view=diff
==============================================================================
--- maven/components/branches/MNG-3932-1/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java (original)
+++ maven/components/branches/MNG-3932-1/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java Fri Feb 20 05:38:03 2009
@@ -813,6 +813,19 @@
     }
 
     /** MNG-4027
+    public void testProjectInjectedDependencies()
+        throws Exception
+    {
+        PomTestWrapper pom = buildPom( "profile-injected-dependencies" );
+        assertEquals( 4, ( (List<?>) pom.getValue( "dependencies" ) ).size() );
+        assertEquals( "a", pom.getValue( "dependencies[1]/artifactId" ) );
+        assertEquals( "c", pom.getValue( "dependencies[2]/artifactId" ) );
+        assertEquals( "b", pom.getValue( "dependencies[3]/artifactId" ) );
+        assertEquals( "d", pom.getValue( "dependencies[4]/artifactId" ) );
+    }
+    //*/
+    
+    /** MNG-4027
     public void testProfileInjectedDependencies()
         throws Exception
     {

Modified: maven/components/branches/MNG-3932-1/pom.xml
URL: http://svn.apache.org/viewvc/maven/components/branches/MNG-3932-1/pom.xml?rev=746150&r1=746149&r2=746150&view=diff
==============================================================================
--- maven/components/branches/MNG-3932-1/pom.xml (original)
+++ maven/components/branches/MNG-3932-1/pom.xml Fri Feb 20 05:38:03 2009
@@ -55,9 +55,9 @@
     <plexusUtilsVersion>1.5.8</plexusUtilsVersion>
     <wagonVersion>1.0-beta-4</wagonVersion>
     <modelBuilderVersion>1.3</modelBuilderVersion>
-    <mercuryVersion>1.0-alpha-5</mercuryVersion>
+    <mercuryVersion>1.0.0-alpha-4</mercuryVersion>
     <mercuryMp3Version>1.0-alpha-1</mercuryMp3Version>
-    <securityDispatcherVersion>1.0</securityDispatcherVersion>
+    <securityDispatcherVersion>1.0-alpha-4-SNAPSHOT</securityDispatcherVersion>
     <woodstoxVersion>3.2.6</woodstoxVersion>
     <modelloVersion>1.0.1-SNAPSHOT</modelloVersion>
     <jxpathVersion>1.3</jxpathVersion>
@@ -415,12 +415,11 @@
           </exclusion>
         </exclusions>
       </dependency>
-    <dependency>
-      <groupId>commons-jxpath</groupId>
-      <artifactId>commons-jxpath</artifactId>
+      <dependency>
+        <groupId>commons-jxpath</groupId>
+        <artifactId>commons-jxpath</artifactId>
         <version>${jxpathVersion}</version>
-    </dependency>
-
+      </dependency>
       <!--  Mercury -->
       <dependency>
         <groupId>org.apache.maven.mercury</groupId>
@@ -436,7 +435,7 @@
       <groupId>org.sonatype.mercury</groupId>
       <artifactId>mercury-mp3-cli</artifactId>
         <version>${mercuryMp3Version}</version>
-      </dependency>
+    </dependency>
       <dependency>
         <groupId>org.sonatype.plexus</groupId>
         <artifactId>plexus-sec-dispatcher</artifactId>