Author: carlos
Date: Thu May  4 20:35:45 2006
New Revision: 399937

URL: http://svn.apache.org/viewcvs?rev=399937&view=rev
Log:
Added getParent and getRelativePath

Modified:
    
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/repository/SvnScmProviderRepository.java
    
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/test/java/org/apache/maven/scm/provider/svn/repository/SvnScmProviderRepositoryTest.java

Modified: 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/repository/SvnScmProviderRepository.java
URL: 
http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/repository/SvnScmProviderRepository.java?rev=399937&r1=399936&r2=399937&view=diff
==============================================================================
--- 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/repository/SvnScmProviderRepository.java
 (original)
+++ 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/repository/SvnScmProviderRepository.java
 Thu May  4 20:35:45 2006
@@ -16,6 +16,7 @@
  * limitations under the License.
  */
 
+import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.ScmProviderRepositoryWithHost;
 
 /**
@@ -28,6 +29,8 @@
     /** */
     private String url;
 
+    private String protocol;
+
     /**
      * The base directory for any tags. Can be relative to the repository URL 
or an absolute URL.
      */
@@ -75,54 +78,67 @@
         this.tagBase = tagBase;
     }
 
-    private void parseUrl( String url )
+    private void setProtocol( String protocol )
+    {
+        this.protocol = protocol;
+    }
+
+    /**
+     * Get the protocol used in this repository (file://, http://, 
https://,...)
+     * 
+     * @return the protocol
+     */
+    public String getProtocol()
     {
-        String protocol = null;
+        return protocol;
+    }
 
+    private void parseUrl( String url )
+    {
         if ( url.startsWith( "file" ) )
         {
-            protocol = "file://";
+            setProtocol( "file://" );
         }
         else if ( url.startsWith( "https" ) )
         {
-            protocol = "https://";;
+            setProtocol( "https://"; );
         }
         else if ( url.startsWith( "http" ) )
         {
-            protocol = "http://";;
+            setProtocol( "http://"; );
         }
         else if ( url.startsWith( "svn+ssh" ) )
         {
-            protocol = "svn+ssh://";
+            setProtocol( "svn+ssh://" );
         }
         else if ( url.startsWith( "svn" ) )
         {
-            protocol = "svn://";
+            setProtocol( "svn://" );
         }
 
-        if ( protocol == null )
+        if ( getProtocol() == null )
         {
             return;
         }
 
-        String urlPath = url.substring( protocol.length() );
+        String urlPath = url.substring( getProtocol().length() );
 
         int indexAt = urlPath.indexOf( "@" );
 
-        if ( indexAt > 0 && !"svn+ssh://".equals( protocol ) )
+        if ( indexAt > 0 && !"svn+ssh://".equals( getProtocol() ) )
         {
             setUser( urlPath.substring( 0, indexAt ) );
 
             urlPath = urlPath.substring( indexAt + 1 );
 
-            this.url = protocol + urlPath;
+            this.url = getProtocol() + urlPath;
         }
         else
         {
-            this.url = protocol + urlPath;
+            this.url = getProtocol() + urlPath;
         }
 
-        if ( !"file://".equals( protocol ) )
+        if ( !"file://".equals( getProtocol() ) )
         {
             int indexSlash = urlPath.indexOf( "/" );
 
@@ -145,6 +161,55 @@
                 setHost( hostPort );
             }
         }
+    }
+
+    /**
+     * A ScmProviderRepository like this but with the parent url (stripping 
the last directory)
+     * 
+     * @return the parent repository or <code>null</null> if this is the top 
level repository
+     */
+    public ScmProviderRepository getParent()
+    {
+        String newUrl = getUrl().substring( getProtocol().length() );
+
+        while ( newUrl.endsWith( "/." ) )
+        {
+            newUrl = newUrl.substring( 0, newUrl.length() - 1 );
+        }
+
+        while ( newUrl.endsWith( "/" ) )
+        {
+            newUrl = newUrl.substring( 0, newUrl.length() );
+        }
+
+        int i = newUrl.lastIndexOf( "/" );
+
+        if ( i < 0 )
+        {
+            return null;
+        }
+        newUrl = newUrl.substring( 0, i );
+
+        return new SvnScmProviderRepository( getProtocol() + newUrl, 
getUser(), getPassword() );
+    }
+
+    /**
+     * Get the relative path from the ancestor to this repository
+     */
+    public String getRelativePath( ScmProviderRepository ancestor )
+    {
+        if ( ancestor instanceof SvnScmProviderRepository )
+        {
+            SvnScmProviderRepository svnAncestor = (SvnScmProviderRepository) 
ancestor;
+
+            String path = getUrl().replaceFirst( svnAncestor.getUrl() + "/", 
"" );
+
+            if ( !path.equals( getUrl() ) )
+            {
+                return path;
+            }
+        }
+        return null;
     }
 
     public String toString()

Modified: 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/test/java/org/apache/maven/scm/provider/svn/repository/SvnScmProviderRepositoryTest.java
URL: 
http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/test/java/org/apache/maven/scm/provider/svn/repository/SvnScmProviderRepositoryTest.java?rev=399937&r1=399936&r2=399937&view=diff
==============================================================================
--- 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/test/java/org/apache/maven/scm/provider/svn/repository/SvnScmProviderRepositoryTest.java
 (original)
+++ 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/test/java/org/apache/maven/scm/provider/svn/repository/SvnScmProviderRepositoryTest.java
 Thu May  4 20:35:45 2006
@@ -188,4 +188,10 @@
             // expected
         }
     }
+
+    public void testGetParent()
+    {
+        new SvnScmProviderRepository( "http://subversion.tigris.org"; );
+    }
+
 }


Reply via email to