Author: sisbell
Date: Fri Mar 27 21:52:08 2009
New Revision: 759364

URL: http://svn.apache.org/viewvc?rev=759364&view=rev
Log:
[MNG-4087] decoding project urls.

Added:
    
maven/components/trunk/maven-project/src/test/resources-project-builder/percent-encoded-url/
    
maven/components/trunk/maven-project/src/test/resources-project-builder/percent-encoded-url/pom.xml
Modified:
    
maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/BaseProcessor.java
    
maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/DistributionManagementProcessor.java
    
maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/ModelProcessor.java
    
maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/ScmProcessor.java
    
maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/PomConstructionTest.java

Modified: 
maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/BaseProcessor.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/BaseProcessor.java?rev=759364&r1=759363&r2=759364&view=diff
==============================================================================
--- 
maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/BaseProcessor.java
 (original)
+++ 
maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/BaseProcessor.java
 Fri Mar 27 21:52:08 2009
@@ -20,8 +20,11 @@
  */
 
 
+import java.io.UnsupportedEncodingException;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -97,7 +100,22 @@
         return parent;
     }
     
-    protected String normalizeUri(String u, String artifactId, Model parent)
+    protected String decodeUrl(String uri)
+    {
+       if(uri == null)
+       {
+               return null;
+       }
+       
+       try {
+                       return URLDecoder.decode(uri, "UTF-8");
+               } catch (UnsupportedEncodingException e) {
+                       return null;
+               }
+
+    }
+    
+    protected String normalizeUriWithRelativePath(String u, String artifactId, 
Model parent)
     {
        if(u == null)
        {
@@ -109,12 +127,12 @@
                        URI uri = new URI(u + "/"
                                        + getModulePathAdjustment(parent, 
artifactId));
 
-                       String normalized = uri.normalize().toString();
+                       String normalized = uri.normalize().toASCIIString();
                        if("file".equals(uri.getScheme()))//UNC Paths
                        {
                                normalized = normalized.replaceFirst("/", 
slashes);
                        }
-                       return normalized;   
+                       return decodeUrl(normalized);   
                } 
                catch (URISyntaxException e) {
 

Modified: 
maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/DistributionManagementProcessor.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/DistributionManagementProcessor.java?rev=759364&r1=759363&r2=759364&view=diff
==============================================================================
--- 
maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/DistributionManagementProcessor.java
 (original)
+++ 
maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/DistributionManagementProcessor.java
 Fri Mar 27 21:52:08 2009
@@ -21,6 +21,7 @@
 
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.net.URLDecoder;
 
 import org.apache.maven.model.DeploymentRepository;
 import org.apache.maven.model.DistributionManagement;
@@ -109,7 +110,7 @@
         } 
     }
 
