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/02/26 12:17:05 UTC
svn commit: r381077 [2/6] - in /maven/scm/trunk/maven-scm-providers: ./
maven-scm-provider-svn/ maven-scm-providers-svn/
maven-scm-providers-svn/maven-scm-provider-svn-commons/
maven-scm-providers-svn/maven-scm-provider-svn-commons/src/
maven-scm-provi...
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/SvnTagBranchUtilsTest.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/SvnTagBranchUtilsTest.java?rev=381077&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/test/java/org/apache/maven/scm/provider/svn/SvnTagBranchUtilsTest.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/SvnTagBranchUtilsTest.java Sun Feb 26 03:16:52 2006
@@ -0,0 +1,318 @@
+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;
+import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository;
+import org.apache.maven.scm.repository.ScmRepository;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id$
+ */
+public class SvnTagBranchUtilsTest
+ extends ScmTestCase
+{
+ // ----------------------------------------------------------------------
+ // appendPath
+ // ----------------------------------------------------------------------
+
+ public void testAppendPath()
+ throws Exception
+ {
+ assertEquals( "http://foo.com/svn/myproject/tags/foo",
+ SvnTagBranchUtils.appendPath( "http://foo.com/svn", "myproject/tags/foo" ) );
+ }
+
+ public void testAppendPathNullAddlPath()
+ throws Exception
+ {
+ assertEquals( "http://foo.com/svn", SvnTagBranchUtils.appendPath( "http://foo.com/svn", null ) );
+ }
+
+ public void testAppendPathNullAddlTrailingSlash()
+ throws Exception
+ {
+ assertEquals( "http://foo.com/svn", SvnTagBranchUtils.appendPath( "http://foo.com/svn/", null ) );
+ }
+
+ public void testAppendPathTrailingSlash()
+ throws Exception
+ {
+ assertEquals( "http://foo.com/svn/myproject/tags/foo",
+ SvnTagBranchUtils.appendPath( "http://foo.com/svn/", "myproject/tags/foo" ) );
+ }
+
+ public void testAppendPathLeadingAndTrailingSlash()
+ throws Exception
+ {
+ assertEquals( "http://foo.com/svn/myproject/tags/foo",
+ SvnTagBranchUtils.appendPath( "http://foo.com/svn/", "/myproject/tags/foo" ) );
+ }
+
+ // ----------------------------------------------------------------------
+ // getProjectRoot
+ // ----------------------------------------------------------------------
+
+ public void testGetProjectRootTagBranchTrunk()
+ throws Exception
+ {
+ // All of these should equate to the same project root
+ String[] paths = new String[]{"scm:svn:http://foo.com/svn/tags/my-tag", "scm:svn:http://foo.com/svn/tags",
+ "scm:svn:http://foo.com/svn/branches/my-branch", "scm:svn:http://foo.com/svn/branches",
+ "scm:svn:http://foo.com/svn/trunk", "scm:svn:http://foo.com/svn/trunk/some/path/to/some/file"};
+
+ for ( int i = 0; i < paths.length; i++ )
+ {
+ testGetProjectRoot( paths[i], "http://foo.com/svn" );
+ }
+ }
+
+ public void testGetProjectRootNoRootSpecifier()
+ throws Exception
+ {
+ testGetProjectRoot( "scm:svn:http://foo.com/svn/", "http://foo.com/svn" );
+
+ testGetProjectRoot( "scm:svn:http://foo.com/svn", "http://foo.com/svn" );
+
+ testGetProjectRoot( "scm:svn:http://foo.com/svn/ntags", "http://foo.com/svn/ntags" );
+
+ testGetProjectRoot( "scm:svn:http://foo.com/svn/nbranches", "http://foo.com/svn/nbranches" );
+ }
+
+ public void testGetProjectRootLooksLikeRootSpecifier()
+ throws Exception
+ {
+ testGetProjectRoot( "scm:svn:http://foo.com/svn/tagst", "http://foo.com/svn/tagst" );
+
+ testGetProjectRoot( "scm:svn:http://foo.com/svn/tagst/tags", "http://foo.com/svn/tagst" );
+
+ testGetProjectRoot( "scm:svn:http://foo.com/svn/branchess", "http://foo.com/svn/branchess" );
+
+ }
+
+ public void testGetProjectRootDoubleProjectRoots()
+ throws Exception
+ {
+ // Not sure why anyone would do this, but creating test case to assure it behavior stays consistent
+ testGetProjectRoot( "scm:svn:http://foo.com/svn/tags/my-tag/tags/another-tag/", "http://foo.com/svn" );
+ }
+
+ // ----------------------------------------------------------------------
+ // resolveTagUrl
+ // ----------------------------------------------------------------------
+
+ public void testResolveTagRelative()
+ throws Exception
+ {
+ testResolveTagUrl( "scm:svn:http://foo.com/svn/", "my-tag", "http://foo.com/svn/tags/my-tag" );
+
+ testResolveTagUrl( "scm:svn:http://foo.com/svn/trunk", "my-tag", "http://foo.com/svn/tags/my-tag" );
+
+ testResolveTagUrl( "scm:svn:http://foo.com/svn/trunk/", "my-tag", "http://foo.com/svn/tags/my-tag" );
+
+ testResolveTagUrl( "scm:svn:http://foo.com/svn/branches", "my-tag", "http://foo.com/svn/tags/my-tag" );
+
+ testResolveTagUrl( "scm:svn:http://foo.com/svn/tags", "my-tag", "http://foo.com/svn/tags/my-tag" );
+ }
+
+ public void testResolveTagAbsolute()
+ throws Exception
+ {
+ testResolveTagUrl( "scm:svn:http://foo.com/svn/", "http://foo.com/svn/branches/my-tag",
+ "http://foo.com/svn/branches/my-tag" );
+
+ testResolveTagUrl( "scm:svn:http://foo.com/svn/", "file://C://svn/some/crazy/path/my-tag",
+ "file://C://svn/some/crazy/path/my-tag" );
+
+ }
+
+ public void testResolveTagViewCVS()
+ throws Exception
+ {
+ assertEquals( "http://foo.com/cgi-bin/viewcvs.cgi/svn/tags/my-tag?root=test", SvnTagBranchUtils.resolveTagUrl(
+ "http://foo.com/cgi-bin/viewcvs.cgi/svn/trunk/?root=test", "/my-tag/" ) );
+ }
+
+ public void testResolveTagWithSlashes()
+ throws Exception
+ {
+ testResolveTagUrl( "scm:svn:http://foo.com/svn/", "/my-tag/", "http://foo.com/svn/tags/my-tag" );
+
+ testResolveBranchUrl( "scm:svn:http://foo.com/svn/", "/my-branch/", "http://foo.com/svn/branches/my-branch" );
+
+ testResolveBranchUrl( "scm:svn:http://foo.com/svn/", "http://foo.com/svn/myproject/branches/", "/my-branch/",
+ "http://foo.com/svn/myproject/branches/my-branch" );
+ }
+
+ public void testResolveTagWithTagOverwritingBase()
+ throws Exception
+ {
+ testResolveTagUrl( "scm:svn:http://foo.com/svn/", "branches/my-tag", "http://foo.com/svn/branches/my-tag" );
+
+ testResolveTagUrl( "scm:svn:http://foo.com/svn/", "tags/my-tag", "http://foo.com/svn/tags/my-tag" );
+
+ // Not sure why you would ever specify a tag of /trunk/foo,
+ // but create the test case to assure consistent behavior in the future
+ testResolveTagUrl( "scm:svn:http://foo.com/svn/", "trunk/my-tag", "http://foo.com/svn/trunk/my-tag" );
+
+ testResolveTagUrl( "scm:svn:svn+ssh://foo.com/svn/trunk/my_path/to/my_dir", "my-tag",
+ "svn+ssh://foo.com/svn/tags/my-tag" );
+
+ }
+
+ public void testResolveTagWithTagBaseSpecified()
+ throws Exception
+ {
+ testResolveTagUrl( "scm:svn:http://foo.com/svn/", "../tags", "my-tag", "../tags/my-tag" );
+
+ testResolveTagUrl( "scm:svn:http://foo.com/svn/", "http://foo.com/svn/non-standard/tag/dir/", "my-tag",
+ "http://foo.com/svn/non-standard/tag/dir/my-tag" );
+ }
+
+ public void testResolveTagLooksLikeOverwriteTagBase()
+ throws Exception
+ {
+ testResolveTagUrl( "scm:svn:http://foo.com/svn/", "tagst/my-tag", "http://foo.com/svn/tags/tagst/my-tag" );
+
+ testResolveTagUrl( "scm:svn:http://foo.com/svn/", "metatags/my-tag",
+ "http://foo.com/svn/tags/metatags/my-tag" );
+ }
+
+ public void testResolveBranchSimple()
+ throws Exception
+ {
+ testResolveBranchUrl( "scm:svn:http://foo.com/svn/", "my-branch", "http://foo.com/svn/branches/my-branch" );
+
+ testResolveBranchUrl( "scm:svn:svn+ssh://foo.com/svn/trunk", "my-branch",
+ "svn+ssh://foo.com/svn/branches/my-branch" );
+
+ testResolveBranchUrl( "scm:svn:svn+ssh://foo.com/svn/trunk/my_path/to/my_dir", "my-branch",
+ "svn+ssh://foo.com/svn/branches/my-branch" );
+
+ testResolveBranchUrl( "scm:svn:http://foo.com/svn/trunk", "branches/my-branch",
+ "http://foo.com/svn/branches/my-branch" );
+
+ testResolveBranchUrl( "scm:svn:http://foo.com/svn/", "subbranches/my-branch",
+ "http://foo.com/svn/branches/subbranches/my-branch" );
+
+ }
+
+ public void testResolveBranchTagBase()
+ throws Exception
+ {
+ testResolveBranchUrl( "scm:svn:http://foo.com/svn/", "../branches", "my-branch", "../branches/my-branch" );
+
+ testResolveBranchUrl( "scm:svn:http://foo.com/svn/", "http://foo.com/svn/non-standard/branch/dir", "my-branch",
+ "http://foo.com/svn/non-standard/branch/dir/my-branch" );
+ }
+
+ // ----------------------------------------------------------------------
+ // revisionArgument
+ // ----------------------------------------------------------------------
+
+ public void testIsRevisionArgumentSimple()
+ {
+ assertTrue( SvnTagBranchUtils.isRevisionSpecifier( "12345" ) );
+
+ assertTrue( SvnTagBranchUtils.isRevisionSpecifier( "hEaD" ) );
+
+ assertTrue( SvnTagBranchUtils.isRevisionSpecifier( "bAsE" ) );
+
+ assertTrue( SvnTagBranchUtils.isRevisionSpecifier( "cOmMiTtEd" ) );
+
+ assertTrue( SvnTagBranchUtils.isRevisionSpecifier( "pReV" ) );
+
+ assertTrue( SvnTagBranchUtils.isRevisionSpecifier( "{2005-1-1}" ) );
+
+ }
+
+ public void testIsRevisionArgumentRange()
+ {
+ assertTrue( SvnTagBranchUtils.isRevisionSpecifier( "12345:12345" ) );
+
+ assertTrue( SvnTagBranchUtils.isRevisionSpecifier( "1:2" ) );
+
+ assertTrue( SvnTagBranchUtils.isRevisionSpecifier( "hEaD:bAsE" ) );
+
+ assertTrue( SvnTagBranchUtils.isRevisionSpecifier( "BaSe:CoMmItTeD" ) );
+
+ assertTrue( SvnTagBranchUtils.isRevisionSpecifier( "{2004-1-1}:{2005-1-1}" ) );
+
+ assertFalse( SvnTagBranchUtils.isRevisionSpecifier( "BASE:" ) );
+ assertFalse( SvnTagBranchUtils.isRevisionSpecifier( ":BASE" ) );
+
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ private SvnScmProviderRepository getSvnRepository( String scmUrl )
+ throws Exception
+ {
+ ScmRepository repository = getScmManager().makeScmRepository( scmUrl );
+
+ return (SvnScmProviderRepository) repository.getProviderRepository();
+ }
+
+ private void testGetProjectRoot( String scmUrl, String expected )
+ throws Exception
+ {
+ assertEquals( expected, SvnTagBranchUtils.getProjectRoot( getSvnRepository( scmUrl ).getUrl() ) );
+ }
+
+ private void testResolveTagUrl( String scmUrl, String tag, String expected )
+ throws Exception
+ {
+ testResolveTagUrl( scmUrl, null, tag, expected );
+ }
+
+ private void testResolveTagUrl( String scmUrl, String tagBase, String tag, String expected )
+ throws Exception
+ {
+ SvnScmProviderRepository repository = getSvnRepository( scmUrl );
+
+ if ( tagBase != null )
+ {
+ repository.setTagBase( tagBase );
+ }
+
+ assertEquals( repository.getTagBase(), tagBase );
+ assertEquals( expected, SvnTagBranchUtils.resolveTagUrl( repository, tag ) );
+ }
+
+ private void testResolveBranchUrl( String scmUrl, String branch, String expected )
+ throws Exception
+ {
+ testResolveBranchUrl( scmUrl, null, branch, expected );
+ }
+
+ private void testResolveBranchUrl( String scmUrl, String tagBase, String branch, String expected )
+ throws Exception
+ {
+ SvnScmProviderRepository repository = getSvnRepository( scmUrl );
+ if ( tagBase != null )
+ {
+ repository.setTagBase( tagBase );
+ }
+
+ assertEquals( repository.getTagBase(), tagBase );
+ assertEquals( expected, SvnTagBranchUtils.resolveBranchUrl( repository, branch ) );
+ }
+
+}
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/SvnTagBranchUtilsTest.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/SvnTagBranchUtilsTest.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/TestSvnScmProvider.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/TestSvnScmProvider.java?rev=381077&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/test/java/org/apache/maven/scm/provider/svn/TestSvnScmProvider.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/TestSvnScmProvider.java Sun Feb 26 03:16:52 2006
@@ -0,0 +1,67 @@
+package org.apache.maven.scm.provider.svn;
+
+/*
+ * Copyright 2003-2005 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.provider.svn.command.SvnCommand;
+
+public class TestSvnScmProvider
+ extends AbstractSvnScmProvider
+{
+ protected SvnCommand getAddCommand()
+ {
+ return null;
+ }
+
+ protected SvnCommand getChangeLogCommand()
+ {
+ return null;
+ }
+
+ protected SvnCommand getCheckInCommand()
+ {
+ return null;
+ }
+
+ protected SvnCommand getCheckOutCommand()
+ {
+ return null;
+ }
+
+ protected SvnCommand getDiffCommand()
+ {
+ return null;
+ }
+
+ protected SvnCommand getRemoveCommand()
+ {
+ return null;
+ }
+
+ protected SvnCommand getStatusCommand()
+ {
+ return null;
+ }
+
+ protected SvnCommand getTagCommand()
+ {
+ return null;
+ }
+
+ protected SvnCommand getUpdateCommand()
+ {
+ return null;
+ }
+}
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/TestSvnScmProvider.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/TestSvnScmProvider.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/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=381077&view=auto
==============================================================================
--- 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 (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/repository/SvnScmProviderRepositoryTest.java Sun Feb 26 03:16:52 2006
@@ -0,0 +1,175 @@
+package org.apache.maven.scm.provider.svn.repository;
+
+/*
+ * 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;
+import org.apache.maven.scm.manager.ScmManager;
+import org.apache.maven.scm.provider.svn.TestSvnScmProvider;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.apache.maven.scm.repository.ScmRepositoryException;
+
+import java.io.File;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id$
+ */
+public class SvnScmProviderRepositoryTest
+ extends ScmTestCase
+{
+ private ScmManager scmManager;
+
+ public void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ scmManager = getScmManager();
+ }
+
+ // ----------------------------------------------------------------------
+ // Testing legal URLs
+ // ----------------------------------------------------------------------
+
+ public void testLegalFileURL()
+ throws Exception
+ {
+ testUrl( "scm:svn:file:///tmp/repo", "file:///tmp/repo", null );
+ }
+
+ public void testLegalLocalhostFileURL()
+ throws Exception
+ {
+ testUrl( "scm:svn:file://localhost/tmp/repo", "file://localhost/tmp/repo", null );
+ }
+
+ public void testLegalHttpURL()
+ throws Exception
+ {
+ testUrl( "scm:svn:http://subversion.tigris.org", "http://subversion.tigris.org", null );
+ }
+
+ public void testLegalHttpsURL()
+ throws Exception
+ {
+ testUrl( "scm:svn:https://subversion.tigris.org", "https://subversion.tigris.org", null );
+ }
+
+ public void testLegalSvnURL()
+ throws Exception
+ {
+ testUrl( "scm:svn:svn://subversion.tigris.org", "svn://subversion.tigris.org", null );
+ }
+
+ public void testLegalSvnPlusUsernameURL()
+ throws Exception
+ {
+ testUrl( "scm:svn:svn://username@subversion.tigris.org", "svn://subversion.tigris.org", "username" );
+ }
+
+ public void testLegalSvnPlusSshURL()
+ throws Exception
+ {
+ testUrl( "scm:svn:svn+ssh://subversion.tigris.org", "svn+ssh://subversion.tigris.org", null );
+ }
+
+ public void testLegalSvnPlusSshPlusUsernameURL()
+ throws Exception
+ {
+ testUrl( "scm:svn:svn+ssh://username@subversion.tigris.org", "svn+ssh://username@subversion.tigris.org", null );
+ }
+
+ public void testLegalSvnPortUrl()
+ throws Exception
+ {
+ testUrl("scm:svn:http://username@subversion.tigris.org:8800/pmgt/trunk", "http://subversion.tigris.org:8800/pmgt/trunk", "username", 8800);
+ testUrl("scm:svn:https://username@subversion.tigris.org:8080/pmgt/trunk", "https://subversion.tigris.org:8080/pmgt/trunk", "username", 8080);
+ testUrl("scm:svn:svn://username@subversion.tigris.org:8800/pmgt/trunk", "svn://subversion.tigris.org:8800/pmgt/trunk", "username", 8800);
+ testUrl("scm:svn:svn+ssh://username@subversion.tigris.org:8080/pmgt/trunk", "svn+ssh://username@subversion.tigris.org:8080/pmgt/trunk", null, 8080);
+ }
+
+ // ----------------------------------------------------------------------
+ // Testing illegal URLs
+ // ----------------------------------------------------------------------
+
+ public void testIllegalFileUrl()
+ throws Exception
+ {
+ testIllegalUrl( "file:/tmp/svn" );
+ }
+
+ // ----------------------------------------------------------------------
+ // Testing provider from path
+ // ----------------------------------------------------------------------
+
+ public void testSvnFromPath()
+ throws Exception
+ {
+ TestSvnScmProvider provider = new TestSvnScmProvider();
+
+ provider.makeProviderScmRepository( new File( getBasedir() ) );
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ private void testUrl( String scmUrl, String expectedUrl, String expectedUser )
+ throws Exception
+ {
+ ScmRepository repository = scmManager.makeScmRepository( scmUrl );
+
+ assertNotNull( "ScmManager.makeScmRepository() returned null", repository );
+
+ assertNotNull( "The provider repository was null.", repository.getProviderRepository() );
+
+ assertTrue( "The SCM Repository isn't a " + SvnScmProviderRepository.class.getName() + ".",
+ repository.getProviderRepository() instanceof SvnScmProviderRepository );
+
+ SvnScmProviderRepository providerRepository = (SvnScmProviderRepository) repository.getProviderRepository();
+
+ assertEquals( "url is incorrect", expectedUrl, providerRepository.getUrl() );
+
+ assertEquals( "User is incorrect", expectedUser, providerRepository.getUser() );
+ }
+
+ private void testUrl(String scmUrl, String expectedUrl, String expectedUser, int expectedPort)
+ throws Exception
+ {
+ testUrl(scmUrl, expectedUrl, expectedUser);
+
+ ScmRepository repository = scmManager.makeScmRepository(scmUrl);
+
+ assertEquals( "Port is incorrect",
+ expectedPort, ((SvnScmProviderRepository) repository.getProviderRepository()).getPort());
+ }
+
+ private void testIllegalUrl( String url )
+ throws Exception
+ {
+ try
+ {
+ scmManager.makeScmRepository( "scm:svn:" + url );
+
+ fail( "Expected a ScmRepositoryException while testing the url '" + url + "'." );
+ }
+ catch ( ScmRepositoryException e )
+ {
+ // expected
+ }
+ }
+}
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/repository/SvnScmProviderRepositoryTest.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/repository/SvnScmProviderRepositoryTest.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/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/test/resources/META-INF/plexus/components.xml?rev=381077&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/test/resources/META-INF/plexus/components.xml (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/test/resources/META-INF/plexus/components.xml Sun Feb 26 03:16:52 2006
@@ -0,0 +1,9 @@
+<component-set>
+ <components>
+ <component>
+ <role>org.apache.maven.scm.provider.ScmProvider</role>
+ <role-hint>svn</role-hint>
+ <implementation>org.apache.maven.scm.provider.svn.TestSvnScmProvider</implementation>
+ </component>
+ </components>
+</component-set>
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/test/resources/META-INF/plexus/components.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/test/resources/META-INF/plexus/components.xml
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Sun Feb 26 03:16:52 2006
@@ -0,0 +1,2 @@
+maven-scm-provider-svnexe.iml
+target
Added: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/pom.xml
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/pom.xml?rev=381077&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/pom.xml (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/pom.xml Sun Feb 26 03:16:52 2006
@@ -0,0 +1,23 @@
+<project>
+ <parent>
+ <artifactId>maven-scm-providers-svn</artifactId>
+ <groupId>org.apache.maven.scm</groupId>
+ <version>1.0-beta-3-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>maven-scm-provider-svnexe</artifactId>
+ <name>Maven SCM Subversion Provider - SVN Executable Impl.</name>
+ <version>1.0-beta-3-SNAPSHOT</version>
+ <dependencies>
+ <dependency>
+ <groupId>regexp</groupId>
+ <artifactId>regexp</artifactId>
+ <version>1.3</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.scm</groupId>
+ <artifactId>maven-scm-provider-svn-commons</artifactId>
+ <version>1.0-beta-3-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+</project>
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/pom.xml
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/SvnExeScmProvider.java
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/SvnExeScmProvider.java?rev=381077&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/SvnExeScmProvider.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/SvnExeScmProvider.java Sun Feb 26 03:16:52 2006
@@ -0,0 +1,85 @@
+package org.apache.maven.scm.provider.svn.svnexe;
+
+/*
+ * Copyright 2003-2005 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 java.util.List;
+
+import org.apache.maven.scm.provider.svn.AbstractSvnScmProvider;
+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.add.SvnAddCommand;
+import org.apache.maven.scm.provider.svn.svnexe.command.changelog.SvnChangeLogCommand;
+import org.apache.maven.scm.provider.svn.svnexe.command.checkin.SvnCheckInCommand;
+import org.apache.maven.scm.provider.svn.svnexe.command.checkout.SvnCheckOutCommand;
+import org.apache.maven.scm.provider.svn.svnexe.command.diff.SvnDiffCommand;
+import org.apache.maven.scm.provider.svn.svnexe.command.remove.SvnRemoveCommand;
+import org.apache.maven.scm.provider.svn.svnexe.command.status.SvnStatusCommand;
+import org.apache.maven.scm.provider.svn.svnexe.command.tag.SvnTagCommand;
+import org.apache.maven.scm.provider.svn.svnexe.command.update.SvnUpdateCommand;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id$
+ */
+public class SvnExeScmProvider
+ extends AbstractSvnScmProvider
+{
+ protected SvnCommand getAddCommand()
+ {
+ return new SvnAddCommand();
+ }
+
+ protected SvnCommand getChangeLogCommand()
+ {
+ return new SvnChangeLogCommand();
+ }
+
+ protected SvnCommand getCheckInCommand()
+ {
+ return new SvnCheckInCommand();
+ }
+
+ protected SvnCommand getCheckOutCommand()
+ {
+ return new SvnCheckOutCommand();
+ }
+
+ protected SvnCommand getDiffCommand()
+ {
+ return new SvnDiffCommand();
+ }
+
+ protected SvnCommand getRemoveCommand()
+ {
+ return new SvnRemoveCommand();
+ }
+
+ protected SvnCommand getStatusCommand()
+ {
+ return new SvnStatusCommand();
+ }
+
+ protected SvnCommand getTagCommand()
+ {
+ return new SvnTagCommand();
+ }
+
+ protected SvnCommand getUpdateCommand()
+ {
+ return new SvnUpdateCommand();
+ }
+}
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/SvnExeScmProvider.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/SvnExeScmProvider.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: 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/SvnCommandLineUtils.java
URL: http://svn.apache.org/viewcvs/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/SvnCommandLineUtils.java?rev=381077&view=auto
==============================================================================
--- 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/SvnCommandLineUtils.java (added)
+++ 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/SvnCommandLineUtils.java Sun Feb 26 03:16:52 2006
@@ -0,0 +1,131 @@
+package org.apache.maven.scm.provider.svn.svnexe.command;
+
+/*
+ * 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.log.ScmLogger;
+import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository;
+import org.apache.maven.scm.provider.svn.util.SvnUtil;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.cli.CommandLineException;
+import org.codehaus.plexus.util.cli.CommandLineUtils;
+import org.codehaus.plexus.util.cli.Commandline;
+import org.codehaus.plexus.util.cli.StreamConsumer;
+
+import java.io.File;
+
+/**
+ * Command line construction utility.
+ *
+ * @author Brett Porter
+ * @version $Id$
+ */
+public class SvnCommandLineUtils
+{
+ public static void addFiles( Commandline cl, File[] files )
+ {
+ for ( int i = 0; i < files.length; i++ )
+ {
+ cl.createArgument().setValue( files[i].getPath().replace( '\\', '/' ) );
+ }
+ }
+
+ public static Commandline getBaseSvnCommandLine( File workingDirectory, SvnScmProviderRepository repository )
+ {
+ Commandline cl = new Commandline();
+
+ cl.setExecutable( "svn" );
+
+ cl.setWorkingDirectory( workingDirectory.getAbsolutePath() );
+
+ if ( !StringUtils.isEmpty( System.getProperty( "maven.scm.svn.config_directory" ) ) )
+ {
+ cl.createArgument().setValue( "--config-dir" );
+ cl.createArgument().setValue( System.getProperty( "maven.scm.svn.config_directory" ) );
+ }
+ else if ( !StringUtils.isEmpty( SvnUtil.getSettings().getConfigDirectory() ) )
+ {
+ cl.createArgument().setValue( "--config-dir" );
+ cl.createArgument().setValue( SvnUtil.getSettings().getConfigDirectory() );
+ }
+
+ if ( !StringUtils.isEmpty( repository.getUser() ) )
+ {
+ cl.createArgument().setValue( "--username" );
+
+ cl.createArgument().setValue( repository.getUser() );
+ }
+
+ if ( !StringUtils.isEmpty( repository.getPassword() ) )
+ {
+ cl.createArgument().setValue( "--password" );
+
+ cl.createArgument().setValue( repository.getPassword() );
+ }
+
+ cl.createArgument().setValue( "--non-interactive" );
+
+ return cl;
+ }
+
+ public static int execute( Commandline cl, StreamConsumer consumer, CommandLineUtils.StringStreamConsumer stderr,
+ ScmLogger logger )
+ throws CommandLineException
+ {
+ int exitCode = CommandLineUtils.executeCommandLine( cl, consumer, stderr );
+
+ exitCode = checkIfCleanUpIsNeeded( exitCode, cl, consumer, stderr, logger );
+
+ return exitCode;
+ }
+
+ public static int execute( Commandline cl, CommandLineUtils.StringStreamConsumer stdout,
+ CommandLineUtils.StringStreamConsumer stderr, ScmLogger logger )
+ throws CommandLineException
+ {
+ int exitCode = CommandLineUtils.executeCommandLine( cl, stdout, stderr );
+
+ exitCode = checkIfCleanUpIsNeeded( exitCode, cl, stdout, stderr, logger );
+
+ return exitCode;
+ }
+
+ private static int checkIfCleanUpIsNeeded( int exitCode, Commandline cl, StreamConsumer consumer,
+ CommandLineUtils.StringStreamConsumer stderr, ScmLogger logger )
+ throws CommandLineException
+ {
+ if ( exitCode != 0 && stderr.getOutput() != null && stderr.getOutput().indexOf( "'svn cleanup'" ) > 0 &&
+ stderr.getOutput().indexOf( "'svn help cleanup'" ) > 0 )
+ {
+ logger.info( "Svn command failed due to some locks in working copy. We try to run a 'svn cleanup'." );
+
+ if ( executeCleanUp( cl.getWorkingDirectory(), consumer, stderr ) == 0 )
+ {
+ exitCode = CommandLineUtils.executeCommandLine( cl, consumer, stderr );
+ }
+ }
+ return exitCode;
+ }
+
+ public static int executeCleanUp( File workinDirectory, StreamConsumer stdout, StreamConsumer stderr )
+ throws CommandLineException
+ {
+ Commandline cl = new Commandline();
+ cl.setExecutable( "svn" );
+ cl.setWorkingDirectory( workinDirectory.getAbsolutePath() );
+ return CommandLineUtils.executeCommandLine( cl, stdout, stderr );
+ }
+}
Propchange: 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/SvnCommandLineUtils.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: 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/SvnCommandLineUtils.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: 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/add/SvnAddCommand.java
URL: http://svn.apache.org/viewcvs/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/add/SvnAddCommand.java?rev=381077&view=auto
==============================================================================
--- 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/add/SvnAddCommand.java (added)
+++ 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/add/SvnAddCommand.java Sun Feb 26 03:16:52 2006
@@ -0,0 +1,103 @@
+package org.apache.maven.scm.provider.svn.svnexe.command.add;
+
+/*
+ * 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.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmResult;
+import org.apache.maven.scm.command.add.AbstractAddCommand;
+import org.apache.maven.scm.command.add.AddScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.svn.command.SvnCommand;
+import org.apache.maven.scm.provider.svn.svnexe.command.SvnCommandLineUtils;
+import org.codehaus.plexus.util.cli.CommandLineException;
+import org.codehaus.plexus.util.cli.CommandLineUtils;
+import org.codehaus.plexus.util.cli.Commandline;
+
+import java.io.File;
+
+/**
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @version $Id$
+ */
+public class SvnAddCommand
+ extends AbstractAddCommand
+ implements SvnCommand
+{
+ protected ScmResult executeAddCommand( ScmProviderRepository repository, ScmFileSet fileSet, String message,
+ boolean binary )
+ throws ScmException
+ {
+ // TODO: could do this with propset?
+ if ( binary )
+ {
+ throw new ScmException( "This provider does not yet support binary files" );
+ }
+
+ if ( fileSet.getFiles().length == 0 )
+ {
+ throw new ScmException( "You must provide at least one file/directory to add" );
+ }
+
+ Commandline cl = createCommandLine( fileSet.getBasedir(), fileSet.getFiles() );
+
+ SvnAddConsumer consumer = new SvnAddConsumer( getLogger() );
+
+ CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
+
+ getLogger().info( "Working directory: " + fileSet.getBasedir().getAbsolutePath() );
+ getLogger().info( "Command line: " + cl );
+
+ int exitCode;
+
+ try
+ {
+ exitCode = SvnCommandLineUtils.execute( cl, consumer, stderr, getLogger() );
+ }
+ catch ( CommandLineException ex )
+ {
+ throw new ScmException( "Error while executing command.", ex );
+ }
+
+ if ( exitCode != 0 )
+ {
+ return new AddScmResult( cl.toString(), "The svn command failed.", stderr.getOutput(), false );
+ }
+
+ return new AddScmResult( cl.toString(), consumer.getAddedFiles() );
+ }
+
+ private static Commandline createCommandLine( File workingDirectory, File[] files )
+ {
+ // Base command line doesn't make sense here - username/password not needed, and non-interactive is not valid
+
+ Commandline cl = new Commandline();
+
+ cl.setExecutable( "svn" );
+
+ cl.setWorkingDirectory( workingDirectory.getAbsolutePath() );
+
+ cl.createArgument().setValue( "add" );
+
+ cl.createArgument().setValue( "--non-recursive" );
+
+ SvnCommandLineUtils.addFiles( cl, files );
+
+ return cl;
+ }
+
+}
Propchange: 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/add/SvnAddCommand.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: 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/add/SvnAddCommand.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: 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/add/SvnAddConsumer.java
URL: http://svn.apache.org/viewcvs/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/add/SvnAddConsumer.java?rev=381077&view=auto
==============================================================================
--- 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/add/SvnAddConsumer.java (added)
+++ 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/add/SvnAddConsumer.java Sun Feb 26 03:16:52 2006
@@ -0,0 +1,85 @@
+package org.apache.maven.scm.provider.svn.svnexe.command.add;
+
+/*
+ * 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.ScmFile;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.log.ScmLogger;
+import org.codehaus.plexus.util.cli.StreamConsumer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @version $Id$
+ */
+public class SvnAddConsumer
+ implements StreamConsumer
+{
+ private ScmLogger logger;
+
+ private List addedFiles = new ArrayList();
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ public SvnAddConsumer( ScmLogger logger )
+ {
+ this.logger = logger;
+ }
+
+ // ----------------------------------------------------------------------
+ // StreamConsumer Implementation
+ // ----------------------------------------------------------------------
+
+ public void consumeLine( String line )
+ {
+ if ( line.length() <= 3 )
+ {
+ logger.warn( "Unexpected input, the line must be at least three characters long. Line: '" + line + "'." );
+
+ return;
+ }
+
+ String statusString = line.substring( 0, 1 );
+
+ String file = line.substring( 3 );
+
+ ScmFileStatus status;
+
+ if ( statusString.equals( "A" ) )
+ {
+ status = ScmFileStatus.ADDED;
+ }
+ else
+ {
+ logger.info( "Unknown file status: '" + statusString + "'." );
+
+ return;
+ }
+
+ addedFiles.add( new ScmFile( file, status ) );
+ }
+
+ public List getAddedFiles()
+ {
+ return addedFiles;
+ }
+
+}
Propchange: 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/add/SvnAddConsumer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: 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/add/SvnAddConsumer.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: 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/changelog/SvnChangeLogCommand.java
URL: http://svn.apache.org/viewcvs/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/changelog/SvnChangeLogCommand.java?rev=381077&view=auto
==============================================================================
--- 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/changelog/SvnChangeLogCommand.java (added)
+++ 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/changelog/SvnChangeLogCommand.java Sun Feb 26 03:16:52 2006
@@ -0,0 +1,128 @@
+package org.apache.maven.scm.provider.svn.svnexe.command.changelog;
+
+/*
+ * 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.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.command.changelog.AbstractChangeLogCommand;
+import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
+import org.apache.maven.scm.command.changelog.ChangeLogSet;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.svn.SvnTagBranchUtils;
+import org.apache.maven.scm.provider.svn.command.SvnCommand;
+import org.apache.maven.scm.provider.svn.svnexe.command.SvnCommandLineUtils;
+import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository;
+import org.codehaus.plexus.util.cli.CommandLineException;
+import org.codehaus.plexus.util.cli.CommandLineUtils;
+import org.codehaus.plexus.util.cli.Commandline;
+
+import java.io.File;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.TimeZone;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id$
+ */
+public class SvnChangeLogCommand
+ extends AbstractChangeLogCommand
+ implements SvnCommand
+{
+ private final static String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss Z";
+
+ protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repo, ScmFileSet fileSet,
+ Date startDate, Date endDate, String branch,
+ String datePattern )
+ throws ScmException
+ {
+ Commandline cl =
+ createCommandLine( (SvnScmProviderRepository) repo, fileSet.getBasedir(), branch, startDate, endDate );
+
+ SvnChangeLogConsumer consumer = new SvnChangeLogConsumer( getLogger(), datePattern );
+
+ CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
+
+ getLogger().info( "Executing: " + cl );
+ getLogger().info( "Working directory: " + cl.getWorkingDirectory().getAbsolutePath() );
+
+ int exitCode;
+
+ try
+ {
+ exitCode = SvnCommandLineUtils.execute( cl, consumer, stderr, getLogger() );
+ }
+ catch ( CommandLineException ex )
+ {
+ throw new ScmException( "Error while executing svn command.", ex );
+ }
+
+ if ( exitCode != 0 )
+ {
+ return new ChangeLogScmResult( cl.toString(), "The svn command failed.", stderr.getOutput(), false );
+ }
+
+ return new ChangeLogScmResult( cl.toString(),
+ new ChangeLogSet( consumer.getModifications(), startDate, endDate ) );
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ public static Commandline createCommandLine( SvnScmProviderRepository repository, File workingDirectory,
+ String branch, Date startDate, Date endDate )
+ {
+ SimpleDateFormat dateFormat = new SimpleDateFormat( DATE_FORMAT );
+
+ dateFormat.setTimeZone( TimeZone.getTimeZone( "GMT" ) );
+
+ Commandline cl = SvnCommandLineUtils.getBaseSvnCommandLine( workingDirectory, repository );
+
+ cl.createArgument().setValue( "log" );
+
+ cl.createArgument().setValue( "-v" );
+
+ // TODO: May want to add some kind of support for --stop-on-copy and --limit NUM
+
+ if ( startDate != null )
+ {
+ cl.createArgument().setValue( "-r" );
+
+ if ( endDate != null )
+ {
+ cl.createArgument().setValue(
+ "{" + dateFormat.format( startDate ) + "}" + ":" + "{" + dateFormat.format( endDate ) + "}" );
+ }
+ else
+ {
+ cl.createArgument().setValue( "{" + dateFormat.format( startDate ) + "}:HEAD" );
+ }
+ }
+
+ if ( branch != null )
+ {
+ // By specifying a branch and this repository url below, subversion should show
+ // the changelog of that branch, but limit it to paths that also occur in this repository.
+ cl.createArgument().setValue( SvnTagBranchUtils.resolveBranchUrl( repository, branch ) );
+ }
+
+ cl.createArgument().setValue( repository.getUrl() );
+
+ return cl;
+ }
+}
Propchange: 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/changelog/SvnChangeLogCommand.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: 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/changelog/SvnChangeLogCommand.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: 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/changelog/SvnChangeLogConsumer.java
URL: http://svn.apache.org/viewcvs/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/changelog/SvnChangeLogConsumer.java?rev=381077&view=auto
==============================================================================
--- 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/changelog/SvnChangeLogConsumer.java (added)
+++ 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/changelog/SvnChangeLogConsumer.java Sun Feb 26 03:16:52 2006
@@ -0,0 +1,278 @@
+package org.apache.maven.scm.provider.svn.svnexe.command.changelog;
+
+/*
+ * 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.ChangeFile;
+import org.apache.maven.scm.log.ScmLogger;
+import org.apache.maven.scm.provider.svn.SvnChangeSet;
+import org.apache.maven.scm.util.AbstractConsumer;
+import org.apache.regexp.RE;
+import org.apache.regexp.RESyntaxException;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id$
+ */
+public class SvnChangeLogConsumer
+ extends AbstractConsumer
+{
+ /**
+ * Date formatter for svn timestamp (after a little massaging)
+ */
+ private static final String SVN_TIMESTAMP_PATTERN = "yyyy-MM-dd HH:mm:ss zzzzzzzzz";
+
+ /**
+ * State machine constant: expecting header
+ */
+ private static final int GET_HEADER = 1;
+
+ /**
+ * State machine constant: expecting file information
+ */
+ private static final int GET_FILE = 2;
+
+ /**
+ * State machine constant: expecting comments
+ */
+ private static final int GET_COMMENT = 3;
+
+ /**
+ * A file line begins with a space character
+ */
+ private static final String FILE_BEGIN_TOKEN = " ";
+
+ /**
+ * The file section ends with a blank line
+ */
+ private static final String FILE_END_TOKEN = "";
+
+ /**
+ * The filename starts after 5 characters
+ */
+ private static final int FILE_START_INDEX = 5;
+
+ /**
+ * The comment section ends with a dashed line
+ */
+ private static final String COMMENT_END_TOKEN =
+ "------------------------------------" + "------------------------------------";
+
+ /**
+ * The pattern used to match svn header lines
+ */
+ private static final String pattern = "^rev (\\d+):\\s+" + // revision number
+ "(\\w+)\\s+\\|\\s+" + // author username
+ "(\\d+-\\d+-\\d+ " + // date 2002-08-24
+ "\\d+:\\d+:\\d+) " + // time 16:01:00
+ "([\\-+])(\\d\\d)(\\d\\d)"; // gmt offset -0400
+
+ private static final String pattern2 = "^r(\\d+)\\s+\\|\\s+" + // revision number
+ "(\\(\\S+\\s+\\S+\\)|\\S+)\\s+\\|\\s+" + // author username
+ "(\\d+-\\d+-\\d+ " + // date 2002-08-24
+ "\\d+:\\d+:\\d+) " + // time 16:01:00
+ "([\\-+])(\\d\\d)(\\d\\d)"; // gmt offset -0400
+
+ /**
+ * Current status of the parser
+ */
+ private int status = GET_HEADER;
+
+ /**
+ * List of change log entries
+ */
+ private List entries = new ArrayList();
+
+ /**
+ * The current log entry being processed by the parser
+ */
+ private SvnChangeSet currentChange;
+
+ /**
+ * The current revision of the entry being processed by the parser
+ */
+ private String currentRevision;
+
+ /**
+ * The current comment of the entry being processed by the parser
+ */
+ private StringBuffer currentComment;
+
+ /**
+ * The regular expression used to match header lines
+ */
+ private RE headerRegexp;
+
+ private RE headerRegexp2;
+
+ private String userDateFormat;
+
+ /**
+ * Default constructor.
+ */
+ public SvnChangeLogConsumer( ScmLogger logger, String userDateFormat )
+ {
+ super( logger );
+
+ this.userDateFormat = userDateFormat;
+
+ try
+ {
+ headerRegexp = new RE( pattern );
+ headerRegexp2 = new RE( pattern2 );
+ }
+ catch ( RESyntaxException ex )
+ {
+ throw new RuntimeException(
+ "INTERNAL ERROR: Could not create regexp to parse svn log file. This shouldn't happen. Something is probably wrong with the oro installation.",
+ ex );
+ }
+ }
+
+ public List getModifications()
+ {
+ return entries;
+ }
+
+ // ----------------------------------------------------------------------
+ // StreamConsumer Implementation
+ // ----------------------------------------------------------------------
+
+ public void consumeLine( String line )
+ {
+ switch ( status )
+ {
+ case GET_HEADER:
+ processGetHeader( line );
+ break;
+ case GET_FILE:
+ processGetFile( line );
+ break;
+ case GET_COMMENT:
+ processGetComment( line );
+ break;
+ default:
+ throw new IllegalStateException( "Unknown state: " + status );
+ }
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ /**
+ * Process the current input line in the GET_HEADER state. The
+ * author, date, and the revision of the entry are gathered. Note,
+ * Subversion does not have per-file revisions, instead, the entire
+ * repository is given a single revision number, which is used for
+ * the revision number of each file.
+ *
+ * @param line A line of text from the svn log output
+ */
+ private void processGetHeader( String line )
+ {
+ if ( !headerRegexp.match( line ) )
+ {
+ if ( !headerRegexp2.match( line ) )
+ {
+ return;
+ }
+ else
+ {
+ headerRegexp = headerRegexp2;
+ }
+ }
+
+ currentRevision = headerRegexp.getParen( 1 );
+
+ currentChange = new SvnChangeSet();
+
+ currentChange.setAuthor( headerRegexp.getParen( 2 ) );
+
+ currentChange.setDate( parseDate() );
+
+ status = GET_FILE;
+ }
+
+ /**
+ * Process the current input line in the GET_FILE state. This state
+ * adds each file entry line to the current change log entry. Note,
+ * the revision number for the entire entry is used for the revision
+ * number of each file.
+ *
+ * @param line A line of text from the svn log output
+ */
+ private void processGetFile( String line )
+ {
+ if ( line.startsWith( FILE_BEGIN_TOKEN ) )
+ {
+ // Skip the status flags and just get the name of the file
+ String name = line.substring( FILE_START_INDEX );
+ currentChange.addFile( new ChangeFile( name, currentRevision ) );
+
+ status = GET_FILE;
+ }
+ else if ( line.equals( FILE_END_TOKEN ) )
+ {
+ // Create a buffer for the collection of the comment now
+ // that we are leaving the GET_FILE state.
+ currentComment = new StringBuffer();
+
+ status = GET_COMMENT;
+ }
+ }
+
+ /**
+ * Process the current input line in the GET_COMMENT state. This
+ * state gathers all of the comments that are part of a log entry.
+ *
+ * @param line a line of text from the svn log output
+ */
+ private void processGetComment( String line )
+ {
+ if ( line.equals( COMMENT_END_TOKEN ) )
+ {
+ currentChange.setComment( currentComment.toString() );
+
+ entries.add( currentChange );
+
+ status = GET_HEADER;
+ }
+ else
+ {
+ currentComment.append( line ).append( '\n' );
+ }
+ }
+
+ /**
+ * Converts the date timestamp from the svn output into a date
+ * object.
+ *
+ * @return A date representing the timestamp of the log entry.
+ */
+ private Date parseDate()
+ {
+ StringBuffer date = new StringBuffer().append( headerRegexp.getParen( 3 ) ).append( " GMT" )
+ .append( headerRegexp.getParen( 4 ) ).append( headerRegexp.getParen( 5 ) ).append( ':' )
+ .append( headerRegexp.getParen( 6 ) );
+
+ return parseDate( date.toString(), userDateFormat, SVN_TIMESTAMP_PATTERN );
+ }
+}
Propchange: 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/changelog/SvnChangeLogConsumer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: 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/changelog/SvnChangeLogConsumer.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: 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/checkin/SvnCheckInCommand.java
URL: http://svn.apache.org/viewcvs/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/checkin/SvnCheckInCommand.java?rev=381077&view=auto
==============================================================================
--- 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/checkin/SvnCheckInCommand.java (added)
+++ 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/checkin/SvnCheckInCommand.java Sun Feb 26 03:16:52 2006
@@ -0,0 +1,123 @@
+package org.apache.maven.scm.provider.svn.svnexe.command.checkin;
+
+/*
+ * 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.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.command.checkin.AbstractCheckInCommand;
+import org.apache.maven.scm.command.checkin.CheckInScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.svn.command.SvnCommand;
+import org.apache.maven.scm.provider.svn.svnexe.command.SvnCommandLineUtils;
+import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.cli.CommandLineException;
+import org.codehaus.plexus.util.cli.CommandLineUtils;
+import org.codehaus.plexus.util.cli.Commandline;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * @author <a href="mailto:trygvis@inamo.no">Trygve Laugstøl</a>
+ * @version $Id$
+ */
+public class SvnCheckInCommand
+ extends AbstractCheckInCommand
+ implements SvnCommand
+{
+ protected CheckInScmResult executeCheckInCommand( ScmProviderRepository repo, ScmFileSet fileSet, String message,
+ String tag )
+ throws ScmException
+ {
+ if ( !StringUtils.isEmpty( tag ) )
+ {
+ throw new ScmException( "This provider can't handle tags." );
+ }
+
+ File messageFile = FileUtils.createTempFile( "maven-scm-", ".commit", null );
+
+ try
+ {
+ FileUtils.fileWrite( messageFile.getAbsolutePath(), message );
+ }
+ catch ( IOException ex )
+ {
+ return new CheckInScmResult( null, "Error while making a temporary file for the commit message: " +
+ ex.getMessage(), null, false );
+ }
+
+ Commandline cl = createCommandLine( (SvnScmProviderRepository) repo, fileSet, messageFile );
+
+ SvnCheckInConsumer consumer = new SvnCheckInConsumer( getLogger(), fileSet.getBasedir() );
+
+ CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
+
+ getLogger().info( "Working directory: " + fileSet.getBasedir().getAbsolutePath() );
+ getLogger().info( "Command line: " + cl );
+
+ int exitCode;
+
+ try
+ {
+ exitCode = SvnCommandLineUtils.execute( cl, consumer, stderr, getLogger() );
+ }
+ catch ( CommandLineException ex )
+ {
+ throw new ScmException( "Error while executing command.", ex );
+ }
+ finally
+ {
+ try
+ {
+ FileUtils.forceDelete( messageFile );
+ }
+ catch ( IOException ex )
+ {
+ // ignore
+ }
+ }
+
+ if ( exitCode != 0 )
+ {
+ return new CheckInScmResult( cl.toString(), "The svn command failed.", stderr.getOutput(), false );
+ }
+
+ return new CheckInScmResult( cl.toString(), consumer.getCheckedInFiles() );
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ public static Commandline createCommandLine( SvnScmProviderRepository repository, ScmFileSet fileSet,
+ File messageFile )
+ {
+ Commandline cl = SvnCommandLineUtils.getBaseSvnCommandLine( fileSet.getBasedir(), repository );
+
+ cl.createArgument().setValue( "commit" );
+
+ cl.createArgument().setValue( "--file" );
+
+ cl.createArgument().setValue( messageFile.getAbsolutePath() );
+
+ SvnCommandLineUtils.addFiles( cl, fileSet.getFiles() );
+
+ return cl;
+ }
+}
Propchange: 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/checkin/SvnCheckInCommand.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: 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/checkin/SvnCheckInCommand.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: 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/checkin/SvnCheckInConsumer.java
URL: http://svn.apache.org/viewcvs/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/checkin/SvnCheckInConsumer.java?rev=381077&view=auto
==============================================================================
--- 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/checkin/SvnCheckInConsumer.java (added)
+++ 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/checkin/SvnCheckInConsumer.java Sun Feb 26 03:16:52 2006
@@ -0,0 +1,141 @@
+package org.apache.maven.scm.provider.svn.svnexe.command.checkin;
+
+/*
+ * 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.ScmFile;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.log.ScmLogger;
+import org.codehaus.plexus.util.cli.StreamConsumer;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author <a href="mailto:trygvis@inamo.no">Trygve Laugstøl</a>
+ * @version $Id$
+ */
+public class SvnCheckInConsumer
+ implements StreamConsumer
+{
+ private final static String SENDING_TOKEN = "Sending ";
+
+ private final static String ADDING_TOKEN = "Adding ";
+
+ private final static String TRANSMITTING_TOKEN = "Transmitting file data";
+
+ private final static String COMMITTED_REVISION_TOKEN = "Committed revision";
+
+ private ScmLogger logger;
+
+ private File workingDirectory;
+
+ private List checkedInFiles = new ArrayList();
+
+ private int revision;
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ public SvnCheckInConsumer( ScmLogger logger, File workingDirectory )
+ {
+ this.logger = logger;
+
+ this.workingDirectory = workingDirectory;
+ }
+
+ // ----------------------------------------------------------------------
+ // StreamConsumer Implementation
+ // ----------------------------------------------------------------------
+
+ public void consumeLine( String line )
+ {
+ logger.debug( line );
+
+ if ( line.length() <= 3 )
+ {
+ logger.warn( "Unexpected input, the line must be at least three characters long. Line: '" + line + "'." );
+
+ return;
+ }
+
+ String file;
+
+ if ( line.startsWith( COMMITTED_REVISION_TOKEN ) )
+ {
+ String revisionString = line.substring( COMMITTED_REVISION_TOKEN.length() + 1, line.length() - 1 );
+
+ revision = parseInt( revisionString );
+
+ return;
+ }
+ else if ( line.startsWith( SENDING_TOKEN ) )
+ {
+ file = line.substring( SENDING_TOKEN.length() );
+ }
+ else if ( line.startsWith( ADDING_TOKEN ) )
+ {
+ file = line.substring( ADDING_TOKEN.length() );
+ }
+ else if ( line.startsWith( TRANSMITTING_TOKEN ) )
+ {
+ // ignore
+ return;
+ }
+ else
+ {
+ logger.info( "Unknown line: '" + line + "'" );
+
+ return;
+ }
+
+ // If the file isn't a file; don't add it.
+ if ( !new File( workingDirectory, file ).isFile() )
+ {
+ return;
+ }
+
+ checkedInFiles.add( new ScmFile( file, ScmFileStatus.CHECKED_IN ) );
+ }
+
+ public List getCheckedInFiles()
+ {
+ return checkedInFiles;
+ }
+
+ public int getRevision()
+ {
+ return revision;
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ private int parseInt( String revisionString )
+ {
+ try
+ {
+ return Integer.parseInt( revisionString );
+ }
+ catch ( NumberFormatException ex )
+ {
+ return 0;
+ }
+ }
+}
Propchange: 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/checkin/SvnCheckInConsumer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: 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/checkin/SvnCheckInConsumer.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: 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/viewcvs/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?rev=381077&view=auto
==============================================================================
--- 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 (added)
+++ 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 Feb 26 03:16:52 2006
@@ -0,0 +1,106 @@
+package org.apache.maven.scm.provider.svn.svnexe.command.checkout;
+
+/*
+ * 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.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.command.checkout.AbstractCheckOutCommand;
+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.command.SvnCommand;
+import org.apache.maven.scm.provider.svn.svnexe.command.SvnCommandLineUtils;
+import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository;
+import org.codehaus.plexus.util.cli.CommandLineException;
+import org.codehaus.plexus.util.cli.CommandLineUtils;
+import org.codehaus.plexus.util.cli.Commandline;
+
+import java.io.File;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id$
+ */
+public class SvnCheckOutCommand
+ extends AbstractCheckOutCommand
+ implements SvnCommand
+{
+ protected CheckOutScmResult executeCheckOutCommand( ScmProviderRepository repo, ScmFileSet fileSet, String tag )
+ throws ScmException
+ {
+ SvnScmProviderRepository repository = (SvnScmProviderRepository) repo;
+
+ String url = repository.getUrl();
+ if ( tag != null )
+ {
+ url = SvnTagBranchUtils.resolveTagUrl( repository, tag );
+ }
+
+ // TODO: revision
+ Commandline cl = createCommandLine( repository, fileSet.getBasedir(), null, url );
+
+ SvnCheckOutConsumer consumer = new SvnCheckOutConsumer( getLogger(), fileSet.getBasedir().getParentFile() );
+
+ CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
+
+ int exitCode;
+
+ getLogger().info( "Working directory: " + fileSet.getBasedir().getAbsolutePath() );
+ getLogger().info( "Command line: " + cl );
+
+ try
+ {
+ exitCode = SvnCommandLineUtils.execute( cl, consumer, stderr, getLogger() );
+ }
+ catch ( CommandLineException ex )
+ {
+ throw new ScmException( "Error while executing command.", ex );
+ }
+
+ if ( exitCode != 0 )
+ {
+ return new CheckOutScmResult( cl.toString(), "The svn command failed.", stderr.getOutput(), false );
+ }
+
+ return new CheckOutScmResult( cl.toString(), consumer.getCheckedOutFiles() );
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ public static Commandline createCommandLine( SvnScmProviderRepository repository, File workingDirectory,
+ String revision, String url )
+ {
+ Commandline cl = SvnCommandLineUtils.getBaseSvnCommandLine( workingDirectory.getParentFile(), repository );
+
+ cl.createArgument().setValue( "checkout" );
+
+ if ( revision != null )
+ {
+ cl.createArgument().setValue( "-r" );
+
+ cl.createArgument().setValue( revision );
+ }
+
+ cl.createArgument().setValue( url );
+
+ cl.createArgument().setValue( workingDirectory.getName() );
+
+ return cl;
+ }
+}
Propchange: 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
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: 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
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: 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/SvnCheckOutConsumer.java
URL: http://svn.apache.org/viewcvs/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/SvnCheckOutConsumer.java?rev=381077&view=auto
==============================================================================
--- 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/SvnCheckOutConsumer.java (added)
+++ 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/SvnCheckOutConsumer.java Sun Feb 26 03:16:52 2006
@@ -0,0 +1,126 @@
+package org.apache.maven.scm.provider.svn.svnexe.command.checkout;
+
+/*
+ * 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.ScmFile;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.log.ScmLogger;
+import org.codehaus.plexus.util.cli.StreamConsumer;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author <a href="mailto:trygvis@inamo.no">Trygve Laugstøl</a>
+ * @version $Id$
+ */
+public class SvnCheckOutConsumer
+ implements StreamConsumer
+{
+ private final static String CHECKED_OUT_REVISION_TOKEN = "Checked out revision";
+
+ private ScmLogger logger;
+
+ private File workingDirectory;
+
+ private List checkedOutFiles = new ArrayList();
+
+ private int revision;
+
+ public SvnCheckOutConsumer( ScmLogger logger, File workingDirectory )
+ {
+ this.logger = logger;
+
+ this.workingDirectory = workingDirectory;
+ }
+
+ // ----------------------------------------------------------------------
+ // StreamConsumer Implementation
+ // ----------------------------------------------------------------------
+
+ public void consumeLine( String line )
+ {
+ logger.debug( line );
+
+ if ( line.length() <= 3 )
+ {
+ logger.warn( "Unexpected input, the line must be at least three characters long. Line: '" + line + "'." );
+
+ return;
+ }
+
+ String statusString = line.substring( 0, 1 );
+
+ String file = line.substring( 3 ).trim();
+
+ ScmFileStatus status;
+
+ if ( line.startsWith( CHECKED_OUT_REVISION_TOKEN ) )
+ {
+ String revisionString = line.substring( CHECKED_OUT_REVISION_TOKEN.length() + 1, line.length() - 1 );
+
+ try
+ {
+ revision = Integer.parseInt( revisionString );
+ }
+ catch ( NumberFormatException ex )
+ {
+ // ignored
+ }
+
+ return;
+ }
+ else if ( statusString.equals( "A" ) )
+ {
+ status = ScmFileStatus.ADDED;
+ }
+ else if ( statusString.equals( "U" ) )
+ {
+ status = ScmFileStatus.UPDATED;
+ }
+ else
+ {
+ logger.info( "Unknown file status: '" + statusString + "'." );
+
+ return;
+ }
+
+ // If the file isn't a file; don't add it.
+ if ( !new File( workingDirectory, file ).isFile() )
+ {
+ logger.debug( "Skipping non-file: " + file );
+ return;
+ }
+
+ checkedOutFiles.add( new ScmFile( file, status ) );
+ }
+
+ // ----------------------------------------------------------------------
+ //
+ // ----------------------------------------------------------------------
+
+ public List getCheckedOutFiles()
+ {
+ return checkedOutFiles;
+ }
+
+ public int getRevision()
+ {
+ return revision;
+ }
+}
Propchange: 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/SvnCheckOutConsumer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: 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/SvnCheckOutConsumer.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"