Author: evenisse
Date: Sun Sep 24 06:36:00 2006
New Revision: 449403

URL: http://svn.apache.org/viewvc?view=rev&rev=449403
Log:
[SCM-217] Fix svn+ssh svn urls with username
Submitted by: Jerome Lacoste

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/SvnCommandUtils.java
   (with props)
    
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/test/java/org/apache/maven/scm/provider/svn/SvnCommandUtilsTest.java
   (with props)
Modified:
    
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/checkout/SvnCheckOutCommand.java
    
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/tag/SvnTagCommand.java
    
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/tag/SvnExeTagCommandTckTest.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/SvnCommandUtils.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/SvnCommandUtils.java?view=auto&rev=449403
==============================================================================
--- 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/SvnCommandUtils.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/SvnCommandUtils.java
 Sun Sep 24 06:36:00 2006
@@ -0,0 +1,51 @@
+package org.apache.maven.scm.provider.svn;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed 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;
+
+/**
+ * Command utilities for svn commands.
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Jerome Lacoste</a>
+ * @version $Id$
+ */
+public class SvnCommandUtils
+{
+
+    /**
+     * Add or overrides the username into a url with a svn+ssh scheme.
+     *
+     * Svn 1.3.1 doesn't use the username information specified by --username 
when the url
+     * uses the svn+ssh scheme. This allows to fix it. See MRELEASE-35.
+     *
+     * @param url the url, not <code>null</code>
+     * @param username the username, may be <code>null</code>
+     * @return the fixed url
+     * @throws NullPointerException if url is <code>null</code>
+     */
+    public static String fixUrl( String url, String username )
+    {
+        if ( ! StringUtils.isEmpty(username) && url.startsWith( "svn+ssh://" ) 
) {
+            // is there a username to override ? If so we cut after
+            int idx = url.indexOf( '@' );
+            int cutIdx = idx < 0 ?  "svn+ssh://".length() : idx + 1;
+            url = "svn+ssh://" + username + "@" + url.substring( cutIdx );
+        }
+        return url;
+    }
+}

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/SvnCommandUtils.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/SvnCommandUtils.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/test/java/org/apache/maven/scm/provider/svn/SvnCommandUtilsTest.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/SvnCommandUtilsTest.java?view=auto&rev=449403
==============================================================================
--- 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/test/java/org/apache/maven/scm/provider/svn/SvnCommandUtilsTest.java
 (added)
+++ 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/test/java/org/apache/maven/scm/provider/svn/SvnCommandUtilsTest.java
 Sun Sep 24 06:36:00 2006
