[maven/f21] Add patch for MNG-5663

Mikolaj Izdebski mizdebsk at fedoraproject.org
Mon Feb 16 16:10:07 UTC 2015


commit 2179b35586fc6c0c0479cf200efae01b3aade285
Author: Mikolaj Izdebski <mizdebsk at redhat.com>
Date:   Mon Feb 16 16:37:01 2015 +0100

    Add patch for MNG-5663
    
    - Resolves: rhbz#1193103

 0001-Use-generics-in-modello-generated-code.patch  |    6 +-
 0002-Migrate-from-easymock-1-to-easymock-3.patch   |    6 +-
 0003-Update-Aether-to-0.9.0.M3.patch               |    6 +-
 0004-Update-to-Sisu-0.1.0-and-Guice-3.1.6.patch    |    6 +-
 ...663-a-regression-introduced-in-3.2.2-by-M.patch |  222 ++++++++++++++++++++
 maven.spec                                         |    9 +-
 6 files changed, 242 insertions(+), 13 deletions(-)
---
diff --git a/0001-Use-generics-in-modello-generated-code.patch b/0001-Use-generics-in-modello-generated-code.patch
index cc26ae1..9c8f10a 100644
--- a/0001-Use-generics-in-modello-generated-code.patch
+++ b/0001-Use-generics-in-modello-generated-code.patch
@@ -1,7 +1,7 @@
-From 6e5054ceaf1db425324548d2f62931df7733eb0e Mon Sep 17 00:00:00 2001
+From ce0cb71caac9b009de70b5406f7551ecebbc5aea Mon Sep 17 00:00:00 2001
 From: Stanislav Ochotnicky <sochotnicky at redhat.com>
 Date: Tue, 31 Jan 2012 13:12:32 +0100
-Subject: [PATCH 1/4] Use generics in modello generated code
+Subject: [PATCH 1/5] Use generics in modello generated code
 
 ---
  maven-model/pom.xml | 2 ++
@@ -43,5 +43,5 @@ index 6576a25..ccf6f36 100644
              <execution>
                <id>site-docs</id>
 -- 
-1.9.3
+2.1.0
 
diff --git a/0002-Migrate-from-easymock-1-to-easymock-3.patch b/0002-Migrate-from-easymock-1-to-easymock-3.patch
index 86ba5ec..bef3df4 100644
--- a/0002-Migrate-from-easymock-1-to-easymock-3.patch
+++ b/0002-Migrate-from-easymock-1-to-easymock-3.patch
@@ -1,7 +1,7 @@
-From 3d875b067847d00519f960bf83469b85685a4ec5 Mon Sep 17 00:00:00 2001
+From 32974767afa24ede2ad8193cc08f19dfbadd4b73 Mon Sep 17 00:00:00 2001
 From: Mikolaj Izdebski <mizdebsk at redhat.com>
 Date: Thu, 29 Aug 2013 10:11:48 +0200
-Subject: [PATCH 2/4] Migrate from easymock 1 to easymock 3
+Subject: [PATCH 2/5] Migrate from easymock 1 to easymock 3
 
 ---
  maven-compat/pom.xml                               |  2 +-
@@ -142,5 +142,5 @@ index ccf6f36..760e6c2 100644
          <version>${easyMockVersion}</version>
          <scope>test</scope>
 -- 
-1.9.3
+2.1.0
 
diff --git a/0003-Update-Aether-to-0.9.0.M3.patch b/0003-Update-Aether-to-0.9.0.M3.patch
index 25e6140..c9ac0ed 100644
--- a/0003-Update-Aether-to-0.9.0.M3.patch
+++ b/0003-Update-Aether-to-0.9.0.M3.patch
@@ -1,7 +1,7 @@
-From ff559645842bf21e3bfee6810ed2808657120396 Mon Sep 17 00:00:00 2001
+From 35e48f1584fcf17d65cc8aa27ba7db7ae8b05a3c Mon Sep 17 00:00:00 2001
 From: Mikolaj Izdebski <mizdebsk at redhat.com>
 Date: Mon, 12 Aug 2013 08:49:19 +0200
-Subject: [PATCH 3/4] Update Aether to 0.9.0.M3
+Subject: [PATCH 3/5] Update Aether to 0.9.0.M3
 
 ---
  apache-maven/pom.xml          | 6 +++++-
