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" ); + } + }