Repository: maven
Updated Branches:
  refs/heads/master d745f8c47 -> 2d34e67ee


First pass at cleaning up MavenExecutionRequestPopulator and its use.

Push MavenExecutionRequestPopulator down to only operate in the MavenCli. Two 
of the three methods were already called from MavenCli so now all of them are. 
In the process I deleted a bunch of code and pursue my quest to remove Settings 
from the core in order to make a general configuration mechanism that can be 
plugged into the core via the MavenCli.

Also removed the requirement of the LegacyRepositorySystem in the 
DefaultMavenExecutionRequestPopulator which breaks another tie with the legacy 
code. I took the bits that were needed and a lot of the code, after tracing 
through it, is redundant so it has been deleted.

Turning off:

injectMirror( request, request.getRemoteRepositories(), request.getMirrors() );
injectMirror( request, request.getPluginArtifactRepositories(), 
request.getMirrors() );

in DefaultMavenExecutionRequestPopulator

Results :

Failed tests:
  
MavenITmng4190MirrorRepoMergingTest>AbstractMavenIntegrationTestCase.runTest:220->testit:76
 null expected:<[1]> but was:<[4]>

Tests in error:
  
MavenITmng4991NonProxyHostsTest>AbstractMavenIntegrationTestCase.runTest:220->testit:89
 » Verification
  
MavenITmng4963ParentResolutionFromMirrorTest>AbstractMavenIntegrationTestCase.runTest:220->testit:58
 » Verification

There is mirror evaluation code in DefaultMaven:newRepositorySession( 
MavenExecutionRequest request ) which appears to
duplicate this logic but not quite enough for the ITs to pass.

---

Turning off:

injectProxy( request.getRemoteRepositories(), request.getProxies() );
injectProxy( request.getPluginArtifactRepositories(), request.getProxies() );

in

DefaultMavenExecutionRequestPopulator

Result:

The ITs pass

So the code is not needed so it has been deleted.

---

Turning off:

injectProxy( request.getRemoteRepositories(), request.getProxies() );
injectProxy( request.getPluginArtifactRepositories(), request.getProxies() );
injectAuthentication( request.getRemoteRepositories(), request.getServers() );
injectAuthentication( request.getPluginArtifactRepositories(), 
request.getServers() );

in

DefaultMavenExecutionRequestPopulator

Result:

The ITs pass

The code in DefaultMaven:newRepositorySession( MavenExecutionRequest request ) 
appears to populate proxies and authentication correctly. The 
injectAuthentication code has been deleted.

---

This is also perfunctory in DefaultMavenExecutionRequestPopulator after tracing 
through it:

request.setRemoteRepositories( getEffectiveRepositories( request, 
request.getRemoteRepositories() ) );
request.setPluginArtifactRepositories( getEffectiveRepositories( request, 
request.getPluginArtifactRepositories() ) );


Project: http://git-wip-us.apache.org/repos/asf/maven/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/2d34e67e
Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/2d34e67e
Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/2d34e67e

Branch: refs/heads/master
Commit: 2d34e67eedb2dd8e9856beae7ccee53f62f1a1ee
Parents: d745f8c
Author: Jason van Zyl <ja...@tesla.io>
Authored: Sun Feb 8 08:41:05 2015 -0500
Committer: Jason van Zyl <ja...@tesla.io>
Committed: Sun Feb 8 22:26:48 2015 -0500

----------------------------------------------------------------------
 .../java/org/apache/maven/DefaultMaven.java     |  12 +-
 .../DefaultMavenExecutionRequestPopulator.java  | 477 +++++++++++++++++--
 .../maven/execution/MavenExecutionRequest.java  |   4 +
 ...faultMavenExecutionRequestPopulatorTest.java |   2 +-
 .../java/org/apache/maven/cli/MavenCli.java     |  15 +-
 5 files changed, 463 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven/blob/2d34e67e/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