@@ -91,5 +91,5 @@ index 760e6c2..148b8ce 100644
        </dependency>
        <!--  Commons -->
 -- 
-1.9.3
+2.1.0
 
diff --git a/0004-Update-to-Sisu-0.1.0-and-Guice-3.1.6.patch b/0004-Update-to-Sisu-0.1.0-and-Guice-3.1.6.patch
index f619111..96b903c 100644
--- a/0004-Update-to-Sisu-0.1.0-and-Guice-3.1.6.patch
+++ b/0004-Update-to-Sisu-0.1.0-and-Guice-3.1.6.patch
@@ -1,7 +1,7 @@
-From b6c25c221f9020a5bc3cfc28bc627a4fff10ff73 Mon Sep 17 00:00:00 2001
+From c0504200e71f3950d3576f0d785708a9a774e562 Mon Sep 17 00:00:00 2001
 From: Mikolaj Izdebski <mizdebsk at redhat.com>
 Date: Wed, 13 Nov 2013 14:32:23 +0100
-Subject: [PATCH 4/4] Update to Sisu 0.1.0 and Guice 3.1.6
+Subject: [PATCH 4/5] Update to Sisu 0.1.0 and Guice 3.1.6
 
 Sisu depends on Guice, but dependency scope changed from "compile" to
 "provided" in Sisu 0.1.0.  As a Sisu user, Maven needs to have runtime
@@ -193,5 +193,5 @@ index 148b8ce..58727df 100644
      <securityDispatcherVersion>1.3</securityDispatcherVersion>
      <cipherVersion>1.7</cipherVersion>
 -- 
-1.9.3
+2.1.0
 
