You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm-commits@maven.apache.org by ev...@apache.org on 2007/03/22 15:40:15 UTC

svn commit: r521294 - in /maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src: main/java/org/apache/maven/scm/provider/svn/ main/java/org/apache/maven/scm/provider/svn/repository/ test/java/org/apache/maven/sc...

Author: evenisse
Date: Thu Mar 22 07:40:14 2007
New Revision: 521294

URL: http://svn.apache.org/viewvc?view=rev&rev=521294
Log:
[SCM-185] Allow all tunnels defined in subversion configuration

Added:
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/SvnConfigFileReader.java   (with props)
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/AbstractSvnScmProvider.java
    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/AbstractSvnScmProvider.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/AbstractSvnScmProvider.java?view=diff&rev=521294&r1=521293&r2=521294
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/AbstractSvnScmProvider.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/AbstractSvnScmProvider.java Thu Mar 22 07:40:14 2007
@@ -39,9 +39,11 @@
 import org.apache.maven.scm.provider.svn.command.SvnCommand;
 import org.apache.maven.scm.provider.svn.command.info.SvnInfoScmResult;
 import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository;
+import org.apache.maven.scm.provider.svn.util.SvnUtil;
 import org.apache.maven.scm.repository.ScmRepository;
 import org.apache.maven.scm.repository.ScmRepositoryException;
 import org.apache.maven.scm.repository.UnknownRepositoryStructure;
+import org.codehaus.plexus.util.StringUtils;
 
 import java.io.File;
 import java.util.ArrayList;
@@ -184,13 +186,36 @@
                 return result;
             }
         }
-        else if ( url.startsWith( "svn+ssh" ) )
+        // Support of tunnels: svn+xxx with xxx defined in subversion conf file
+        else if ( url.startsWith( "svn+" ) )
         {
-            if ( !url.startsWith( "svn+ssh://" ) )
+            if ( url.indexOf( "://" ) < 0 )
             {
-                result.messages.add( "A svn 'svn+ssh' url must be on the form 'svn+ssh://'." );
+                result.messages.add( "A svn 'svn+xxx' url must be on the form 'svn+xxx://'." );
 
                 return result;
+            }
+            else
+            {
+                String tunnel = url.substring( "svn+".length(), url.indexOf( "://" ) );
+
+                //ssh is always an allowed tunnel
+                if ( !"ssh".equals( tunnel ) )
+                {
+                    SvnConfigFileReader reader = new SvnConfigFileReader();
+                    if ( SvnUtil.getSettings().getConfigDirectory() != null )
+                    {
+                        reader.setConfigDirectory( new File( SvnUtil.getSettings().getConfigDirectory() ) );
+                    }
+
+                    if ( StringUtils.isEmpty( reader.getProperty( "tunnels", tunnel ) ) )
+                    {
+                        result.messages.add(
+                            "The tunnel '" + tunnel + "' isn't defined in your subversion configuration file." );
+
+                        return result;
+                    }
+                }
             }
         }
         else if ( url.startsWith( "svn" ) )

