You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by hb...@apache.org on 2015/12/23 14:49:40 UTC

maven git commit: [MNG-5951] add an option to avoid path addition to inherited URLs

Repository: maven
Updated Branches:
  refs/heads/MNG-5951 [created] 8d85f5d09


[MNG-5951] add an option to avoid path addition to inherited URLs

This is done as child.inherit.append.path XML attribute on 3 locations:
- project, for project.url
- project.distributionManagement.site for its url
- project.scm, for the 3 scm urls in one unique config

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

Branch: refs/heads/MNG-5951
Commit: 8d85f5d09498fe5bd46da31cda5b79bdaf886083
Parents: 901b1e8
Author: Hervé Boutemy <hb...@apache.org>
Authored: Wed Dec 23 14:49:20 2015 +0100
Committer: Hervé Boutemy <hb...@apache.org>
Committed: Wed Dec 23 14:49:20 2015 +0100

----------------------------------------------------------------------
 .../DefaultInheritanceAssembler.java            |   4 +-
 .../maven/model/merge/MavenModelMerger.java     |  12 +--
 .../DefaultInheritanceAssemblerTest.java        |  10 ++
 .../poms/inheritance/no-append-urls-child.xml   |  34 ++++++
 .../inheritance/no-append-urls-expected.xml     |  50 +++++++++
 .../poms/inheritance/no-append-urls-parent.xml  |  50 +++++++++
 maven-model/src/main/mdo/maven.mdo              | 106 ++++++++++++++++++-
 7 files changed, 255 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven/blob/8d85f5d0/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/DefaultInheritanceAssembler.java
----------------------------------------------------------------------
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/DefaultInheritanceAssembler.java b/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/DefaultInheritanceAssembler.java
index 58d93a7..4382e68 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/DefaultInheritanceAssembler.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/inheritance/DefaultInheritanceAssembler.java
@@ -139,12 +139,12 @@ public class DefaultInheritanceAssembler
     {
 
         @Override
-        protected String extrapolateChildUrl( String parentUrl, Map<Object, Object> context )
+        protected String extrapolateChildUrl( String parentUrl, boolean appendPath, Map<Object, Object> context )
         {
             Object childDirectory = context.get( CHILD_DIRECTORY );
             Object childPathAdjustment = context.get( CHILD_PATH_ADJUSTMENT );
 
-            if ( StringUtils.isBlank( parentUrl ) || childDirectory == null || childPathAdjustment == null )
+            if ( StringUtils.isBlank( parentUrl ) || childDirectory == null || childPathAdjustment == null || !appendPath )
             {
                 return parentUrl;
             }

http://git-wip-us.apache.org/repos/asf/maven/blob/8d85f5d0/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java
----------------------------------------------------------------------
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java b/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java
index 0007af5..cae9d73 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java
@@ -102,7 +102,7 @@ public class MavenModelMerger
             }
             else if ( target.getUrl() == null )
             {
-                target.setUrl( extrapolateChildUrl( src, context ) );
+                target.setUrl( extrapolateChildUrl( src, source.isChildInheritAppendPath(), context ) );
                 target.setLocation( "url", source.getLocation( "url" ) );
             }
         }
@@ -466,7 +466,7 @@ public class MavenModelMerger
             }
             else if ( target.getUrl() == null )
             {
-                target.setUrl( extrapolateChildUrl( src, context ) );
+                target.setUrl( extrapolateChildUrl( src, source.isChildInheritAppendPath(), context ) );
                 target.setLocation( "url", source.getLocation( "url" ) );
             }
         }
@@ -485,7 +485,7 @@ public class MavenModelMerger
             }
             else if ( target.getUrl() == null )
             {
-                target.setUrl( extrapolateChildUrl( src, context ) );
+                target.setUrl( extrapolateChildUrl( src, source.isChildInheritAppendPath(), context ) );
                 target.setLocation( "url", source.getLocation( "url" ) );
             }
         }
