[ 
http://jira.codehaus.org/browse/MSITE-531?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=264471#action_264471
 ] 

Andrew Phillips commented on MSITE-531:
---------------------------------------

OK, so the first part of the fix was relatively simple, replacing the above 
snippet with

{code}
String target = UriUtils.normalizePath( destinationDirectory + "/" + 
listFiles[i].getName() );
if ( listFiles[i].isDirectory() )
{
  putDirectory( listFiles[i], target );
}
else
{
  put( listFiles[i], target );
}
{code}

where {{normalizePath}} simply calls {{URI.normalize()}} [1]. 

This would be enough in this test case, but in a multi-module project Maven 
produces URLs like 

https://jclouds.googlecode.com/svn/maven-sites/jclouds-project/1.0-SNAPSHOT/../../../jclouds-project/1.0-SNAPSHOT/css/maven-base.css

and Google Code is also not able to deal with the '../../..' part.

Unfortunately, that bit sits inside the repository URL [2], which isn't so 
easily accessible. One reasonable place to intercept this repo whilst limiting 
the effects to the WebDavWagon is to intercept the original {{connect}} method 
in AbstractWagon [3] as follows:

{code}
public void connect( Repository repository, AuthenticationInfo 
authenticationInfo, ProxyInfoProvider proxyInfoProvider ) 
  throws ConnectionException, AuthenticationException 
{
  repository.setUrl( UriUtils.normalizeUrl( repository.getUrl(), 
repository.getBasedir() ) );
  super.connect( repository, authenticationInfo, proxyInfoProvider );
}
{code}

{{normalizeUrl}} has to do some slightly funky things here because Maven 
Wagon's PathUtils [4] aren't able to deal with a 'dav:https' URL properly, but 
the test cases all pass.

[1] http://download.oracle.com/javase/6/docs/api/java/net/URI.html#normalize()
[2] 
http://maven.apache.org/plugins/maven-site-plugin/xref/org/apache/maven/plugins/site/wagon/repository/Repository.html
[3] 
http://maven.apache.org/wagon/wagon-provider-api/xref/org/apache/maven/wagon/AbstractWagon.html
[4] 
http://maven.apache.org/plugins/maven-site-plugin/xref/org/apache/maven/plugins/site/wagon/PathUtils.html

> Site deployment fails on googlecode repository (unnecessary '/./' path 
> element in WebDAV URL)
> ---------------------------------------------------------------------------------------------
>
>                 Key: MSITE-531
>                 URL: http://jira.codehaus.org/browse/MSITE-531
>             Project: Maven 2.x and 3.x Site Plugin
>          Issue Type: Bug
>          Components: site:deploy
>    Affects Versions: 2.1, 3.0-beta-3
>         Environment: Maven 2.2.1, 3.0.1, wagon-webdav 1.0-beta-2, 
> wagon-webdav-jackrabbit 1.0-beta-7
>            Reporter: Marcin Kuthan
>
> Hi, 
> I configured my project to use Wagon WebDAV provider to deploy project 
> site. In general it works as I expected but it fails if the site is 
> deployed on googlecode. 
> Transfer error: org.apache.maven.wagon.TransferFailedException: Failed 
> to transfer file: 
> https://m4enterprise.googlecode.com/svn/site/./css/maven-base.css. 
> Return code is: 500 
> [ERROR] Failed to execute goal 
> org.apache.maven.plugins:maven-site-plugin:3.0-beta-3:deploy 
> (default-deploy) on project corporate-pom: Error uploading site: 
> Failed to transfer file: 
> https://m4enterprise.googlecode.com/svn/site/./css/maven-base.css. 
> Return code is: 500 -> [Help 1] 
> org.apache.maven.lifecycle.LifecycleExecutionException: Failed to 
> execute goal org.apache.maven.plugins:maven-site-plugin:3.0-beta-3:deploy 
> (default-deploy) on project corporate-pom: Error uploading site 
>         at 
> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:203)
>  
>         at 
> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:148)
>  
>         at 
> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:140)
>  
>         at 
> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
>  
>         at 
> org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
>  
>         at 
> org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
>  
>         at 
> org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
>  
>         at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:316) 
>         at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:153) 
>         at org.apache.maven.cli.MavenCli.execute(MavenCli.java:451) 
>         at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:188) 
>         at org.apache.maven.cli.MavenCli.main(MavenCli.java:134) 
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
>         at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>  
>         at java.lang.reflect.Method.invoke(Method.java:616) 
>         at 
> org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
>  
>         at 
> org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) 
>         at 
> org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
>  
>         at 
> org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) 
> Caused by: org.apache.maven.plugin.MojoExecutionException: Error uploading 
> site 
>         at 
> org.apache.maven.plugins.site.SiteDeployMojo.execute(SiteDeployMojo.java:271) 
>         at 
> org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:107)
>  
>         at 
> org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:195)
>  
>         ... 19 more 
> Caused by: org.apache.maven.wagon.TransferFailedException: Failed to 
> transfer file: 
> https://m4enterprise.googlecode.com/svn/site/./css/maven-base.css. 
> Return code is: 500 
>         at 
> org.apache.maven.wagon.shared.http.AbstractHttpClientWagon.put(AbstractHttpClientWagon.java:368)
>  
>         at 
> org.apache.maven.wagon.shared.http.AbstractHttpClientWagon.put(AbstractHttpClientWagon.java:280)
>  
>         at 
> org.apache.maven.wagon.providers.webdav.WebDavWagon.putDirectory(WebDavWagon.java:188)
>  
>         at 
> org.apache.maven.wagon.providers.webdav.WebDavWagon.putDirectory(WebDavWagon.java:182)
>  
>         at 
> org.apache.maven.plugins.site.SiteDeployMojo.execute(SiteDeployMojo.java:257) 
>         ... 21 more 
> I filled an issue in googlecode bug tracker 
> (http://code.google.com/p/support/issues/detail?id=4786). There is a 
> suspicion that '/./' part of URL is an error cause. 
> It has been discussed also on Maven mailing list:
> http://maven.40175.n5.nabble.com/How-to-avoid-part-of-URL-during-site-deployment-td3307034.html
> Thanks,
> Marcin

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to