diff --git a/0005-Fixes-MNG-5663-a-regression-introduced-in-3.2.2-by-M.patch b/0005-Fixes-MNG-5663-a-regression-introduced-in-3.2.2-by-M.patch
new file mode 100644
index 0000000..334abf3
--- /dev/null
+++ b/0005-Fixes-MNG-5663-a-regression-introduced-in-3.2.2-by-M.patch
@@ -0,0 +1,222 @@
+From 73aed8e251693d9093f9940a45aa8f0671f44259 Mon Sep 17 00:00:00 2001
+From: markdingram <markdingram at gmail.com>
+Date: Fri, 18 Jul 2014 16:59:09 +0100
+Subject: [PATCH 5/5] Fixes MNG-5663 - a regression introduced in 3.2.2 by
+ MNG-5639 that prevents nested import POMs from resolving their dependencies.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The cuplrit was the resetRepositories method in tandem with the repository
+list instances being shared between ModelResolvers.
+
+- The copy constructor for the ModelResolvers now creates new lists.
+- The resetRepositories method has been removed. Instead there is a
+'replace' parameter on the addRepository method that allows the
+desired parameter replacement of MNG-5639 to take place.
+
+Signed-off-by: Jason van Zyl <jason at tesla.io>
+---
+ .../repository/internal/DefaultModelResolver.java  | 32 ++++++++++++++-----
+ .../apache/maven/project/ProjectModelResolver.java | 36 ++++++++++++++--------
+ .../maven/model/building/DefaultModelBuilder.java  |  9 ++----
+ .../maven/model/resolution/ModelResolver.java      | 14 +++++++--
+ 4 files changed, 61 insertions(+), 30 deletions(-)
+
+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 8335e01..859ab5a 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
+@@ -26,6 +26,8 @@
+ import java.util.List;
+ import java.util.Set;
+ 
++import com.google.common.base.Predicate;
++import com.google.common.collect.Iterables;
+ import org.apache.maven.model.Parent;
+ import org.apache.maven.model.Repository;
+ import org.apache.maven.model.building.FileModelSource;
+@@ -102,7 +104,7 @@ private DefaultModelResolver( DefaultModelResolver original )
+         this.resolver = original.resolver;
+         this.versionRangeResolver = original.versionRangeResolver;
+         this.remoteRepositoryManager = original.remoteRepositoryManager;
+-        this.repositories = original.repositories;
++        this.repositories = new ArrayList<RemoteRepository>(original.repositories);
+         this.externalRepositories = original.externalRepositories;
+         this.repositoryIds = new HashSet<String>( original.repositoryIds );
+     }
+@@ -111,11 +113,24 @@ private DefaultModelResolver( DefaultModelResolver original )
+     public void addRepository( Repository repository )
+         throws InvalidRepositoryException
+     {
+-        if ( session.isIgnoreArtifactDescriptorRepositories() || !repositoryIds.add( repository.getId() ) )
++        addRepository( repository, false );
++    }
++
++    @Override
++    public void addRepository(final Repository repository, boolean replace) throws InvalidRepositoryException {
++        if ( session.isIgnoreArtifactDescriptorRepositories() )
+         {
+             return;
+         }
+ 
++        if ( !repositoryIds.add( repository.getId() ) ) {
++            if ( !replace ) {
++                return;
++            }
++
++            removeMatchingRepository( repositories, repository.getId() );
++        }
++
+         List<RemoteRepository> newRepositories =
+             Collections.singletonList( ArtifactDescriptorUtils.toRemoteRepository( repository ) );
+ 
+@@ -123,12 +138,13 @@ public void addRepository( Repository repository )
+             remoteRepositoryManager.aggregateRepositories( session, repositories, newRepositories, true );
+     }
+ 
+-    @Override
+-    public void resetRepositories()
+-    {
+-        this.repositoryIds.clear();
+-        this.repositories.clear();
+-        this.repositories.addAll( externalRepositories );
++    private static void removeMatchingRepository(Iterable<RemoteRepository> repositories, final String id) {
++        Iterables.removeIf(repositories, new Predicate<RemoteRepository>() {
++            @Override
++            public boolean apply(RemoteRepository remoteRepository) {
++                return remoteRepository.getId().equals(id);
++            }
++        });
+     }
+ 
+     @Override
+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 eaa5792..c95dc4b 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
+@@ -26,6 +26,8 @@
+ import java.util.List;
+ import java.util.Set;
+ 
++import com.google.common.base.Predicate;
++import com.google.common.collect.Iterables;
+ import org.apache.maven.model.Parent;
+ import org.apache.maven.model.Repository;
+ import org.apache.maven.model.building.FileModelSource;
+@@ -104,9 +106,9 @@ private ProjectModelResolver( ProjectModelResolver original )
+         this.trace = original.trace;
+         this.resolver = original.resolver;
+         this.remoteRepositoryManager = original.remoteRepositoryManager;
+-        this.pomRepositories = original.pomRepositories;
++        this.pomRepositories = new ArrayList<RemoteRepository>(original.pomRepositories);
+         this.externalRepositories = original.externalRepositories;
+-        this.repositories = original.repositories;
++        this.repositories = new ArrayList<RemoteRepository>(original.repositories);
+         this.repositoryMerging = original.repositoryMerging;
+         this.repositoryIds = new HashSet<String>( original.repositoryIds );
+         this.modelPool = original.modelPool;
+@@ -115,9 +117,19 @@ private ProjectModelResolver( ProjectModelResolver original )
+     public void addRepository( Repository repository )
+         throws InvalidRepositoryException
+     {
+-        if ( !repositoryIds.add( repository.getId() ) )
+-        {
+-            return;
++         addRepository( repository, false );
++    }
++
++    @Override
++    public void addRepository(final Repository repository, boolean replace) throws InvalidRepositoryException {
++        if ( !repositoryIds.add( repository.getId() ) ) {
++            if ( !replace ) {
++                return;
++            }
++
++            //Remove any previous repository with this Id
++            removeMatchingRepository(repositories, repository.getId());
++            removeMatchingRepository(pomRepositories, repository.getId());
+         }
+ 
+         List<RemoteRepository> newRepositories =
+@@ -136,13 +148,13 @@ public void addRepository( Repository repository )
+         }
+     }
+ 
+-    @Override
+-    public void resetRepositories()
+-    {
+-        this.repositoryIds.clear();
+-        this.pomRepositories.clear();
+-        this.repositories.clear();
+-        this.repositories.addAll(externalRepositories);
++    private static void removeMatchingRepository(Iterable<RemoteRepository> repositories, final String id) {
++        Iterables.removeIf(repositories, new Predicate<RemoteRepository>() {
++            @Override
++            public boolean apply(RemoteRepository remoteRepository) {
++                return remoteRepository.getId().equals(id);
++            }
++        });
+     }
+ 
+     public ModelResolver newCopy()
+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 52c9fc3..39e68e2 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
+@@ -580,7 +580,7 @@ private void configureResolver( ModelResolver modelResolver, Model model, Defaul
+         configureResolver( modelResolver, model, problems, false );
+     }
+ 
+-    private void configureResolver( ModelResolver modelResolver, Model model, DefaultModelProblemCollector problems, boolean resetRepositories )
++    private void configureResolver( ModelResolver modelResolver, Model model, DefaultModelProblemCollector problems, boolean replaceRepositories )
+     {
+         if ( modelResolver == null )
+         {
+@@ -591,16 +591,11 @@ private void configureResolver( ModelResolver modelResolver, Model model, Defaul
+ 
+         List<Repository> repositories = model.getRepositories();
+ 
+-        if ( resetRepositories )
+-        {
+-            modelResolver.resetRepositories();
+-        }
+-
+         for ( Repository repository : repositories )
+         {
+             try
+             {
+-                modelResolver.addRepository( repository );
++                modelResolver.addRepository( repository, replaceRepositories );
+             }
+             catch ( InvalidRepositoryException e )
+             {
+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 a71dd9a..c81a536 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
+@@ -68,10 +68,18 @@ void addRepository( Repository repository )
+         throws InvalidRepositoryException;
+ 
+     /**
+-     * Resets repositories, has the effect of clearing any repositories previously added by the
+-     * {link #addRepository(Repository) method
++     * Adds a repository to use for subsequent resolution requests. The order in which repositories are added matters,
++     * repositories that were added first should also be searched first. When multiple repositories with the same
++     * identifier are added, then the value of the replace argument is determines the behaviour.
++     *
++     * If replace is false than any existing repository with the same Id will remain in use. If replace
++     * is true the new repository replaces the original.
++     *
++     * @param repository The repository to add to the internal search chain, must not be {@code null}.
++     * @throws InvalidRepositoryException If the repository could not be added (e.g. due to invalid URL or layout).
+      */
+-    void resetRepositories();
++    void addRepository( Repository repository, boolean replace )
++            throws InvalidRepositoryException;
+ 
+     /**
+      * Clones this resolver for usage in a forked resolution process. In general, implementors need not provide a deep
+-- 
+2.1.0
+
diff --git a/maven.spec b/maven.spec
index 67f5741..05f647c 100644
--- a/maven.spec
+++ b/maven.spec
@@ -1,6 +1,6 @@
 Name:           maven
 Version:        3.2.2
-Release:        1%{?dist}
+Release:        2%{?dist}
 Summary:        Java project management and project comprehension tool
 License:        ASL 2.0
 URL:            http://maven.apache.org/
@@ -18,6 +18,8 @@ Patch0002:      0002-Migrate-from-easymock-1-to-easymock-3.patch
 Patch0003:      0003-Update-Aether-to-0.9.0.M3.patch
 # Forwarded upstream (MNG-5534)
 Patch0004:      0004-Update-to-Sisu-0.1.0-and-Guice-3.1.6.patch
+# Patch for MNG-5663 backported from upstream commit 61c37404256
+Patch0005:      0005-Fixes-MNG-5663-a-regression-introduced-in-3.2.2-by-M.patch
 
 BuildArch:      noarch
 
@@ -149,6 +151,7 @@ Group:          Documentation
 %patch0002 -p1
 %patch0003 -p1
 %patch0004 -p1
+%patch0005 -p1
 
 # not really used during build, but a precaution
 rm maven-ant-tasks-*.jar
@@ -274,6 +277,10 @@ ln -sf $(build-classpath plexus/classworlds) \
 
 
 %changelog
+* Mon Feb 16 2015 Mikolaj Izdebski <mizdebsk at redhat.com> - 3.2.2-2
+- Add patch for MNG-5663
+- Resolves: rhbz#1193103
+
 * Wed Jun 18 2014 Mikolaj Izdebski <mizdebsk at redhat.com> - 3.2.2-1
 - Update to upstream version 3.2.2
 


More information about the scm-commits mailing list