maven-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bentm...@apache.org
Subject svn commit: r830809 - in /maven/maven-3/trunk: maven-core/src/test/java/org/apache/maven/project/ maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/ maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order...
Date Thu, 29 Oct 2009 00:24:57 GMT
Author: bentmann
Date: Thu Oct 29 00:24:56 2009
New Revision: 830809

URL: http://svn.apache.org/viewvc?rev=830809&view=rev
Log:
[MNG-4415] [regression] Plugins are not properly ordered after merging with inherited parent
plugins

Added:
    maven/maven-3/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/
  (with props)
    maven/maven-3/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/pom.xml
  (with props)
    maven/maven-3/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/sub/
  (with props)
    maven/maven-3/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/sub/pom.xml
  (with props)
Modified:
    maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java
    maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/DefaultInheritanceAssembler.java

Modified: maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java?rev=830809&r1=830808&r2=830809&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java
(original)
+++ maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java
Thu Oct 29 00:24:56 2009
@@ -20,6 +20,7 @@
  */
 
 import java.io.File;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
@@ -1700,6 +1701,33 @@
         assertTrue( plugins.toString(), customPlugin == resourcesPlugin - 1 );
     }
 
+    /** MNG-4415 */
+    public void testPluginOrderAfterMergingWithInheritedPlugins()
+        throws Exception
+    {
+        PomTestWrapper pom = buildPom( "plugin-inheritance-merge-order/sub" );
+
+        List<String> expected = new ArrayList<String>();
+        expected.add( "maven-it-plugin-error" );
+        expected.add( "maven-it-plugin-configuration" );
+        expected.add( "maven-it-plugin-dependency-resolution" );
+        expected.add( "maven-it-plugin-packaging" );
+        expected.add( "maven-it-plugin-log-file" );
+        expected.add( "maven-it-plugin-expression" );
+        expected.add( "maven-it-plugin-fork" );
+        expected.add( "maven-it-plugin-touch" );
+
+        List<String> actual = new ArrayList<String>();
+        for ( Plugin plugin : (List<Plugin>) pom.getValue( "build/plugins" ) )
+        {
+            actual.add( plugin.getArtifactId() );
+        }
+
+        actual.retainAll( expected );
+
+        assertEquals( actual, expected );
+    }
+
     private void assertPathSuffixEquals( String expected, Object actual )
     {
         String a = actual.toString();

Propchange: maven/maven-3/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/
------------------------------------------------------------------------------
    bugtraq:label = Enter issue ID:

Propchange: maven/maven-3/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/
------------------------------------------------------------------------------
    bugtraq:message = Issue id: %BUGID%

Propchange: maven/maven-3/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/
------------------------------------------------------------------------------
    bugtraq:number = false

Propchange: maven/maven-3/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/
------------------------------------------------------------------------------
    bugtraq:url = http://jira.codehaus.org/browse/%BUGID%

Added: maven/maven-3/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/pom.xml
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/pom.xml?rev=830809&view=auto
==============================================================================
--- maven/maven-3/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/pom.xml
(added)
+++ maven/maven-3/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/pom.xml
Thu Oct 29 00:24:56 2009
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.its.mng4415</groupId>
+  <artifactId>parent</artifactId>
+  <version>0.1</version>
+  <packaging>pom</packaging>
+
+  <name>Maven Integration Test :: MNG-4415</name>
+  <description>
+    Test that merging of plugins during inheritance follows these rules regarding ordering:
+     parent: X ->      A -> B ->      D -> E
+     child:       Y -> A ->      C -> D ->      F
+     result: X -> Y -> A -> B -> C -> D -> E -> F
+  </description>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.its.plugins</groupId>
+        <artifactId>maven-it-plugin-error</artifactId>
+        <version>2.1-SNAPSHOT</version>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.its.plugins</groupId>
+        <artifactId>maven-it-plugin-dependency-resolution</artifactId>
+        <version>2.1-SNAPSHOT</version>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.its.plugins</groupId>
+        <artifactId>maven-it-plugin-packaging</artifactId>
+        <version>2.1-SNAPSHOT</version>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.its.plugins</groupId>
+        <artifactId>maven-it-plugin-expression</artifactId>
+        <version>2.1-SNAPSHOT</version>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.its.plugins</groupId>
+        <artifactId>maven-it-plugin-fork</artifactId>
+        <version>2.1-SNAPSHOT</version>
+      </plugin>
+    </plugins>
+  </build>
+</project>

Propchange: maven/maven-3/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/maven-3/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/pom.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: maven/maven-3/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/sub/
------------------------------------------------------------------------------
    bugtraq:label = Enter issue ID:

Propchange: maven/maven-3/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/sub/
------------------------------------------------------------------------------
    bugtraq:message = Issue id: %BUGID%

Propchange: maven/maven-3/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/sub/
------------------------------------------------------------------------------
    bugtraq:number = false

Propchange: maven/maven-3/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/sub/
------------------------------------------------------------------------------
    bugtraq:url = http://jira.codehaus.org/browse/%BUGID%

Added: maven/maven-3/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/sub/pom.xml
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/sub/pom.xml?rev=830809&view=auto
==============================================================================
--- maven/maven-3/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/sub/pom.xml
(added)
+++ maven/maven-3/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/sub/pom.xml
Thu Oct 29 00:24:56 2009
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.maven.its.mng4415</groupId>
+    <artifactId>parent</artifactId>
+    <version>0.1</version>
+  </parent>
+
+  <groupId>org.apache.maven.its.mng4415</groupId>
+  <artifactId>test</artifactId>
+  <version>0.1</version>
+
+  <name>Maven Integration Test :: MNG-4415</name>
+  <description>
+    Test that merging of plugins during inheritance follows these rules regarding ordering:
+     parent: X ->      A -> B ->      D -> E
+     child:       Y -> A ->      C -> D ->      F
+     result: X -> Y -> A -> B -> C -> D -> E -> F
+  </description>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.its.plugins</groupId>
+        <artifactId>maven-it-plugin-configuration</artifactId>
+        <version>2.1-SNAPSHOT</version>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.its.plugins</groupId>
+        <artifactId>maven-it-plugin-dependency-resolution</artifactId>
+        <version>2.1-SNAPSHOT</version>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.its.plugins</groupId>
+        <artifactId>maven-it-plugin-log-file</artifactId>
+        <version>2.1-SNAPSHOT</version>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.its.plugins</groupId>
+        <artifactId>maven-it-plugin-expression</artifactId>
+        <version>2.1-SNAPSHOT</version>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.its.plugins</groupId>
+        <artifactId>maven-it-plugin-touch</artifactId>
+        <version>2.1-SNAPSHOT</version>
+      </plugin>
+    </plugins>
+  </build>
+</project>

Propchange: maven/maven-3/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/sub/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/maven-3/trunk/maven-core/src/test/resources-project-builder/plugin-inheritance-merge-order/sub/pom.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/DefaultInheritanceAssembler.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/DefaultInheritanceAssembler.java?rev=830809&r1=830808&r2=830809&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/DefaultInheritanceAssembler.java
(original)
+++ maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/DefaultInheritanceAssembler.java
Thu Oct 29 00:24:56 2009
@@ -118,7 +118,7 @@
             if ( !src.isEmpty() )
             {
                 List<Plugin> tgt = target.getPlugins();
-                Map<Object, Plugin> merged = new LinkedHashMap<Object, Plugin>(
( src.size() + tgt.size() ) * 2 );
+                Map<Object, Plugin> master = new LinkedHashMap<Object, Plugin>(
src.size() * 2 );
 
                 for ( Plugin element : src )
                 {
@@ -131,22 +131,47 @@
                         plugin.setArtifactId( element.getArtifactId() );
                         mergePlugin( plugin, element, sourceDominant, context );
 
-                        merged.put( key, plugin );
+                        master.put( key, plugin );
                     }
                 }
 
+                Map<Object, List<Plugin>> predecessors = new LinkedHashMap<Object,
List<Plugin>>();
+                List<Plugin> pending = new ArrayList<Plugin>();
                 for ( Plugin element : tgt )
                 {
                     Object key = getPluginKey( element );
-                    Plugin existing = merged.get( key );
+                    Plugin existing = master.get( key );
                     if ( existing != null )
                     {
                         mergePlugin( element, existing, sourceDominant, context );
+
+                        master.put( key, element );
+
+                        if ( !pending.isEmpty() )
+                        {
+                            predecessors.put( key, pending );
+                            pending = new ArrayList<Plugin>();
+                        }
                     }
-                    merged.put( key, element );
+                    else
+                    {
+                        pending.add( element );
+                    }
+                }
+
+                List<Plugin> result = new ArrayList<Plugin>( src.size() + tgt.size()
);
+                for ( Map.Entry<Object, Plugin> entry : master.entrySet() )
+                {
+                    List<Plugin> pre = predecessors.get( entry.getKey() );
+                    if ( pre != null )
+                    {
+                        result.addAll( pre );
+                    }
+                    result.add( entry.getValue() );
                 }
+                result.addAll( pending );
 
-                target.setPlugins( new ArrayList<Plugin>( merged.values() ) );
+                target.setPlugins( result );
             }
         }
 



Mime
View raw message