----------------------------------------------------------------------
diff --git a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java 
b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
index 8fc35e8..ee82c1d 100644
--- a/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
+++ b/maven-core/src/main/java/org/apache/maven/DefaultMaven.java
@@ -41,8 +41,6 @@ import org.apache.maven.eventspy.internal.EventSpyDispatcher;
 import org.apache.maven.execution.DefaultMavenExecutionResult;
 import org.apache.maven.execution.ExecutionEvent;
 import org.apache.maven.execution.MavenExecutionRequest;
-import org.apache.maven.execution.MavenExecutionRequestPopulationException;
-import org.apache.maven.execution.MavenExecutionRequestPopulator;
 import org.apache.maven.execution.MavenExecutionResult;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.execution.ProjectDependencyGraph;
@@ -117,9 +115,6 @@ public class DefaultMaven
     protected PlexusContainer container;
 
     @Requirement
-    MavenExecutionRequestPopulator populator;
-
-    @Requirement
     private ExecutionEventCatapult eventCatapult;
 
     @Requirement
@@ -146,22 +141,19 @@ public class DefaultMaven
     @Requirement
     private SessionScope sessionScope;
 
+    @Override
     public MavenExecutionResult execute( MavenExecutionRequest request )
     {
         MavenExecutionResult result;
 
         try
         {
-            result = doExecute( populator.populateDefaults( request ) );
+            result = doExecute( request );
         }
         catch ( OutOfMemoryError e )
         {
             result = addExceptionToResult( new DefaultMavenExecutionResult(), 
e );
         }
-        catch ( MavenExecutionRequestPopulationException e )
-        {
-            result = addExceptionToResult( new DefaultMavenExecutionResult(), 
e );
-        }
         catch ( RuntimeException e )
         {
             result =

http://git-wip-us.apache.org/repos/asf/maven/blob/2d34e67e/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulator.java
----------------------------------------------------------------------
diff --git 
a/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulator.java
 
b/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulator.java
index bb794ee..dc2521c 100644
--- 
a/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulator.java
+++ 
b/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulator.java
@@ -20,7 +20,10 @@ package org.apache.maven.execution;
  */
 
 import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -30,16 +33,29 @@ import java.util.Set;
 import javax.inject.Inject;
 import javax.inject.Named;
 
+import org.apache.maven.RepositoryUtils;
+import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.InvalidRepositoryException;
+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.MavenArtifactRepository;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout2;
 import org.apache.maven.bridge.MavenRepositorySystem;
 import org.apache.maven.repository.RepositorySystem;
+//
+// All of this needs to go away and be couched in terms of the execution 
request
+//
 import org.apache.maven.settings.Mirror;
 import org.apache.maven.settings.Proxy;
 import org.apache.maven.settings.Repository;
 import org.apache.maven.settings.Server;
 import org.apache.maven.settings.Settings;
 import org.apache.maven.settings.SettingsUtils;
+//
+// Settings in core
+//
 import org.apache.maven.toolchain.model.PersistedToolchains;
 import org.apache.maven.toolchain.model.ToolchainModel;
 import org.codehaus.plexus.util.StringUtils;
@@ -49,12 +65,16 @@ public class DefaultMavenExecutionRequestPopulator
     implements MavenExecutionRequestPopulator
 {
 
-    private final RepositorySystem repositorySystem;
+    private static final String WILDCARD = "*";
 
+    private static final String EXTERNAL_WILDCARD = "external:*";
+
+    private final Map<String, ArtifactRepositoryLayout> layouts;
+        
     @Inject
-    public DefaultMavenExecutionRequestPopulator( RepositorySystem 
repositorySystem )
+    public DefaultMavenExecutionRequestPopulator( RepositorySystem 
repositorySystem, Map<String, ArtifactRepositoryLayout> layouts )
     {
-        this.repositorySystem = repositorySystem;
+        this.layouts = layouts;
     }
 
     @Override
@@ -182,6 +202,29 @@ public class DefaultMavenExecutionRequestPopulator
         return request;
     }
     
+    @Override
+    public MavenExecutionRequest populateDefaults( MavenExecutionRequest 
request )
+        throws MavenExecutionRequestPopulationException
+    {
+        baseDirectory( request );
+
+        localRepository( request );
+
+        populateDefaultPluginGroups( request );
+
+        injectDefaultRepositories( request );
+
+        injectDefaultPluginRepositories( request );
+
+        processRepositoriesInSettings( request );
+
+        return request;
+    }
+    
+    //
+    //
+    //
+    
     private void populateDefaultPluginGroups( MavenExecutionRequest request )
     {
         request.addPluginGroup( "org.apache.maven.plugins" );
@@ -197,9 +240,9 @@ public class DefaultMavenExecutionRequestPopulator
         {
             try
             {
-                request.addRemoteRepository( 
repositorySystem.createDefaultRemoteRepository() );
+                request.addRemoteRepository( createDefaultRemoteRepository( 
request ) );
             }
-            catch ( InvalidRepositoryException e )
+            catch ( Exception e )
             {
                 throw new MavenExecutionRequestPopulationException( "Cannot 
create default remote repository.", e );
             }
@@ -215,15 +258,37 @@ public class DefaultMavenExecutionRequestPopulator
         {
             try
             {
-                request.addPluginArtifactRepository( 
repositorySystem.createDefaultRemoteRepository() );
+                request.addPluginArtifactRepository( 
createDefaultRemoteRepository( request ) );
             }
-            catch ( InvalidRepositoryException e )
+            catch ( Exception e )
             {
                 throw new MavenExecutionRequestPopulationException( "Cannot 
create default remote repository.", e );
             }
         }
     }
 
+    private ArtifactRepository createDefaultRemoteRepository( 
MavenExecutionRequest request )
+        throws Exception
+    {
+        return createRepository( request, 
RepositorySystem.DEFAULT_REMOTE_REPO_URL, 
RepositorySystem.DEFAULT_REMOTE_REPO_ID,
+                                 true, 
ArtifactRepositoryPolicy.UPDATE_POLICY_DAILY, false,
+                                 ArtifactRepositoryPolicy.UPDATE_POLICY_DAILY,
+                                 ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN 
);
+    }
+    
+    private ArtifactRepository createRepository( MavenExecutionRequest 
request, String url, String repositoryId, boolean releases,
+                                                 String releaseUpdates, 
boolean snapshots, String snapshotUpdates,
+                                                 String checksumPolicy ) 
throws Exception
+    {
+        ArtifactRepositoryPolicy snapshotsPolicy =
+            new ArtifactRepositoryPolicy( snapshots, snapshotUpdates, 
checksumPolicy );
+
+        ArtifactRepositoryPolicy releasesPolicy =
+            new ArtifactRepositoryPolicy( releases, releaseUpdates, 
checksumPolicy );
+
+        return createArtifactRepository( repositoryId, url, "default", 
snapshotsPolicy, releasesPolicy, request );
+    }
+        
     private Set<String> getRepoIds( List<ArtifactRepository> repositories )
     {
         Set<String> repoIds = new HashSet<String>();
@@ -242,17 +307,48 @@ public class DefaultMavenExecutionRequestPopulator
     private void processRepositoriesInSettings( MavenExecutionRequest request )
         throws MavenExecutionRequestPopulationException
     {
-        repositorySystem.injectMirror( request.getRemoteRepositories(), 
request.getMirrors() );
-        repositorySystem.injectProxy( request.getRemoteRepositories(), 
request.getProxies() );
-        repositorySystem.injectAuthentication( 
request.getRemoteRepositories(), request.getServers() );
-
-        request.setRemoteRepositories( 
repositorySystem.getEffectiveRepositories( request.getRemoteRepositories() ) );
-
-        repositorySystem.injectMirror( 
request.getPluginArtifactRepositories(), request.getMirrors() );
-        repositorySystem.injectProxy( request.getPluginArtifactRepositories(), 
request.getProxies() );
-        repositorySystem.injectAuthentication( 
request.getPluginArtifactRepositories(), request.getServers() );
-
-        request.setPluginArtifactRepositories( 
repositorySystem.getEffectiveRepositories( 
request.getPluginArtifactRepositories() ) );
+        //
+        //    <settings>
+        //      <mirrors>
+        //        <mirror>
+        //          <id>central</id>
+        //          <!-- NOTE: We need to try and use the proper host name/ip 
as Java generally ignores proxies for "localhost" -->
+        //          <url>http://10.0.1.34:62247/</url>
+        //          <mirrorOf>central</mirrorOf>
+        //        </mirror>
+        //      </mirrors>
+        //      <proxies>
+        //        <proxy>
+        //          <active>true</active>
+        //          <protocol>http</protocol>
+        //          <host>localhost</host>
+        //          <port>62248</port>
+        //          <nonProxyHosts>10.0.1.34</nonProxyHosts>
+        //        </proxy>
+        //      </proxies>
+        //      <profiles>
+        //        <profile>
+        //          <id>it-defaults</id>
+        //          <!-- disable central override and use built-in values -->
+        //        </profile>
+        //      </profiles>
+        //      <activeProfiles>
+        //        <activeProfile>it-defaults</activeProfile>
+        //      </activeProfiles>
+        //    </settings>
+        //
+        // Turns
+        //
+        // http://repo1.maven.org/maven2
+        //
+        // to
+        //
+        // http://10.0.1.34:62247/
+        //
+        // Not sure why the DefaultMirrorSelector doesn't do this...
+        //
+        injectMirror( request, request.getRemoteRepositories(), 
request.getMirrors() );
+        injectMirror( request, request.getPluginArtifactRepositories(), 
request.getMirrors() );
     }
 
     private void localRepository( MavenExecutionRequest request )
@@ -281,7 +377,7 @@ public class DefaultMavenExecutionRequestPopulator
     // Artifact Transfer Mechanism
     // ------------------------------------------------------------------------
 
-    public ArtifactRepository createLocalRepository( MavenExecutionRequest 
request )
+    private ArtifactRepository createLocalRepository( MavenExecutionRequest 
request )
         throws MavenExecutionRequestPopulationException
     {
         String localRepositoryPath = null;
@@ -298,9 +394,9 @@ public class DefaultMavenExecutionRequestPopulator
 
         try
         {
-            return repositorySystem.createLocalRepository( new File( 
localRepositoryPath ) );
+            return createLocalRepository( request, new File( 
localRepositoryPath ) );
         }
-        catch ( InvalidRepositoryException e )
+        catch ( Exception e )
         {
             throw new MavenExecutionRequestPopulationException( "Cannot create 
local repository.", e );
         }
@@ -313,23 +409,344 @@ public class DefaultMavenExecutionRequestPopulator
             request.setBaseDirectory( 
request.getPom().getAbsoluteFile().getParentFile() );
         }
     }
+    
+    //
+    // Code taken from LegacyRepositorySystem
+    //
+        
+    private ArtifactRepository createLocalRepository( MavenExecutionRequest 
request, File localRepository )
+        throws Exception
+    {
+        return createRepository( request, "file://" + 
localRepository.toURI().getRawPath(),
+                                 RepositorySystem.DEFAULT_LOCAL_REPO_ID, true,
+                                 
ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS, true,
+                                 ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS,
+                                 
ArtifactRepositoryPolicy.CHECKSUM_POLICY_IGNORE );
+    }
+    
+    private void injectMirror( MavenExecutionRequest request, 
List<ArtifactRepository> repositories, List<Mirror> mirrors )
+    {
+        if ( repositories != null && mirrors != null )
+        {
+            for ( ArtifactRepository repository : repositories )
+            {
+                Mirror mirror = getMirror( repository, mirrors );
+                injectMirror( request, repository, mirror );
+            }
+        }
+    }   
 
-    public MavenExecutionRequest populateDefaults( MavenExecutionRequest 
request )
-        throws MavenExecutionRequestPopulationException
+    private void injectMirror( MavenExecutionRequest request, 
ArtifactRepository repository, Mirror mirror )
     {
-        baseDirectory( request );
+        if ( mirror != null )
+        {
+            ArtifactRepository original =
+                createArtifactRepository( repository.getId(), 
repository.getUrl(), repository.getLayout(),
+                                          repository.getSnapshots(), 
repository.getReleases(), request );
 
-        localRepository( request );
+            repository.setMirroredRepositories( Collections.singletonList( 
original ) );
 
-        populateDefaultPluginGroups( request );
+            repository.setId( mirror.getId() );
+            repository.setUrl( mirror.getUrl() );
 
-        injectDefaultRepositories( request );
+            if ( StringUtils.isNotEmpty( mirror.getLayout() ) )
+            {
+                repository.setLayout( getLayout( mirror.getLayout() ) );
+            }
+        }
+    }    
+       
+    private ArtifactRepositoryLayout getLayout( String id )
+    {
+        ArtifactRepositoryLayout layout = layouts.get( id );
 
-        injectDefaultPluginRepositories( request );
+        if ( layout == null )
+        {
+            layout = new UnknownRepositoryLayout( id, layouts.get( "default" ) 
);
+        }
 
-        processRepositoriesInSettings( request );
+        return layout;
+    }
 
-        return request;
+    /**
+     * In the future, the legacy system might encounter repository types for 
which no layout components exists because
+     * the actual communication with the repository happens via a repository 
connector. As a minimum, the legacy system
+     * needs to retain the id of this layout so that the content type of the 
remote repository can still be accurately
+     * described.
+     */
+    private static class UnknownRepositoryLayout
+        implements ArtifactRepositoryLayout
+    {
+
+        private final String id;
+
+        private final ArtifactRepositoryLayout fallback;
+
+        public UnknownRepositoryLayout( String id, ArtifactRepositoryLayout 
fallback )
+        {
+            this.id = id;
+            this.fallback = fallback;
+        }
+
+        @Override
+        public String getId()
+        {
+            return id;
+        }
+
+        @Override
+        public String pathOf( Artifact artifact )
+        {
+            return fallback.pathOf( artifact );
+        }
+
+        @Override
+        public String pathOfLocalRepositoryMetadata( ArtifactMetadata 
metadata, ArtifactRepository repository )
+        {
+            return fallback.pathOfLocalRepositoryMetadata( metadata, 
repository );
+        }
+
+        @Override
+        public String pathOfRemoteRepositoryMetadata( ArtifactMetadata 
metadata )
+        {
+            return fallback.pathOfRemoteRepositoryMetadata( metadata );
+        }
+
+        @Override
+        public String toString()
+        {
+            return getId();
+        }
+    }    
+    
+    //
+    // ArtifactRepositoryFactory
+    //
+    private ArtifactRepository createArtifactRepository( String id, String 
url, String layoutId,
+                                                        
ArtifactRepositoryPolicy snapshots,
+                                                        
ArtifactRepositoryPolicy releases,
+                                                        MavenExecutionRequest 
request )
+        throws Exception
+    {
+        ArtifactRepositoryLayout layout = layouts.get( layoutId );
+
+        checkLayout( id, layoutId, layout );
+
+        return createArtifactRepository( id, url, layout, snapshots, releases, 
request );
+    }
+
+    private ArtifactRepository createArtifactRepository( String id, String url,
+                                                        
ArtifactRepositoryLayout repositoryLayout,
+                                                        
ArtifactRepositoryPolicy snapshots,
+                                                        
ArtifactRepositoryPolicy releases,
+                                                        MavenExecutionRequest 
request )
+    {
+        String globalChecksumPolicy = request.getGlobalChecksumPolicy();
+      
+        if ( snapshots == null )
+        {
+            snapshots = new ArtifactRepositoryPolicy();
+        }
+
+        if ( releases == null )
+        {
+            releases = new ArtifactRepositoryPolicy();
+        }
+
+        if ( globalChecksumPolicy != null )
+        {
+            snapshots.setChecksumPolicy( globalChecksumPolicy );
+            releases.setChecksumPolicy( globalChecksumPolicy );
+        }
+
+        ArtifactRepository repository;
+        if ( repositoryLayout instanceof ArtifactRepositoryLayout2 )
+        {
+            repository =
+                ( (ArtifactRepositoryLayout2) repositoryLayout 
).newMavenArtifactRepository( id, url, snapshots,
+                                                                               
              releases );
+        }
+        else
+        {
+            repository = new MavenArtifactRepository( id, url, 
repositoryLayout, snapshots, releases );
+        }
+
+        return repository;
+    }
+    
+    private void checkLayout( String repositoryId, String layoutId, 
ArtifactRepositoryLayout layout )
+        throws Exception
+    {
+        if ( layout == null )
+        {
+            throw new Exception( String.format( "Cannot find 
ArtifactRepositoryLayout instance for: %s %s", layoutId, repositoryId ) );
+        }
     }
+    
+    //
+    // MirrorSelector
+    //
+    private Mirror getMirror( ArtifactRepository repository, List<Mirror> 
mirrors )
+    {
+        String repoId = repository.getId();
+
+        if ( repoId != null && mirrors != null )
+        {
+            for ( Mirror mirror : mirrors )
+            {
+                if ( repoId.equals( mirror.getMirrorOf() ) && matchesLayout( 
repository, mirror ) )
+                {
+                    return mirror;
+                }
+            }
+
+            for ( Mirror mirror : mirrors )
+            {
+                if ( matchPattern( repository, mirror.getMirrorOf() ) && 
matchesLayout( repository, mirror ) )
+                {
+                    return mirror;
+                }
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * 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.
+     */
+    private 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 )
+            {
+                repo = repo.trim();
+                // see if this is a negative match
+                if ( repo.length() > 1 && repo.startsWith( "!" ) )
+                {
+                    if ( repo.substring( 1 ).equals( originalId ) )
+                    {
+                        // explicitly exclude. Set result and stop processing.
+                        result = false;
+                        break;
+                    }
+                }
+                // check for exact match
+                else if ( repo.equals( originalId ) )
+                {
+                    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.
+     */
+    private 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;
+        }
+    }
+
+    private boolean matchesLayout( ArtifactRepository repository, Mirror 
mirror )
+    {
+        return matchesLayout( RepositoryUtils.getLayout( repository ), 
mirror.getMirrorOfLayouts() );
+    }
+
+    /**
+     * Checks whether the layouts configured for a mirror match with the 
layout of the repository.
+     *
+     * @param repoLayout The layout of the repository, may be {@code null}.
+     * @param mirrorLayout The layouts supported by the mirror, may be {@code 
null}.
+     * @return {@code true} if the layouts associated with the mirror match 
the layout of the original repository,
+     *         {@code false} otherwise.
+     */
+    private boolean matchesLayout( String repoLayout, String mirrorLayout )
+    {
+        boolean result = false;
+
+        // simple checks first to short circuit processing below.
+        if ( StringUtils.isEmpty( mirrorLayout ) || WILDCARD.equals( 
mirrorLayout ) )
+        {
+            result = true;
+        }
+        else if ( mirrorLayout.equals( repoLayout ) )
+        {
+            result = true;
+        }
+        else
+        {
+            // process the list
+            String[] layouts = mirrorLayout.split( "," );
+            for ( String layout : layouts )
+            {
+                // see if this is a negative match
+                if ( layout.length() > 1 && layout.startsWith( "!" ) )
+                {
+                    if ( layout.substring( 1 ).equals( repoLayout ) )
+                    {
+                        // explicitly exclude. Set result and stop processing.
+                        result = false;
+                        break;
+                    }
+                }
+                // check for exact match
+                else if ( layout.equals( repoLayout ) )
+                {
+                    result = true;
+                    break;
+                }
+                else if ( WILDCARD.equals( layout ) )
+                {
+                    result = true;
+                    // don't stop processing in case a future segment 
explicitly excludes this repo
+                }
+            }
+        }
 
+        return result;
+    }    
 }

http://git-wip-us.apache.org/repos/asf/maven/blob/2d34e67e/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java
----------------------------------------------------------------------
diff --git 
a/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java
 
b/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java
index 15e2082..2b2a1d8 100644
--- 
a/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java
+++ 
b/maven-core/src/main/java/org/apache/maven/execution/MavenExecutionRequest.java
@@ -29,9 +29,13 @@ import 
org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
 import org.apache.maven.model.Profile;
 import org.apache.maven.project.ProjectBuildingRequest;
+//
+// These settings values need to be removed and pushed down into a provider of 
configuration information
+//
 import org.apache.maven.settings.Mirror;
 import org.apache.maven.settings.Proxy;
 import org.apache.maven.settings.Server;
+//
 import org.apache.maven.toolchain.model.ToolchainModel;
 import org.codehaus.plexus.logging.Logger;
 import org.eclipse.aether.RepositoryCache;

http://git-wip-us.apache.org/repos/asf/maven/blob/2d34e67e/maven-core/src/test/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulatorTest.java
----------------------------------------------------------------------
diff --git 
a/maven-core/src/test/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulatorTest.java
 
b/maven-core/src/test/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulatorTest.java
index 5019c7f..67f4dee 100644
--- 
a/maven-core/src/test/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulatorTest.java
+++ 
b/maven-core/src/test/java/org/apache/maven/execution/DefaultMavenExecutionRequestPopulatorTest.java
@@ -33,7 +33,7 @@ public class DefaultMavenExecutionRequestPopulatorTest
     extends TestCase
 {
     DefaultMavenExecutionRequestPopulator testee =
-        new DefaultMavenExecutionRequestPopulator( new TestRepositorySystem() 
);
+        new DefaultMavenExecutionRequestPopulator( new TestRepositorySystem(), 
null );
 
     public void testPluginRepositoryInjection()
         throws Exception

http://git-wip-us.apache.org/repos/asf/maven/blob/2d34e67e/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
----------------------------------------------------------------------
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java 
b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
index 5b7bd7f..35ccbd2 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
@@ -56,6 +56,7 @@ import org.apache.maven.exception.ExceptionSummary;
 import org.apache.maven.execution.DefaultMavenExecutionRequest;
 import org.apache.maven.execution.ExecutionListener;
 import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.execution.MavenExecutionRequestPopulationException;
 import org.apache.maven.execution.MavenExecutionRequestPopulator;
 import org.apache.maven.execution.MavenExecutionResult;
 import org.apache.maven.lifecycle.LifecycleExecutionException;
@@ -410,6 +411,7 @@ public class MavenCli
 
         container = new DefaultPlexusContainer( cc, new AbstractModule()
         {
+            @Override
             protected void configure()
             {
                 bind( ILoggerFactory.class ).toInstance( slf4jLoggerFactory );
@@ -590,11 +592,13 @@ public class MavenCli
         }
     }
 
-    private int execute( CliRequest cliRequest )
+    private int execute( CliRequest cliRequest ) throws 
MavenExecutionRequestPopulationException
     {
-        eventSpyDispatcher.onEvent( cliRequest.request );
+        MavenExecutionRequest request = 
executionRequestPopulator.populateDefaults( cliRequest.request );
+      
+        eventSpyDispatcher.onEvent( request );
 
-        MavenExecutionResult result = maven.execute( cliRequest.request );
+        MavenExecutionResult result = maven.execute( request );
 
         eventSpyDispatcher.onEvent( result );
 
@@ -1160,14 +1164,13 @@ public class MavenCli
         if ( localRepoProperty == null )
         {
             localRepoProperty = request.getSystemProperties().getProperty( 
MavenCli.LOCAL_REPO_PROPERTY );
-        }
-
+        }        
+        
         if ( localRepoProperty != null )
         {
             request.setLocalRepositoryPath( localRepoProperty );
         }
 
-
         request.setCacheNotFound( true );
         request.setCacheTransferError( false );
 

Reply via email to