Added: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/SvnConfigFileReader.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/SvnConfigFileReader.java?view=auto&rev=521294
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/SvnConfigFileReader.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/SvnConfigFileReader.java Thu Mar 22 07:40:14 2007
@@ -0,0 +1,158 @@
+package org.apache.maven.scm.provider.svn;
+
+/*
+ * 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.
+ */
+
+import org.codehaus.plexus.util.StringUtils;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id$
+ */
+public class SvnConfigFileReader
+{
+    private File configDirectory;
+
+    public File getConfigDirectory()
+    {
+        if ( configDirectory == null )
+        {
+            if ( System.getProperty( "os.name" ).toLowerCase().indexOf( "windows" ) >= 0 )
+            {
+                configDirectory = new File( System.getProperty( "user.home" ), "Application Data/Subversion" );
+            }
+            else
+            {
+                configDirectory = new File( System.getProperty( "user.home" ), ".subversion" );
+            }
+        }
+
+        return configDirectory;
+    }
+
+    public void setConfigDirectory( File configDirectory )
+    {
+        this.configDirectory = configDirectory;
+    }
+
+    public String getProperty( String group, String propertyName )
+    {
+        List lines = getConfLines();
+
+        boolean inGroup = false;
+        for ( Iterator i = lines.iterator(); i.hasNext(); )
+        {
+            String line = ( (String) i.next() ).trim();
+
+            if ( !inGroup )
+            {
+                if ( ( "[" + group + "]" ).equals( line ) )
+                {
+                    inGroup = true;
+                }
+            }
+            else
+            {
+                if ( line.startsWith( "[" ) && line.endsWith( "]" ) )
+                {
+                    //a new group start
+                    return null;
+                }
+
+                if ( line.startsWith( "#" ) )
+                {
+                    continue;
+                }
+                if ( line.indexOf( '=' ) < 0 )
+                {
+                    continue;
+                }
+
+                String property = line.substring( 0, line.indexOf( '=' ) ).trim();
+
+                if ( !property.equals( propertyName ) )
+                {
+                    continue;
+                }
+
+                String value = line.substring( line.indexOf( '=' ) + 1 );
+                return value.trim();
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Load the svn config file
+     *
+     * @return the list of all lines
+     */
+    private List getConfLines()
+    {
+        List lines = new ArrayList();
+
+        BufferedReader reader = null;
+
+        try
+        {
+            if ( getConfigDirectory().exists() )
+            {
+                reader = new BufferedReader( new FileReader( new File( getConfigDirectory(), "config" ) ) );
+                String line;
+                while ( ( line = reader.readLine() ) != null )
+                {
+                    if ( !line.startsWith( "#" ) && StringUtils.isNotEmpty( line ) )
+                    {
+                        lines.add( line );
+                    }
+                }
+            }
+        }
+        catch ( IOException e )
+        {
+            lines.clear();
+        }
+        finally
+        {
+            if ( reader != null )
+            {
+                try
+                {
+                    reader.close();
+                }
+                catch ( IOException e )
+                {
+                    //Do nothing
+                }
+                reader = null;
+            }
+        }
+
+        return lines;
+    }
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/SvnConfigFileReader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/SvnConfigFileReader.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

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/viewvc/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?view=diff&rev=521294&r1=521293&r2=521294
==============================================================================
--- 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 Mar 22 07:40:14 2007
@@ -143,9 +143,9 @@
         {
             setProtocol( "http://" );
         }
-        else if ( url.startsWith( "svn+ssh" ) )
+        else if ( url.startsWith( "svn+" ) )
         {
-            setProtocol( "svn+ssh://" );
+            setProtocol( url.substring( 0, url.indexOf( "://" ) + 3 ) );
         }
         else if ( url.startsWith( "svn" ) )
         {
@@ -161,7 +161,7 @@
 
         int indexAt = urlPath.indexOf( "@" );
 
-        if ( indexAt > 0 && !"svn+ssh://".equals( getProtocol() ) )
+        if ( indexAt > 0 && !getProtocol().startsWith( "svn+" ) )
         {
             setUser( urlPath.substring( 0, indexAt ) );
 

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/viewvc/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?view=diff&rev=521294&r1=521293&r2=521294
==============================================================================
--- 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 Mar 22 07:40:14 2007
@@ -91,12 +91,28 @@
                  "subversion.tigris.org" );
     }
 
+    /* This test require a specific subversion config file
+    public void testLegalSvnPlusXxxURL()
+        throws Exception
+    {
+        testUrl( "scm:svn:svn+something://subversion.tigris.org", "svn+something://subversion.tigris.org", null,
+                 "subversion.tigris.org" );
+    }*/
+
     public void testLegalSvnPlusSshPlusUsernameURL()
         throws Exception
     {
         testUrl( "scm:svn:svn+ssh://username@subversion.tigris.org", "svn+ssh://username@subversion.tigris.org", null,
                  "username@subversion.tigris.org" );
     }
+
+    /* This test require a specific subversion config file
+    public void testLegalSvnPlusXxxPlusUsernameURL()
+        throws Exception
+    {
+        testUrl( "scm:svn:svn+something://username@subversion.tigris.org", "svn+something://username@subversion.tigris.org", null,
+                 "username@subversion.tigris.org" );
+    }*/
 
     public void testLegalSvnPortUrl()
         throws Exception