You are viewing a plain text version of this content. The canonical link for it is here.
Posted to wagon-commits@maven.apache.org by br...@apache.org on 2009/02/19 05:05:34 UTC

svn commit: r745718 - in /maven/wagon/trunk: wagon-provider-test/src/main/java/org/apache/maven/wagon/http/ wagon-providers/wagon-webdav-jackrabbit/src/main/java/org/apache/maven/wagon/providers/webdav/ wagon-providers/wagon-webdav-jackrabbit/src/test/...

Author: brett
Date: Thu Feb 19 04:05:33 2009
New Revision: 745718

URL: http://svn.apache.org/viewvc?rev=745718&view=rev
Log:
[WAGON-244] fix some path parsing errors when creating directories and add tests

Modified:
    maven/wagon/trunk/wagon-provider-test/src/main/java/org/apache/maven/wagon/http/HttpWagonTestCase.java
    maven/wagon/trunk/wagon-providers/wagon-webdav-jackrabbit/src/main/java/org/apache/maven/wagon/providers/webdav/PathNavigator.java
    maven/wagon/trunk/wagon-providers/wagon-webdav-jackrabbit/src/main/java/org/apache/maven/wagon/providers/webdav/WebDavWagon.java
    maven/wagon/trunk/wagon-providers/wagon-webdav-jackrabbit/src/test/java/org/apache/maven/wagon/providers/webdav/PathNavigatorTest.java
    maven/wagon/trunk/wagon-providers/wagon-webdav-jackrabbit/src/test/java/org/apache/maven/wagon/providers/webdav/WebDavWagonTest.java

Modified: maven/wagon/trunk/wagon-provider-test/src/main/java/org/apache/maven/wagon/http/HttpWagonTestCase.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-provider-test/src/main/java/org/apache/maven/wagon/http/HttpWagonTestCase.java?rev=745718&r1=745717&r2=745718&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-provider-test/src/main/java/org/apache/maven/wagon/http/HttpWagonTestCase.java (original)
+++ maven/wagon/trunk/wagon-provider-test/src/main/java/org/apache/maven/wagon/http/HttpWagonTestCase.java Thu Feb 19 04:05:33 2009
@@ -310,7 +310,7 @@
         return ( file.lastModified() / 1000 ) * 1000;
     }
 
-    private File getRepositoryDirectory()
+    protected File getRepositoryDirectory()
     {
         return getTestFile( "target/test-output/http-repository" );
     }

Modified: maven/wagon/trunk/wagon-providers/wagon-webdav-jackrabbit/src/main/java/org/apache/maven/wagon/providers/webdav/PathNavigator.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-webdav-jackrabbit/src/main/java/org/apache/maven/wagon/providers/webdav/PathNavigator.java?rev=745718&r1=745717&r2=745718&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-webdav-jackrabbit/src/main/java/org/apache/maven/wagon/providers/webdav/PathNavigator.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-webdav-jackrabbit/src/main/java/org/apache/maven/wagon/providers/webdav/PathNavigator.java Thu Feb 19 04:05:33 2009
@@ -36,7 +36,7 @@
     public PathNavigator( String path )
     {
         list = Arrays.asList( StringUtils.split( path, "/" ) );
-        currentPosition = list.size() + 1;
+        currentPosition = list.size();
     }
 
     public String getPath()