-    private static void copyRepository( DeploymentRepository source, 
DeploymentRepository target )
+    private void copyRepository( DeploymentRepository source, 
DeploymentRepository target )
     {
         if ( target.getId() == null )
         {
@@ -123,7 +124,7 @@
 
         if ( target.getUrl() == null )
         {
-            target.setUrl( source.getUrl() );
+               target.setUrl( decodeUrl(source.getUrl()) );
         }
 
         if ( target.getName() == null )
@@ -150,16 +151,16 @@
         {
             if ( isChild )
             {
-                target.setUrl( source.getUrl() );
+                target.setUrl( decodeUrl(source.getUrl()) );
             }         
             else
             {                  
-               target.setUrl(normalizeUri(source.getUrl(), artifactId, 
parent));
+               target.setUrl(normalizeUriWithRelativePath(source.getUrl(), 
artifactId, parent));
             }
         }
         else 
         {
-            target.setUrl( target.getUrl() + (target.getUrl().endsWith("/")  ? 
"" : "/")+ artifactId );
+            target.setUrl( decodeUrl(target.getUrl() + 
(target.getUrl().endsWith("/")  ? "" : "/")+ artifactId) );
         }
     }
 

Modified: 
maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/ModelProcessor.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/ModelProcessor.java?rev=759364&r1=759363&r2=759364&view=diff
==============================================================================
--- 
maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/ModelProcessor.java
 (original)
+++ 
maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/ModelProcessor.java
 Fri Mar 27 21:52:08 2009
@@ -19,22 +19,15 @@
  * under the License.
  */
 
-import java.io.File;
-import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
+import java.net.URLDecoder;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
 
 import org.apache.maven.model.Dependency;
 import org.apache.maven.model.DependencyManagement;
 import org.apache.maven.model.Model;
-import org.apache.maven.shared.model.ModelProperty;
 
 /*
  * hold original pom
@@ -127,15 +120,15 @@
         
         if ( c.getUrl() != null )
         {
-            t.setUrl(c.getUrl());         
+            t.setUrl(decodeUrl(c.getUrl()));         
         }       
         else if(p != null && p.getUrl() != null)
         {              
-               t.setUrl(  normalizeUri(p.getUrl(), t.getArtifactId(), p) );
+               t.setUrl(  normalizeUriWithRelativePath(p.getUrl(), 
t.getArtifactId(), p) );
         }
         else if (t.getUrl() != null)
         {
-            t.setUrl( t.getUrl() + "/" + t.getArtifactId() );
+            t.setUrl( decodeUrl(t.getUrl() + "/" + t.getArtifactId()) );
         }
         
         //Dependencies

Modified: 
maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/ScmProcessor.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/ScmProcessor.java?rev=759364&r1=759363&r2=759364&view=diff
==============================================================================
--- 
maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/ScmProcessor.java
 (original)
+++ 
maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/processor/ScmProcessor.java
 Fri Mar 27 21:52:08 2009
@@ -21,6 +21,7 @@
 
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.net.URLDecoder;
 
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Scm;
@@ -48,14 +49,14 @@
     {
         if(c != null && c.getUrl() != null)
         {
-            t.setUrl(c.getUrl() );                       
+            t.setUrl(decodeUrl(c.getUrl()) );                       
         }   
         else if(p != null && p.getUrl() != null)
         {
-               t.setUrl( normalizeUri(p.getUrl(), artifactId, parent));
+               t.setUrl( normalizeUriWithRelativePath(p.getUrl(), artifactId, 
parent));
         }      
         else if(t.getUrl() != null) {
-            t.setUrl( t.getUrl() + "/" + artifactId );
+            t.setUrl( decodeUrl(t.getUrl() + "/" + artifactId) );
         }
     }
     
@@ -63,14 +64,14 @@
     {
         if(c!= null && c.getConnection() != null)
         {
-            t.setConnection(c.getConnection());         
+            t.setConnection(decodeUrl(c.getConnection()));         
         }       
         else if(p != null && p.getConnection() != null)
         {              
-            t.setConnection(  normalizeUri(p.getConnection(), artifactId, 
parent));
+            t.setConnection(  normalizeUriWithRelativePath(p.getConnection(), 
artifactId, parent));
         } 
         else if(t.getConnection() != null) {
-            t.setConnection( t.getConnection() + "/" + artifactId );
+            t.setConnection( decodeUrl(t.getConnection() + "/" + artifactId) );
         }        
     }
     
@@ -78,14 +79,14 @@
     {
         if(c!= null && c.getDeveloperConnection() != null)
         {
-            t.setDeveloperConnection(c.getDeveloperConnection());         
+            t.setDeveloperConnection(decodeUrl(c.getDeveloperConnection()));   
      
         }       
         else if(p != null && p.getDeveloperConnection() != null)
         {      
-            t.setDeveloperConnection( normalizeUri(p.getDeveloperConnection(), 
artifactId, parent) );
+            t.setDeveloperConnection( 
normalizeUriWithRelativePath(p.getDeveloperConnection(), artifactId, parent) );
         }    
         else if(t.getDeveloperConnection() != null){
-            t.setDeveloperConnection( t.getDeveloperConnection() + "/" + 
artifactId );
+            t.setDeveloperConnection( decodeUrl(t.getDeveloperConnection() + 
"/" + artifactId) );
         }           
     }    
     

Modified: 
maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/PomConstructionTest.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/PomConstructionTest.java?rev=759364&r1=759363&r2=759364&view=diff
==============================================================================
--- 
maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/PomConstructionTest.java
 (original)
+++ 
maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/PomConstructionTest.java
 Fri Mar 27 21:52:08 2009
@@ -922,13 +922,20 @@
         throws Exception
     {
         PomTestWrapper pom = this.buildPom( "url-append/child" );
-        System.out.println(pom.getDomainModel().asString());
         assertEquals("http://project.url/child";, pom.getValue( "url" ));
         assertEquals("http://viewvc.project.url/child";, pom.getValue( 
"scm/url" ));
         assertEquals("http://scm.project.url/child";, pom.getValue( 
"scm/connection" ));
         assertEquals("https://scm.project.url/child";, pom.getValue( 
"scm/developerConnection" ));
         assertEquals("http://site.project.url/child";, pom.getValue( 
"distributionManagement/site/url" ));
-    }    
+    } 
+    
+    /** MNG-4087 */
+    public void testPercentEncodedUrl()
+        throws Exception
+    {
+        PomTestWrapper pom = this.buildPom( "percent-encoded-url" );
+        assertEquals("@baseurl@/target/repo", pom.getValue( 
"distributionManagement/repository/url" ));
+    }        
 
     public void testPluginConfigurationUsingAttributesWithoutPluginManagement()
         throws Exception

Added: 
maven/components/trunk/maven-project/src/test/resources-project-builder/percent-encoded-url/pom.xml
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/resources-project-builder/percent-encoded-url/pom.xml?rev=759364&view=auto
==============================================================================
--- 
maven/components/trunk/maven-project/src/test/resources-project-builder/percent-encoded-url/pom.xml
 (added)
+++ 
maven/components/trunk/maven-project/src/test/resources-project-builder/percent-encoded-url/pom.xml
 Fri Mar 27 21:52:08 2009
@@ -0,0 +1,66 @@
+<?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.mng4087</groupId>
+  <artifactId>test</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  <packaging>jar</packaging>
+
+  <name>Maven Integration Test :: MNG-4087</name> 
+  <description>
+    Test that deployment to a file:// repository decodes percent-encoded 
characters.
+  </description>
+
+  <distributionManagement>
+    <repository>
+      <id>maven-core-it</id>
+      <!-- NOTE: The last URL part is intentionally percent-encoded and should 
be decoded to "repo" -->
+      <url>@baseurl@/target/%72%65%70%6F</url>
+    </repository>
+  </distributionManagement>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.its.plugins</groupId>
+        <artifactId>maven-it-plugin-artifact</artifactId>
+        <version>2.1-SNAPSHOT</version>
+        <configuration>
+          <mainFile>pom.xml</mainFile>
+        </configuration>
+        <executions>
+          <execution>
+            <id>test</id>
+            <phase>validate</phase>
+            <goals>
+              <goal>set</goal>
+              <goal>install</goal>
+              <goal>deploy</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>


Reply via email to