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" ) );
      }
  }