@@ -53,7 +53,7 @@
 
     public boolean backward()
     {
-        if ( currentPosition - 1 == 0 )
+        if ( currentPosition == 0 )
         {
             return false;
         }

Modified: maven/wagon/trunk/wagon-providers/wagon-webdav-jackrabbit/src/main/java/org/apache/maven/wagon/providers/webdav/WebDavWagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-webdav-jackrabbit/src/main/java/org/apache/maven/wagon/providers/webdav/WebDavWagon.java?rev=745718&r1=745717&r2=745718&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-webdav-jackrabbit/src/main/java/org/apache/maven/wagon/providers/webdav/WebDavWagon.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-webdav-jackrabbit/src/main/java/org/apache/maven/wagon/providers/webdav/WebDavWagon.java Thu Feb 19 04:05:33 2009
@@ -40,6 +40,7 @@
 import org.apache.maven.wagon.PathUtils;
 import org.apache.maven.wagon.ResourceDoesNotExistException;
 import org.apache.maven.wagon.TransferFailedException;
+import org.apache.maven.wagon.WagonConstants;
 import org.apache.maven.wagon.authorization.AuthorizationException;
 import org.apache.maven.wagon.repository.Repository;
 import org.apache.maven.wagon.shared.http.AbstractHttpClientWagon;
@@ -105,6 +106,13 @@
         Repository repository = getRepository();
         String basedir = repository.getBasedir();
 
+        String baseUrl = repository.getProtocol() + "://" + repository.getHost();
+        if ( repository.getPort() != WagonConstants.UNKNOWN_PORT )
+        {
+            baseUrl += ":" + repository.getPort();
+        }
+        
+        // create relative path that will always have a leading and trailing slash
         String relpath = FileUtils.normalize( getPath( basedir, dir ) + "/" );
 
         PathNavigator navigator = new PathNavigator(relpath);
@@ -112,9 +120,9 @@
         // traverse backwards until we hit a directory that already exists (OK/NOT_ALLOWED), or that we were able to
         // create (CREATED), or until we get to the top of the path
         int status = SC_NULL;
-        while ( navigator.backward() )
+        do
         {
-            String url = getUrl( navigator );
+            String url = baseUrl + "/" + navigator.getPath();
             status = doMkCol( url );
             if ( status == HttpStatus.SC_OK || status == HttpStatus.SC_CREATED
                 || status == HttpStatus.SC_METHOD_NOT_ALLOWED )
@@ -122,11 +130,12 @@
                 break;
             }
         }
+        while ( navigator.backward() );
 
         // traverse forward creating missing directories
         while ( navigator.forward() )
         {
-            String url = getUrl( navigator );
+            String url = baseUrl + "/" + navigator.getPath();
             status = doMkCol( url );
             if ( status != HttpStatus.SC_OK && status != HttpStatus.SC_CREATED )
             {
@@ -152,12 +161,6 @@
         }
     }
 
-    private String getUrl( PathNavigator navigator )
-    {
-        String url = getRepository().getUrl().replaceAll( getRepository().getBasedir(), "" );
-        return url + '/' + navigator.getPath();
-    }
-
     /**
      * Copy a directory from local system to remote webdav server
      *

Modified: maven/wagon/trunk/wagon-providers/wagon-webdav-jackrabbit/src/test/java/org/apache/maven/wagon/providers/webdav/PathNavigatorTest.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-webdav-jackrabbit/src/test/java/org/apache/maven/wagon/providers/webdav/PathNavigatorTest.java?rev=745718&r1=745717&r2=745718&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-webdav-jackrabbit/src/test/java/org/apache/maven/wagon/providers/webdav/PathNavigatorTest.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-webdav-jackrabbit/src/test/java/org/apache/maven/wagon/providers/webdav/PathNavigatorTest.java Thu Feb 19 04:05:33 2009
@@ -26,34 +26,38 @@
  */
 public class PathNavigatorTest extends TestCase
 {
-    private static final String TEST_PATH = "the/quick/brown/fox/jumps/over/the/lazy/maven/developer";
+    private static final String TEST_PATH = "foo/bar/baz";
 
-    public void testBackForwardBack()
+    public void testBackAndForward()
     {
         PathNavigator navigator = new PathNavigator( TEST_PATH );
 
+        assertEquals( "foo/bar/baz/", navigator.getPath() );
+        
         // Nav backward
         assertTrue( navigator.backward() );
-        assertEquals( "the/quick/brown/fox/jumps/over/the/lazy/maven/developer/", navigator.getPath() );
+        assertEquals( "foo/bar/", navigator.getPath() );
 
         assertTrue( navigator.backward() );
-        assertEquals( "the/quick/brown/fox/jumps/over/the/lazy/maven/", navigator.getPath() );
+        assertEquals( "foo/", navigator.getPath() );
 
         assertTrue( navigator.backward() );
-        assertEquals( "the/quick/brown/fox/jumps/over/the/lazy/", navigator.getPath() );
-
-        assertTrue( navigator.backward() );
-        assertEquals( "the/quick/brown/fox/jumps/over/the/", navigator.getPath() );
+        assertEquals( "", navigator.getPath() );
 
+        assertFalse( navigator.backward() );
+        assertEquals( "", navigator.getPath() );
+        
         // Nav forward
         assertTrue( navigator.forward() );
-        assertEquals( "the/quick/brown/fox/jumps/over/the/lazy/", navigator.getPath() );
+        assertEquals( "foo/", navigator.getPath() );
 
         assertTrue( navigator.forward() );
-        assertEquals( "the/quick/brown/fox/jumps/over/the/lazy/maven/", navigator.getPath() );
+        assertEquals( "foo/bar/", navigator.getPath() );
 
-        // Nav backward
-        assertTrue( navigator.backward() );
-        assertEquals( "the/quick/brown/fox/jumps/over/the/lazy/", navigator.getPath() );
+        assertTrue( navigator.forward() );
+        assertEquals( "foo/bar/baz/", navigator.getPath() );
+
+        assertFalse( navigator.forward() );
+        assertEquals( "foo/bar/baz/", navigator.getPath() );
     }
 }