@@ -504,7 +504,7 @@ public class MavenModelMerger
             }
             else if ( target.getConnection() == null )
             {
-                target.setConnection( extrapolateChildUrl( src, context ) );
+                target.setConnection( extrapolateChildUrl( src, source.isChildInheritAppendPath(), context ) );
                 target.setLocation( "connection", source.getLocation( "connection" ) );
             }
         }
@@ -524,7 +524,7 @@ public class MavenModelMerger
             }
             else if ( target.getDeveloperConnection() == null )
             {
-                target.setDeveloperConnection( extrapolateChildUrl( src, context ) );
+                target.setDeveloperConnection( extrapolateChildUrl( src, source.isChildInheritAppendPath(), context ) );
                 target.setLocation( "developerConnection", source.getLocation( "developerConnection" ) );
             }
         }
@@ -670,7 +670,7 @@ public class MavenModelMerger
         return exclusion.getGroupId() + ':' + exclusion.getArtifactId();
     }
 
-    protected String extrapolateChildUrl( String parentUrl, Map<Object, Object> context )
+    protected String extrapolateChildUrl( String parentUrl, boolean appendPath, Map<Object, Object> context )
     {
         return parentUrl;
     }

http://git-wip-us.apache.org/repos/asf/maven/blob/8d85f5d0/maven-model-builder/src/test/java/org/apache/maven/model/inheritance/DefaultInheritanceAssemblerTest.java
----------------------------------------------------------------------
diff --git a/maven-model-builder/src/test/java/org/apache/maven/model/inheritance/DefaultInheritanceAssemblerTest.java b/maven-model-builder/src/test/java/org/apache/maven/model/inheritance/DefaultInheritanceAssemblerTest.java
index 9d88f5f..d49e8df 100644
--- a/maven-model-builder/src/test/java/org/apache/maven/model/inheritance/DefaultInheritanceAssemblerTest.java
+++ b/maven-model-builder/src/test/java/org/apache/maven/model/inheritance/DefaultInheritanceAssemblerTest.java
@@ -98,6 +98,16 @@ public class DefaultInheritanceAssemblerTest
     }
 
     /**
+     * MNG-5951 child.inherit.append.path="false" test
+     * @throws Exception
+     */
+    public void testNoAppendUrls()
+        throws Exception
+    {
+        testInheritance( "no-append-urls" );
+    }
+
+    /**
      * Tricky case: flat directory structure, but child directory != artifactId.
      * Model interpolation does not give same result when calculated from build or from repo...
      * This is why MNG-5000 fix in code is marked as bad practice (uses file names)

http://git-wip-us.apache.org/repos/asf/maven/blob/8d85f5d0/maven-model-builder/src/test/resources/poms/inheritance/no-append-urls-child.xml
----------------------------------------------------------------------
diff --git a/maven-model-builder/src/test/resources/poms/inheritance/no-append-urls-child.xml b/maven-model-builder/src/test/resources/poms/inheritance/no-append-urls-child.xml
new file mode 100644
index 0000000..d7cc4d0
--- /dev/null
+++ b/maven-model-builder/src/test/resources/poms/inheritance/no-append-urls-child.xml
@@ -0,0 +1,34 @@
+<?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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>inheritance</groupId>
+    <artifactId>parent</artifactId>
+    <version>11-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>inheritance</artifactId><!-- same as directory name -->
+  <name>Model urls inheritance test child</name>
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/maven/blob/8d85f5d0/maven-model-builder/src/test/resources/poms/inheritance/no-append-urls-expected.xml
----------------------------------------------------------------------
diff --git a/maven-model-builder/src/test/resources/poms/inheritance/no-append-urls-expected.xml b/maven-model-builder/src/test/resources/poms/inheritance/no-append-urls-expected.xml
new file mode 100644
index 0000000..d2a8cfe
--- /dev/null
+++ b/maven-model-builder/src/test/resources/poms/inheritance/no-append-urls-expected.xml
@@ -0,0 +1,50 @@
+<?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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>inheritance</groupId>
+    <artifactId>parent</artifactId>
+    <version>11-SNAPSHOT</version>
+  </parent>
+
+  <groupId>inheritance</groupId>
+  <artifactId>inheritance</artifactId>
+  <version>11-SNAPSHOT</version>
+  <name>Model urls inheritance test child</name>
+  <description>MNG-5951 child.inherit.append.path="false" for each url to avoid automatic path addition when inheriting</description>
+
+  <!-- 5 inherited urls without anything added to parent -->
+  <url>http://www.apache.org/path/to/parent/</url>
+  <scm>
+    <connection>scm:my-scm:http://domain.org/base</connection>
+    <developerConnection>scm:my-scm:https://domain.org/base/</developerConnection>
+    <url>https://domain.org/base</url>
+  </scm>
+  <distributionManagement>
+    <site>
+      <url>scp://scp.domain.org/base/</url>
+    </site>
+  </distributionManagement>
+</project>

http://git-wip-us.apache.org/repos/asf/maven/blob/8d85f5d0/maven-model-builder/src/test/resources/poms/inheritance/no-append-urls-parent.xml
----------------------------------------------------------------------
diff --git a/maven-model-builder/src/test/resources/poms/inheritance/no-append-urls-parent.xml b/maven-model-builder/src/test/resources/poms/inheritance/no-append-urls-parent.xml
new file mode 100644
index 0000000..e8bc165
--- /dev/null
+++ b/maven-model-builder/src/test/resources/poms/inheritance/no-append-urls-parent.xml
@@ -0,0 +1,50 @@
+<?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 xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+  child.inherit.append.path="false">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>inheritance</groupId>
+  <artifactId>parent</artifactId>
+  <version>11-SNAPSHOT</version>
+
+  <name>Model urls inheritance test parent</name>
+  <description>MNG-5951 child.inherit.append.path="false" for each url to avoid automatic path addition when inheriting</description>
+
+  <modules>
+    <module>../inheritance</module>
+  </modules>
+
+  <!-- 5 urls in the pom to configure for not adding path -->
+  <url>http://www.apache.org/path/to/parent/</url>
+  <scm child.inherit.append.path="false">
+    <connection>scm:my-scm:http://domain.org/base</connection>
+    <developerConnection>scm:my-scm:https://domain.org/base/</developerConnection>
+    <url>https://domain.org/base</url>
+  </scm>
+  <distributionManagement>
+    <site child.inherit.append.path="false">
+      <url>scp://scp.domain.org/base/</url>
+    </site>
+  </distributionManagement>
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/maven/blob/8d85f5d0/maven-model/src/main/mdo/maven.mdo
----------------------------------------------------------------------
diff --git a/maven-model/src/main/mdo/maven.mdo b/maven-model/src/main/mdo/maven.mdo
index 3f6b6d6..73c85a4 100644
--- a/maven-model/src/main/mdo/maven.mdo
+++ b/maven-model/src/main/mdo/maven.mdo
@@ -245,7 +245,21 @@
           <description>
             <![CDATA[
             The URL to the project's homepage.
-            <br /><b>Default value is</b>: parent value [+ path adjustment] + artifactId
+            <br /><b>Default value is</b>: parent value [+ path adjustment] + artifactId, or just parent value if 
+            <code>child.urls.inherit.append.path="false"</code>
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field xml.attribute="true" xml.tagName="child.inherit.append.path">
+          <name>childInheritAppendPath</name>
+          <version>4.0.0+</version>
+          <description>
+            <![CDATA[
+            When childs inherit from urls, append path or not?. Note: While the type
+            of this field is <code>String</code> for technical reasons, the semantic type is actually
+            <code>Boolean</code>
+            <br /><b>Default value is</b>: <code>true</code>
             ]]>
           </description>
           <type>String</type>
@@ -630,6 +644,24 @@
             ]]>
           </code>
         </codeSegment>
+        <codeSegment>
+          <version>4.0.0+</version>
+          <code>
+            <![CDATA[
+
+    public boolean isChildInheritAppendPath()
+    {
+        return ( childInheritAppendPath != null ) ? Boolean.parseBoolean( childInheritAppendPath ) : true;
+    }
+
+    public void setChildInheritAppendPath( boolean childInheritAppendPath )
+    {
+        this.childInheritAppendPath = String.valueOf( childInheritAppendPath );
+    }
+
+            ]]>
+          </code>
+        </codeSegment>
       </codeSegments>
     </class>
     <class java.clone="deep">
@@ -2172,12 +2204,46 @@
           <description>
             <![CDATA[
             The URL to the project's browsable SCM repository, such as ViewVC or Fisheye.
-            <br /><b>Default value is</b>: parent value [+ path adjustment] + artifactId
+            <br /><b>Default value is</b>: parent value [+ path adjustment] + artifactId, or just parent value if 
+            <code>child.urls.inherit.append.path="false"</code>
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field xml.attribute="true" xml.tagName="child.inherit.append.path">
+          <name>childInheritAppendPath</name>
+          <version>4.0.0+</version>
+          <description>
+            <![CDATA[
+            When childs inherit from urls, append path or not?. Note: While the type
+            of this field is <code>String</code> for technical reasons, the semantic type is actually
+            <code>Boolean</code>
+            <br /><b>Default value is</b>: <code>true</code>
             ]]>
           </description>
           <type>String</type>
         </field>
       </fields>
+      <codeSegments>
+        <codeSegment>
+          <version>4.0.0+</version>
+          <code>
+            <![CDATA[
+
+    public boolean isChildInheritAppendPath()
+    {
+        return ( childInheritAppendPath != null ) ? Boolean.parseBoolean( childInheritAppendPath ) : true;
+    }
+
+    public void setChildInheritAppendPath( boolean childInheritAppendPath )
+    {
+        this.childInheritAppendPath = String.valueOf( childInheritAppendPath );
+    }
+
+            ]]>
+          </code>
+        </codeSegment>
+      </codeSegments>
     </class>
     <class>
       <name>FileSet</name>
@@ -2605,12 +2671,46 @@
           <description>
             <![CDATA[
             The url of the location where website is deployed, in the form <code>protocol://hostname/path</code>.
-            <br /><b>Default value is</b>: parent value [+ path adjustment] + artifactId
+            <br /><b>Default value is</b>: parent value [+ path adjustment] + artifactId, or just parent value if 
+            <code>child.urls.inherit.append.path="false"</code>
+            ]]>
+          </description>
+          <type>String</type>
+        </field>
+        <field xml.attribute="true" xml.tagName="child.inherit.append.path">
+          <name>childInheritAppendPath</name>
+          <version>4.0.0+</version>
+          <description>
+            <![CDATA[
+            When childs inherit from urls, append path or not?. Note: While the type
+            of this field is <code>String</code> for technical reasons, the semantic type is actually
+            <code>Boolean</code>
+            <br /><b>Default value is</b>: <code>true</code>
             ]]>
           </description>
           <type>String</type>
         </field>
       </fields>
+      <codeSegments>
+        <codeSegment>
+          <version>4.0.0+</version>
+          <code>
+            <![CDATA[
+
+    public boolean isChildInheritAppendPath()
+    {
+        return ( childInheritAppendPath != null ) ? Boolean.parseBoolean( childInheritAppendPath ) : true;
+    }
+
+    public void setChildInheritAppendPath( boolean childInheritAppendPath )
+    {
+        this.childInheritAppendPath = String.valueOf( childInheritAppendPath );
+    }
+
+            ]]>
+          </code>
+        </codeSegment>
+      </codeSegments>
     </class>
 
     <class java.clone="deep">