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 br...@apache.org on 2005/01/04 10:44:33 UTC
cvs commit: maven-scm/maven-scm-providers/maven-scm-provider-svn/src/test/java/org/apache/maven/scm/provider/svn/command/tag SvnTagCommandTckTest.java
brett 2005/01/04 01:44:33
Modified: maven-scm-api/src/main/java/org/apache/maven/scm/manager
ScmManager.java
maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/tag
TagCommandTckTest.java
maven-scm-providers/maven-scm-provider-svn/src/main/java/org/apache/maven/scm/provider/svn/command/checkout
SvnCheckOutCommand.java
maven-scm-providers/maven-scm-provider-svn/src/main/java/org/apache/maven/scm/provider/svn/repository
SvnScmProviderRepository.java
maven-scm-providers/maven-scm-provider-svn/src/main/resources/META-INF/plexus
components.xml
maven-scm-providers/maven-scm-provider-svn/src/test/java/org/apache/maven/scm/provider/svn/command/checkout
SvnCheckOutCommandTest.java
Added: maven-scm-providers/maven-scm-provider-svn/src/main/java/org/apache/maven/scm/provider/svn/command/tag
SvnTagCommand.java
maven-scm-providers/maven-scm-provider-svn/src/test/java/org/apache/maven/scm/provider/svn/command/tag
SvnTagCommandTckTest.java
Log:
complete tag test for svn
Revision Changes Path
1.7 +3 -2 maven-scm/maven-scm-api/src/main/java/org/apache/maven/scm/manager/ScmManager.java
Index: ScmManager.java
===================================================================
RCS file: /home/cvs/maven-scm/maven-scm-api/src/main/java/org/apache/maven/scm/manager/ScmManager.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- ScmManager.java 30 Dec 2004 05:50:36 -0000 1.6
+++ ScmManager.java 4 Jan 2005 09:44:32 -0000 1.7
@@ -18,12 +18,12 @@
import org.apache.maven.scm.ScmException;
import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.command.add.AddScmResult;
import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
import org.apache.maven.scm.command.checkin.CheckInScmResult;
import org.apache.maven.scm.command.checkout.CheckOutScmResult;
import org.apache.maven.scm.command.tag.TagScmResult;
import org.apache.maven.scm.command.update.UpdateScmResult;
-import org.apache.maven.scm.command.add.AddScmResult;
import org.apache.maven.scm.repository.ScmRepository;
import org.apache.maven.scm.repository.ScmRepositoryException;
@@ -48,6 +48,7 @@
// Scm Commands
// ----------------------------------------------------------------------
+ // TODO: not honouring includes/excludes, so replace fileSet with working directory again
CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet, String tag )
throws ScmException;
1.2 +8 -2 maven-scm/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/tag/TagCommandTckTest.java
Index: TagCommandTckTest.java
===================================================================
RCS file: /home/cvs/maven-scm/maven-scm-test/src/main/java/org/apache/maven/scm/tck/command/tag/TagCommandTckTest.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- TagCommandTckTest.java 3 Jan 2005 05:10:12 -0000 1.1
+++ TagCommandTckTest.java 4 Jan 2005 09:44:32 -0000 1.2
@@ -117,7 +117,7 @@
{
ScmManager scmManager = getScmManager();
- ScmRepository repository = scmManager.makeScmRepository( getScmUrl() );
+ ScmRepository repository = getScmRepository( scmManager );
CheckOutScmResult checkoutResult = scmManager.checkOut( repository, new ScmFileSet( workingDirectory ), null );
@@ -160,6 +160,12 @@
assertEquals( "check readme.txt contents is from tagged version", "/readme.txt",
FileUtils.fileRead( readmeTxt ) );
+ }
+
+ protected ScmRepository getScmRepository( ScmManager scmManager )
+ throws Exception
+ {
+ return scmManager.makeScmRepository( getScmUrl() );
}
private void changeReadmeTxt( File readmeTxt )
1.6 +22 -6 maven-scm/maven-scm-providers/maven-scm-provider-svn/src/main/java/org/apache/maven/scm/provider/svn/command/checkout/SvnCheckOutCommand.java
Index: SvnCheckOutCommand.java
===================================================================
RCS file: /home/cvs/maven-scm/maven-scm-providers/maven-scm-provider-svn/src/main/java/org/apache/maven/scm/provider/svn/command/checkout/SvnCheckOutCommand.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- SvnCheckOutCommand.java 24 Dec 2004 03:04:47 -0000 1.5
+++ SvnCheckOutCommand.java 4 Jan 2005 09:44:32 -0000 1.6
@@ -40,7 +40,22 @@
protected CheckOutScmResult executeCheckOutCommand( ScmProviderRepository repo, ScmFileSet fileSet, String tag )
throws ScmException
{
- Commandline cl = createCommandLine( (SvnScmProviderRepository)repo, fileSet.getBasedir(), tag );
+ SvnScmProviderRepository repository = (SvnScmProviderRepository) repo;
+
+ String url = repository.getUrl();
+ if ( tag != null )
+ {
+ String tagBase = repository.getTagBase();
+
+ if ( tagBase == null )
+ {
+ throw new ScmException( "tag base must be specified" );
+ }
+ url = tagBase + "/" + tag;
+ }
+
+ // TODO: revision
+ Commandline cl = createCommandLine( repository, fileSet.getBasedir(), null, url );
SvnCheckOutConsumer consumer = new SvnCheckOutConsumer( getLogger(), fileSet.getBasedir().getParentFile() );
@@ -72,7 +87,8 @@
//
// ----------------------------------------------------------------------
- public static Commandline createCommandLine( SvnScmProviderRepository repository, File workingDirectory, String tag )
+ public static Commandline createCommandLine( SvnScmProviderRepository repository, File workingDirectory,
+ String revision, String url )
{
Commandline cl = new Commandline();
@@ -84,11 +100,11 @@
cl.createArgument().setValue( "--non-interactive" );
- if ( tag != null)
+ if ( revision != null)
{
cl.createArgument().setValue( "-r" );
- cl.createArgument().setValue( tag );
+ cl.createArgument().setValue( revision );
}
if ( repository.getUser() != null )
@@ -105,7 +121,7 @@
cl.createArgument().setValue( repository.getPassword() );
}
- cl.createArgument().setValue( repository.getUrl() );
+ cl.createArgument().setValue( url );
cl.createArgument().setValue( workingDirectory.getName() );
1.1 maven-scm/maven-scm-providers/maven-scm-provider-svn/src/main/java/org/apache/maven/scm/provider/svn/command/tag/SvnTagCommand.java
Index: SvnTagCommand.java
===================================================================
package org.apache.maven.scm.provider.svn.command.tag;
/*
* Copyright 2001-2004 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.ScmFile;
import org.apache.maven.scm.ScmFileSet;
import org.apache.maven.scm.ScmFileStatus;
import org.apache.maven.scm.ScmResult;
import org.apache.maven.scm.command.tag.AbstractTagCommand;
import org.apache.maven.scm.command.tag.TagScmResult;
import org.apache.maven.scm.provider.ScmProviderRepository;
import org.apache.maven.scm.provider.svn.command.SvnCommand;
import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository;
import org.codehaus.plexus.util.FileUtils;
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;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
* @version $Id: SvnTagCommand.java,v 1.1 2005/01/04 09:44:32 brett Exp $
* @todo since this is just a copy, use that instead.
*/
public class SvnTagCommand extends AbstractTagCommand implements SvnCommand
{
public ScmResult executeTagCommand( ScmProviderRepository repo, ScmFileSet fileSet, String tag )
throws ScmException
{
if ( tag == null )
{
throw new ScmException( "tag must be specified" );
}
if ( fileSet.getFiles().length != 0 )
{
throw new ScmException( "This provider doesn't support tagging subsets of a directory" );
}
SvnScmProviderRepository repository = (SvnScmProviderRepository) repo;
String tagBase = repository.getTagBase();
if ( tagBase == null )
{
throw new ScmException( "tag base must be specified" );
}
File messageFile = FileUtils.createTempFile( "maven-scm-", ".commit", null );
try
{
// TODO: should message be customisable?
FileUtils.fileWrite( messageFile.getAbsolutePath(), "copy for tag " + tag );
}
catch ( IOException ex )
{
return new TagScmResult(
"Error while making a temporary file for the commit message: " + ex.getMessage(), null, false );
}
Commandline cl = createCommandLine( repository, fileSet.getBasedir(), tagBase,
tag, messageFile );
CommandLineUtils.StringStreamConsumer stdout = new CommandLineUtils.StringStreamConsumer();
CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
getLogger().info( "Working directory: " + fileSet.getBasedir().getAbsolutePath() );
getLogger().info( "Command line: " + cl );
int exitCode;
try
{
exitCode = CommandLineUtils.executeCommandLine( cl, stdout, stderr );
}
catch ( CommandLineException ex )
{
throw new ScmException( "Error while executing command.", ex );
}
if ( exitCode != 0 )
{
// TODO: Improve this error message
return new TagScmResult( "The svn tag command failed.", stderr.getOutput(), false );
}
List fileList = new ArrayList();
List files = null;
try
{
files = FileUtils.getFiles( fileSet.getBasedir(), "**", "**/.svn/**", false );
}
catch ( IOException e )
{
throw new ScmException( "Error while executing command.", e );
}
for ( Iterator i = files.iterator(); i.hasNext(); )
{
File f = (File) i.next();
fileList.add( new ScmFile( f.getPath(), ScmFileStatus.TAGGED ) );
}
return new TagScmResult( fileList );
}
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
private static Commandline createCommandLine( SvnScmProviderRepository repository, File workingDirectory,
String tagBase, String tag, File messageFile )
{
Commandline cl = new Commandline();
cl.setExecutable( "svn" );
cl.setWorkingDirectory( workingDirectory.getAbsolutePath() );
cl.createArgument().setValue( "copy" );
cl.createArgument().setValue( "--non-interactive" );
if ( repository.getUser() != null )
{
cl.createArgument().setValue( "--username" );
cl.createArgument().setValue( repository.getUser() );
}
if ( repository.getPassword() != null )
{
cl.createArgument().setValue( "--password" );
cl.createArgument().setValue( repository.getPassword() );
}
cl.createArgument().setValue( "--file" );
cl.createArgument().setValue( messageFile.getAbsolutePath() );
cl.createArgument().setValue( "." );
// Note: this currently assumes you have the tag base checked out too
cl.createArgument().setValue( tagBase + "/" + tag );
return cl;
}
}
1.3 +22 -6 maven-scm/maven-scm-providers/maven-scm-provider-svn/src/main/java/org/apache/maven/scm/provider/svn/repository/SvnScmProviderRepository.java
Index: SvnScmProviderRepository.java
===================================================================
RCS file: /home/cvs/maven-scm/maven-scm-providers/maven-scm-provider-svn/src/main/java/org/apache/maven/scm/provider/svn/repository/SvnScmProviderRepository.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- SvnScmProviderRepository.java 20 Dec 2004 17:56:19 -0000 1.2
+++ SvnScmProviderRepository.java 4 Jan 2005 09:44:32 -0000 1.3
@@ -22,22 +22,28 @@
* @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
* @version $Id$
*/
-public class SvnScmProviderRepository
- extends ScmProviderRepository
+public class SvnScmProviderRepository extends ScmProviderRepository
{
/** */
- private String url;
+ private final String url;
/** */
- private String user;
+ private final String user;
/** */
- private String password;
+ private final String password;
+
+ /**
+ * The base directory for any tags, relative to the URL given. Default is <code>../tags</code>.
+ */
+ private String tagBase;
public SvnScmProviderRepository( String url, String user, String password )
{
this.url = url;
+ this.tagBase = url.substring( 0, url.lastIndexOf( '/' ) ) + "/tags";
+
this.user = user;
this.password = password;
@@ -61,5 +67,15 @@
public String getModule()
{
return deriveModuleFromUrl( url );
+ }
+
+ public String getTagBase()
+ {
+ return tagBase;
+ }
+
+ public void setTagBase( String tagBase )
+ {
+ this.tagBase = tagBase;
}
}
1.5 +6 -0 maven-scm/maven-scm-providers/maven-scm-provider-svn/src/main/resources/META-INF/plexus/components.xml
Index: components.xml
===================================================================
RCS file: /home/cvs/maven-scm/maven-scm-providers/maven-scm-provider-svn/src/main/resources/META-INF/plexus/components.xml,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- components.xml 30 Dec 2004 10:05:29 -0000 1.4
+++ components.xml 4 Jan 2005 09:44:32 -0000 1.5
@@ -33,6 +33,12 @@
<component>
<role>org.apache.maven.scm.provider.svn.command.SvnCommand</role>
+ <role-hint>tag</role-hint>
+ <implementation>org.apache.maven.scm.provider.svn.command.tag.SvnTagCommand</implementation>
+ </component>
+
+ <component>
+ <role>org.apache.maven.scm.provider.svn.command.SvnCommand</role>
<role-hint>update</role-hint>
<implementation>org.apache.maven.scm.provider.svn.command.update.SvnUpdateCommand</implementation>
</component>
1.7 +6 -6 maven-scm/maven-scm-providers/maven-scm-provider-svn/src/test/java/org/apache/maven/scm/provider/svn/command/checkout/SvnCheckOutCommandTest.java
Index: SvnCheckOutCommandTest.java
===================================================================
RCS file: /home/cvs/maven-scm/maven-scm-providers/maven-scm-provider-svn/src/test/java/org/apache/maven/scm/provider/svn/command/checkout/SvnCheckOutCommandTest.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- SvnCheckOutCommandTest.java 30 Dec 2004 03:40:45 -0000 1.6
+++ SvnCheckOutCommandTest.java 4 Jan 2005 09:44:32 -0000 1.7
@@ -49,21 +49,21 @@
//
// ----------------------------------------------------------------------
- public void testCommandLineWithoutTag()
+ public void testCommandLineWithoutRevision()
throws Exception
{
testCommandLine( getScmManager(), "scm:svn:http://foo.com/svn/trunk", null,
"svn checkout --non-interactive http://foo.com/svn/trunk " + workingDirectory.getName() );
}
- public void testCommandLineWithEmptyTag()
+ public void testCommandLineWithEmptyRevision()
throws Exception
{
testCommandLine( getScmManager(), "scm:svn:http://foo.com/svn/trunk", "",
"svn checkout --non-interactive -r http://foo.com/svn/trunk " + workingDirectory.getName() );
}
- public void testCommandLineWithTag()
+ public void testCommandLineWithRevision()
throws Exception
{
testCommandLine( getScmManager(), "scm:svn:http://foo.com/svn/trunk", "10",
@@ -74,14 +74,14 @@
//
// ----------------------------------------------------------------------
- private void testCommandLine( ScmManager scmManager, String scmUrl, String tag, String commandLine )
+ private void testCommandLine( ScmManager scmManager, String scmUrl, String revision, String commandLine )
throws Exception
{
ScmRepository repository = scmManager.makeScmRepository( scmUrl );
SvnScmProviderRepository svnRepository = (SvnScmProviderRepository) repository.getProviderRepository();
- Commandline cl = SvnCheckOutCommand.createCommandLine( svnRepository, workingDirectory, tag );
+ Commandline cl = SvnCheckOutCommand.createCommandLine( svnRepository, workingDirectory, revision, svnRepository.getUrl() );
assertEquals( commandLine, cl.toString() );
}
1.1 maven-scm/maven-scm-providers/maven-scm-provider-svn/src/test/java/org/apache/maven/scm/provider/svn/command/tag/SvnTagCommandTckTest.java
Index: SvnTagCommandTckTest.java
===================================================================
package org.apache.maven.scm.provider.svn.command.tag;
/*
* Copyright 2003-2004 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.manager.ScmManager;
import org.apache.maven.scm.provider.svn.SvnScmTestUtils;
import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository;
import org.apache.maven.scm.repository.ScmRepository;
import org.apache.maven.scm.tck.command.tag.TagCommandTckTest;
import java.io.File;
/**
* This test tests the tag command.
*
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
* @version $Id: SvnTagCommandTckTest.java,v 1.1 2005/01/04 09:44:32 brett Exp $
*/
public class SvnTagCommandTckTest extends TagCommandTckTest
{
public String getScmUrl()
throws Exception
{
return SvnScmTestUtils.getScmUrl( new File( getRepositoryRoot(), "trunk" ) );
}
protected ScmRepository getScmRepository( ScmManager scmManager )
throws Exception
{
ScmRepository repo = super.getScmRepository( scmManager );
SvnScmProviderRepository repository = (SvnScmProviderRepository) repo.getProviderRepository();
repository.setTagBase( SvnScmTestUtils.getScmUrl( new File( getRepositoryRoot(), "tags" ) ).substring( "scm:svn:".length() ) );
return repo;
}
public void initRepo()
throws Exception
{
SvnScmTestUtils.initializeRepository( getRepositoryRoot(), getTestFile( "src/test/resources/tck/tck.dump" ) );
}
}