Modified: maven/wagon/trunk/wagon-providers/wagon-webdav-jackrabbit/src/test/java/org/apache/maven/wagon/providers/webdav/WebDavWagonTest.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-webdav-jackrabbit/src/test/java/org/apache/maven/wagon/providers/webdav/WebDavWagonTest.java?rev=745718&r1=745717&r2=745718&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-webdav-jackrabbit/src/test/java/org/apache/maven/wagon/providers/webdav/WebDavWagonTest.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-webdav-jackrabbit/src/test/java/org/apache/maven/wagon/providers/webdav/WebDavWagonTest.java Thu Feb 19 04:05:33 2009
@@ -129,6 +129,89 @@
     {
         assertURL( "dav+https://localhost:10007/dav/", "https://localhost:10007/dav/" );
     }
+    
+    public void testMkdirs() throws Exception
+    {
+        setupRepositories();
+
+        setupWagonTestingFixtures();
+
+        WebDavWagon wagon = (WebDavWagon) getWagon();
+        wagon.connect( testRepository, getAuthInfo() );
+        
+        try
+        {
+            File dir = getRepositoryDirectory();
+            
+            // check basedir also doesn't exist and will need to be created
+            dir = new File( dir, testRepository.getBasedir() );
+            assertFalse( dir.exists() );
+            
+            // test leading /
+            assertFalse( new File( dir, "foo" ).exists() );
+            wagon.mkdirs( "/foo" );
+            assertTrue( new File( dir, "foo" ).exists() );
+            
+            // test trailing /
+            assertFalse( new File( dir, "bar" ).exists() );
+            wagon.mkdirs( "bar/" );
+            assertTrue( new File( dir, "bar" ).exists() );
+            
+            // test when already exists
+            wagon.mkdirs( "bar" );
+            
+            // test several parts
+            assertFalse( new File( dir, "1/2/3/4" ).exists() );
+            wagon.mkdirs( "1/2/3/4" );
+            assertTrue( new File( dir, "1/2/3/4" ).exists() );
+            
+            // test additional part and trailing /
+            assertFalse( new File( dir, "1/2/3/4/5" ).exists() );
+            wagon.mkdirs( "1/2/3/4/5/" );
+            assertTrue( new File( dir, "1/2/3/4" ).exists() );
+        }
+        finally
+        {
+            wagon.disconnect();
+            
+            tearDownWagonTestingFixtures();
+        }
+    }
+
+    public void testMkdirsWithNoBasedir() throws Exception
+    {
+        // WAGON-244
+        setupRepositories();
+
+        setupWagonTestingFixtures();
+
+        // reconstruct with no basedir
+        testRepository.setUrl( testRepository.getProtocol() + "://" + testRepository.getHost() + ":"
+            + testRepository.getPort() );
+
+        WebDavWagon wagon = (WebDavWagon) getWagon();
+        wagon.connect( testRepository, getAuthInfo() );
+        
+        try
+        {
+            File dir = getRepositoryDirectory();
+            
+            // check basedir also doesn't exist and will need to be created
+            dir = new File( dir, testRepository.getBasedir() );
+            assertTrue( dir.exists() );
+            
+            // test leading /
+            assertFalse( new File( dir, "foo" ).exists() );
+            wagon.mkdirs( "/foo" );
+            assertTrue( new File( dir, "foo" ).exists() );            
+        }
+        finally
+        {
+            wagon.disconnect();
+            
+            tearDownWagonTestingFixtures();
+        }
+    }
 
     protected void setHttpHeaders( StreamingWagon wagon, Properties properties )
     {



---------------------------------------------------------------------
To unsubscribe, e-mail: wagon-commits-unsubscribe@maven.apache.org
For additional commands, e-mail: wagon-commits-help@maven.apache.org