@@ -0,0 +1,79 @@
+package org.apache.maven.scm.provider.svn;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed 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.apache.maven.scm.ScmTestCase;
+
+/**
+ * @author <a href="mailto:[EMAIL PROTECTED]">Jerome Lacoste</a>
+ * @version $Id$
+ */
+public class SvnCommandUtilsTest
+    extends ScmTestCase
+{
+    // ----------------------------------------------------------------------
+    // appendPath
+    // ----------------------------------------------------------------------
+
+    public void testFixUrlHttpUrlsAreIgnored()
+        throws Exception
+    {
+        String unchanged = "http://foo.com/svn/myproject/tags/foo";;
+        assertEquals( unchanged,
+                      SvnCommandUtils.fixUrl( unchanged, null ) );
+        assertEquals( unchanged,
+                      SvnCommandUtils.fixUrl( unchanged, "" ) );
+        assertEquals( unchanged,
+                      SvnCommandUtils.fixUrl( unchanged, "user" ) );
+    }
+
+    public void testFixUrlNPEifNullURL()
+        throws Exception
+    {
+        try
+        {
+            SvnCommandUtils.fixUrl( null, "user" );
+            fail("expected NPE");
+        }
+        catch ( NullPointerException e )
+        {
+            assertTrue(true); // expected
+        }
+    }
+
+    public void testFixUrlSvnSshUrlsUsernameIsAddedWhenUserSpecified()
+        throws Exception
+    {
+        assertEquals( "svn+ssh://foo.com/svn/myproject",
+                      SvnCommandUtils.fixUrl( 
"svn+ssh://foo.com/svn/myproject", null ) );
+        assertEquals( "svn+ssh://foo.com/svn/myproject",
+                      SvnCommandUtils.fixUrl( 
"svn+ssh://foo.com/svn/myproject", "" ) );
+        assertEquals( "svn+ssh://[EMAIL PROTECTED]/svn/myproject",
+                      SvnCommandUtils.fixUrl( 
"svn+ssh://foo.com/svn/myproject", "user" ) );
+    }
+
+    public void testFixUrlSvnSshUrlsUsernameIsOverridenWhenUserSpecified()
+        throws Exception
+    {
+        assertEquals( "svn+ssh://[EMAIL PROTECTED]/svn/myproject",
+                      SvnCommandUtils.fixUrl( "svn+ssh://[EMAIL 
PROTECTED]/svn/myproject", null ) );
+        assertEquals( "svn+ssh://[EMAIL PROTECTED]/svn/myproject",
+                      SvnCommandUtils.fixUrl( "svn+ssh://[EMAIL 
PROTECTED]/svn/myproject", "" ) );
+        assertEquals( "svn+ssh://[EMAIL PROTECTED]/svn/myproject",
+                      SvnCommandUtils.fixUrl( "svn+ssh://[EMAIL 
PROTECTED]/svn/myproject", "user2" ) );
+    }
+}

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

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

Modified: 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/checkout/SvnCheckOutCommand.java
URL: 
http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/checkout/SvnCheckOutCommand.java?view=diff&rev=449403&r1=449402&r2=449403
==============================================================================
--- 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/checkout/SvnCheckOutCommand.java
 (original)
+++ 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/checkout/SvnCheckOutCommand.java
 Sun Sep 24 06:36:00 2006
@@ -22,6 +22,7 @@
 import org.apache.maven.scm.command.checkout.CheckOutScmResult;
 import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.svn.SvnTagBranchUtils;
+import org.apache.maven.scm.provider.svn.SvnCommandUtils;
 import org.apache.maven.scm.provider.svn.command.SvnCommand;
 import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository;
 import org.apache.maven.scm.provider.svn.svnexe.command.SvnCommandLineUtils;
@@ -51,6 +52,8 @@
         {
             url = SvnTagBranchUtils.resolveTagUrl( repository, tag );
         }
+
+        url = SvnCommandUtils.fixUrl( url, repository.getUser() );
 
         // TODO: revision
         Commandline cl = createCommandLine( repository, fileSet.getBasedir(), 
null, url );

Modified: 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/tag/SvnTagCommand.java
URL: 
http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/tag/SvnTagCommand.java?view=diff&rev=449403&r1=449402&r2=449403
==============================================================================
--- 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/tag/SvnTagCommand.java
 (original)
+++ 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/tag/SvnTagCommand.java
 Sun Sep 24 06:36:00 2006
@@ -25,6 +25,7 @@
 import org.apache.maven.scm.command.tag.TagScmResult;
 import org.apache.maven.scm.provider.ScmProviderRepository;
 import org.apache.maven.scm.provider.svn.SvnTagBranchUtils;
+import org.apache.maven.scm.provider.svn.SvnCommandUtils;
 import org.apache.maven.scm.provider.svn.command.SvnCommand;
 import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository;
 import org.apache.maven.scm.provider.svn.svnexe.command.SvnCommandLineUtils;
@@ -131,7 +132,7 @@
     //
     // ----------------------------------------------------------------------
 
-    private static Commandline createCommandLine( SvnScmProviderRepository 
repository, File workingDirectory,
+    public static Commandline createCommandLine( SvnScmProviderRepository 
repository, File workingDirectory,
                                                   String tag, File messageFile 
)
     {
         Commandline cl = SvnCommandLineUtils.getBaseSvnCommandLine( 
workingDirectory, repository );
@@ -145,7 +146,8 @@
         cl.createArgument().setValue( "." );
 
         // Note: this currently assumes you have the tag base checked out too
-        cl.createArgument().setValue( SvnTagBranchUtils.resolveTagUrl( 
repository, tag ) );
+        String tagUrl = SvnTagBranchUtils.resolveTagUrl( repository, tag );
+        cl.createArgument().setValue( SvnCommandUtils.fixUrl( tagUrl, 
repository.getUser() ) );
 
         return cl;
     }

Modified: 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/tag/SvnExeTagCommandTckTest.java
URL: 
http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/tag/SvnExeTagCommandTckTest.java?view=diff&rev=449403&r1=449402&r2=449403
==============================================================================
--- 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/tag/SvnExeTagCommandTckTest.java
 (original)
+++ 
maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/test/java/org/apache/maven/scm/provider/svn/svnexe/command/tag/SvnExeTagCommandTckTest.java
 Sun Sep 24 06:36:00 2006
@@ -17,6 +17,13 @@
  */
 
 import org.apache.maven.scm.provider.svn.command.tag.SvnTagCommandTckTest;
+import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository;
+import 
org.apache.maven.scm.provider.svn.svnexe.command.changelog.SvnChangeLogCommand;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.codehaus.plexus.util.cli.Commandline;
+
+import java.io.File;
+import java.util.Date;
 
 /**
  * This test tests the tag command.
@@ -27,4 +34,30 @@
 public class SvnExeTagCommandTckTest
     extends SvnTagCommandTckTest
 {
+    public void testTagUserNameSvnSsh()
+        throws Exception
+    {
+        File messageFile = File.createTempFile( "maven-scm", "commit" );
+
+        testCommandLine( "scm:svn:svn+ssh://foo.com/svn/trunk", "svntag", 
messageFile, "user",
+                         "svn --username user --non-interactive copy --file " 
+ messageFile.getAbsolutePath()
+                             + " . svn+ssh://[EMAIL 
PROTECTED]/svn/tags/svntag" );
+    }
+
+    private void testCommandLine( String scmUrl, String tag, File messageFile, 
String user, String commandLine )
+        throws Exception
+    {
+        File workingDirectory = getTestFile( "target/svn-update-command-test" 
);
+
+        ScmRepository repository = getScmManager().makeScmRepository( scmUrl );
+
+        SvnScmProviderRepository svnRepository = (SvnScmProviderRepository) 
repository.getProviderRepository();
+
+        svnRepository.setUser( user );
+
+        Commandline cl =
+            SvnTagCommand.createCommandLine( svnRepository, workingDirectory, 
tag, messageFile );
+
+        assertEquals( commandLine, cl.toString() );
+    }
 }


Reply via email to