Repository: maven
Updated Branches:
  refs/heads/master 18964baa2 -> 016932edb


MNG-5639: Support resolution of Import Scope POMs from Repo that contains a 
${parameter}

Fix up previous

Signed-off-by: Jason van Zyl <ja...@tesla.io>


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

Branch: refs/heads/master
Commit: 016932edbc6dfae2d0a8714a186a4e3a44174a78
Parents: 18964ba
Author: Mark Ingram <mark.ing...@trafigura.com>
Authored: Tue May 27 15:44:06 2014 +0100
Committer: Jason van Zyl <ja...@tesla.io>
Committed: Tue Jun 10 08:55:24 2014 -0400

----------------------------------------------------------------------
 .../internal/DefaultModelResolver.java          | 19 ++++++++++++
 .../maven/project/ProjectModelResolver.java     | 16 ++++++++--
 .../project/DefaultMavenProjectBuilderTest.java |  9 ++++++
 ...-resolves-from-property-based-repository.xml | 31 ++++++++++++++++++++
 .../model/building/DefaultModelBuilder.java     | 13 ++++++++
 .../maven/model/resolution/ModelResolver.java   |  6 ++++
 6 files changed, 92 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven/blob/016932ed/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java
----------------------------------------------------------------------
diff --git 
a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java
 
b/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java
index 08ad432..98eacb6 100644
--- 
a/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java
+++ 
b/maven-aether-provider/src/main/java/org/apache/maven/repository/internal/DefaultModelResolver.java
@@ -20,6 +20,7 @@ package org.apache.maven.repository.internal;
  */
 
 import java.io.File;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
@@ -60,6 +61,8 @@ class DefaultModelResolver
 
     private List<RemoteRepository> repositories;
 
+    private final List<RemoteRepository> externalRepositories;
+
     private final ArtifactResolver resolver;
 
     private final RemoteRepositoryManager remoteRepositoryManager;
@@ -76,6 +79,10 @@ class DefaultModelResolver
         this.resolver = resolver;
         this.remoteRepositoryManager = remoteRepositoryManager;
         this.repositories = repositories;
+        List<RemoteRepository> externalRepositories = new 
ArrayList<RemoteRepository>();
+        externalRepositories.addAll(repositories);
+        this.externalRepositories = 
Collections.unmodifiableList(externalRepositories);
+
         this.repositoryIds = new HashSet<String>();
     }
 
@@ -87,9 +94,11 @@ class DefaultModelResolver
         this.resolver = original.resolver;
         this.remoteRepositoryManager = original.remoteRepositoryManager;
         this.repositories = original.repositories;
+        this.externalRepositories = original.externalRepositories;
         this.repositoryIds = new HashSet<String>( original.repositoryIds );
     }
 
+    @Override
     public void addRepository( Repository repository )
         throws InvalidRepositoryException
     {
@@ -105,11 +114,21 @@ class DefaultModelResolver
             remoteRepositoryManager.aggregateRepositories( session, 
repositories, newRepositories, true );
     }
 
+    @Override
+    public void resetRepositories()
+    {
+        this.repositoryIds.clear();
+        this.repositories.clear();
+        this.repositories.addAll(externalRepositories);
+    }
+
+    @Override
     public ModelResolver newCopy()
     {
         return new DefaultModelResolver( this );
     }
 
+    @Override
     public ModelSource resolveModel( String groupId, String artifactId, String 
version )
         throws UnresolvableModelException
     {

http://git-wip-us.apache.org/repos/asf/maven/blob/016932ed/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java
----------------------------------------------------------------------
diff --git 
a/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java 
b/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java
index 522c79c..15cbdbb 100644
--- 
a/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java
+++ 
b/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java
@@ -84,8 +84,11 @@ class ProjectModelResolver
         this.resolver = resolver;
         this.remoteRepositoryManager = remoteRepositoryManager;
         this.pomRepositories = new ArrayList<RemoteRepository>();
-        this.externalRepositories = repositories;
-        this.repositories = repositories;
+        List<RemoteRepository> externalRepositories = new 
ArrayList<RemoteRepository>();
+        externalRepositories.addAll(repositories);
+        this.externalRepositories = 
Collections.unmodifiableList(externalRepositories);
+        this.repositories = new ArrayList<RemoteRepository>();
+        this.repositories.addAll(externalRepositories);
         this.repositoryMerging = repositoryMerging;
         this.repositoryIds = new HashSet<String>();
         this.modelPool = modelPool;
@@ -129,6 +132,15 @@ class ProjectModelResolver
         }
     }
 
