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 2006/09/24 15:36:01 UTC
svn commit: r449403 - 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/
maven-scm-provider-svn-commons/src/test/java/org/apache/maven/scm/provider/svn/
maven...
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:jerome@coffeebreaks.org">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:jerome@coffeebreaks.org">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://user@foo.com/svn/myproject",
+ SvnCommandUtils.fixUrl( "svn+ssh://foo.com/svn/myproject", "user" ) );
+ }
+
+ public void testFixUrlSvnSshUrlsUsernameIsOverridenWhenUserSpecified()
+ throws Exception
+ {
+ assertEquals( "svn+ssh://user1@foo.com/svn/myproject",
+ SvnCommandUtils.fixUrl( "svn+ssh://user1@foo.com/svn/myproject", null ) );
+ assertEquals( "svn+ssh://user1@foo.com/svn/myproject",
+ SvnCommandUtils.fixUrl( "svn+ssh://user1@foo.com/svn/myproject", "" ) );
+ assertEquals( "svn+ssh://user2@foo.com/svn/myproject",
+ SvnCommandUtils.fixUrl( "svn+ssh://user1@foo.com/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://user@foo.com/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() );
+ }
}