+    @Override
+    public void resetRepositories()
+    {
+        this.repositoryIds.clear();
+        this.pomRepositories.clear();
+        this.repositories.clear();
+        this.repositories.addAll(externalRepositories);
+    }
+
     public ModelResolver newCopy()
     {
         return new ProjectModelResolver( this );

http://git-wip-us.apache.org/repos/asf/maven/blob/016932ed/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java
----------------------------------------------------------------------
diff --git 
a/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java
 
b/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java
index 7f1cef7..d7c2470 100644
--- 
a/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java
+++ 
b/maven-core/src/test/java/org/apache/maven/project/DefaultMavenProjectBuilderTest.java
@@ -181,4 +181,13 @@ public class DefaultMavenProjectBuilderTest
         }
     }
 
+    public void testImportScopePomResolvesFromPropertyBasedRepository()
+            throws Exception
+    {
+        File pomFile = getTestFile( 
"src/test/resources/projects/import-scope-pom-resolves-from-property-based-repository.xml"
 );
+        ProjectBuildingRequest request = newBuildingRequest();
+        request.setProcessPlugins( false );
+        request.setResolveDependencies( true );
+        projectBuilder.build( pomFile, request );
+    }
 }

http://git-wip-us.apache.org/repos/asf/maven/blob/016932ed/maven-core/src/test/resources/projects/import-scope-pom-resolves-from-property-based-repository.xml
----------------------------------------------------------------------
diff --git 
a/maven-core/src/test/resources/projects/import-scope-pom-resolves-from-property-based-repository.xml
 
b/maven-core/src/test/resources/projects/import-scope-pom-resolves-from-property-based-repository.xml
new file mode 100644
index 0000000..4c29a3b
--- /dev/null
+++ 
b/maven-core/src/test/resources/projects/import-scope-pom-resolves-from-property-based-repository.xml
@@ -0,0 +1,31 @@
+<project>
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>test</groupId>
+  <artifactId>imported-pom-found</artifactId>
+  <version>0.0.1-SNAPSHOT</version>
+
+  <properties>
+      <repo.url>file:src/test/remote-repo</repo.url>
+  </properties>
+
+  <repositories>
+    <repository>
+      <id>central</id>
+      <url>${repo.url}</url>
+    </repository>
+  </repositories>
+
+  <dependencyManagement>
+      <dependencies>
+          <dependency>
+              <groupId>org.apache.maven.its</groupId>
+              <artifactId>a</artifactId>
+              <version>0.1</version>
+              <type>pom</type>
+              <scope>import</scope>
+          </dependency>
+      </dependencies>
+  </dependencyManagement>
+
+</project>

http://git-wip-us.apache.org/repos/asf/maven/blob/016932ed/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
----------------------------------------------------------------------
diff --git 
a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
 
b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
index c301856..414646b 100644
--- 
a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
+++ 
b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
@@ -343,6 +343,9 @@ public class DefaultModelBuilder
 
         modelUrlNormalizer.normalize( resultModel, request );
 
+        //Now the fully interpolated model is available reconfigure the 
resolver
+        configureResolver( request.getModelResolver(), resultModel, problems , 
true );
+
         resultData.setGroupId( resultModel.getGroupId() );
         resultData.setArtifactId( resultModel.getArtifactId() );
         resultData.setVersion( resultModel.getVersion() );
@@ -551,6 +554,11 @@ public class DefaultModelBuilder
 
     private void configureResolver( ModelResolver modelResolver, Model model, 
DefaultModelProblemCollector problems )
     {
+        configureResolver( modelResolver, model, problems, false );
+    }
+
+    private void configureResolver( ModelResolver modelResolver, Model model, 
DefaultModelProblemCollector problems, boolean resetRepositories )
+    {
         if ( modelResolver == null )
         {
             return;
@@ -560,6 +568,11 @@ public class DefaultModelBuilder
 
         List<Repository> repositories = model.getRepositories();
 
+        if (resetRepositories)
+        {
+            modelResolver.resetRepositories();
+        }
+
         for ( Repository repository : repositories )
         {
             try

http://git-wip-us.apache.org/repos/asf/maven/blob/016932ed/maven-model-builder/src/main/java/org/apache/maven/model/resolution/ModelResolver.java
----------------------------------------------------------------------
diff --git 
a/maven-model-builder/src/main/java/org/apache/maven/model/resolution/ModelResolver.java
 
b/maven-model-builder/src/main/java/org/apache/maven/model/resolution/ModelResolver.java
index 506b527..742fe3c 100644
--- 
a/maven-model-builder/src/main/java/org/apache/maven/model/resolution/ModelResolver.java
+++ 
b/maven-model-builder/src/main/java/org/apache/maven/model/resolution/ModelResolver.java
@@ -56,6 +56,12 @@ public interface ModelResolver
         throws InvalidRepositoryException;
 
     /**
+     * Resets repositories, has the effect of clearing any repositories 
previously added by the
+     * {link #addRepository(Repository) method
+     */
+    void resetRepositories();
+
+    /**
      * Clones this resolver for usage in a forked resolution process. In 
general, implementors need not provide a deep
      * clone. The only requirement is that invocations of {@link 
#addRepository(Repository)} on the clone do not affect
      * the state of the original resolver and vice versa.

Reply via email to