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 2007/03/20 16:48:16 UTC

svn commit: r520441 - in /maven/scm/trunk: maven-scm-api/src/main/java/org/apache/maven/scm/ maven-scm-api/src/main/java/org/apache/maven/scm/command/export/ maven-scm-api/src/main/java/org/apache/maven/scm/provider/ maven-scm-plugin/src/main/java/org/...

Author: evenisse
Date: Tue Mar 20 08:48:14 2007
New Revision: 520441

URL: http://svn.apache.org/viewvc?view=rev&rev=520441
Log:
[SCM-210] Add export mechanism for svn and cvs and export mojo

Added:
    maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/export/
    maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/export/AbstractExportCommand.java   (with props)
    maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/export/ExportScmResult.java   (with props)
    maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/export/ExportScmResultWithRevision.java   (with props)
    maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/ExportMojo.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/export/
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/export/AbstractCvsExportCommand.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/src/main/java/org/apache/maven/scm/provider/cvslib/cvsexe/command/export/
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/src/main/java/org/apache/maven/scm/provider/cvslib/cvsexe/command/export/CvsExeExportCommand.java   (with props)
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsjava/src/main/java/org/apache/maven/scm/provider/cvslib/cvsjava/command/export/
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsjava/src/main/java/org/apache/maven/scm/provider/cvslib/cvsjava/command/export/CvsJavaExportCommand.java   (with props)
    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/export/
    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/export/SvnExeExportCommand.java   (with props)
Modified:
    maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/CommandParameter.java
    maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java
    maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProvider.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/AbstractCvsScmProvider.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/src/main/java/org/apache/maven/scm/provider/cvslib/cvsexe/CvsExeScmProvider.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsjava/src/main/java/org/apache/maven/scm/provider/cvslib/cvsjava/CvsJavaScmProvider.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/AbstractSvnScmProvider.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/SvnExeScmProvider.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/update/SvnUpdateCommand.java
    maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/update/SvnUpdateConsumer.java
    maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/provider/ScmProviderStub.java

Modified: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/CommandParameter.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/CommandParameter.java?view=diff&rev=520441&r1=520440&r2=520441
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/CommandParameter.java (original)
+++ maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/CommandParameter.java Tue Mar 20 08:48:14 2007
@@ -59,6 +59,8 @@
 
     public final static CommandParameter OUTPUT_FILE = new CommandParameter( "outputFile" );
 
+    public final static CommandParameter OUTPUT_DIRECTORY = new CommandParameter( "outputDirectory" );
+
     public final static CommandParameter RUN_CHANGELOG_WITH_UPDATE =
         new CommandParameter( "run_changelog_with_update" );
 

Added: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/export/AbstractExportCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/export/AbstractExportCommand.java?view=auto&rev=520441
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/export/AbstractExportCommand.java (added)
+++ maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/export/AbstractExportCommand.java Tue Mar 20 08:48:14 2007
@@ -0,0 +1,51 @@
+package org.apache.maven.scm.command.export;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.CommandParameter;
+import org.apache.maven.scm.CommandParameters;
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmResult;
+import org.apache.maven.scm.command.AbstractCommand;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id$
+ */
+public abstract class AbstractExportCommand
+    extends AbstractCommand
+{
+    protected abstract ExportScmResult executeExportCommand( ScmProviderRepository repository, ScmFileSet fileSet,
+                                                             String tag, String outputDirectory )
+        throws ScmException;
+
+    protected ScmResult executeCommand( ScmProviderRepository repository, ScmFileSet fileSet,
+                                        CommandParameters parameters )
+        throws ScmException
+    {
+        String tag = parameters.getString( CommandParameter.TAG, null );
+
+        String outputDirectory = parameters.getString( CommandParameter.OUTPUT_DIRECTORY, null );
+
+        return executeExportCommand( repository, fileSet, tag, outputDirectory );
+    }
+}

Propchange: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/export/AbstractExportCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/export/AbstractExportCommand.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/export/ExportScmResult.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/export/ExportScmResult.java?view=auto&rev=520441
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/export/ExportScmResult.java (added)
+++ maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/export/ExportScmResult.java Tue Mar 20 08:48:14 2007
@@ -0,0 +1,51 @@
+package org.apache.maven.scm.command.export;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.ScmResult;
+
+import java.util.List;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id$
+ */
+public class ExportScmResult
+    extends ScmResult
+{
+    private List exportedFiles;
+
+    public ExportScmResult( String commandLine, String providerMessage, String commandOutput, boolean success )
+    {
+        super( commandLine, providerMessage, commandOutput, success );
+    }
+
+    public ExportScmResult( String commandLine, List updatedFiles )
+    {
+        super( commandLine, null, null, true );
+
+        this.exportedFiles = updatedFiles;
+    }
+
+    public List getExportedFiles()
+    {
+        return exportedFiles;
+    }
+}

Propchange: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/export/ExportScmResult.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/export/ExportScmResult.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/export/ExportScmResultWithRevision.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/export/ExportScmResultWithRevision.java?view=auto&rev=520441
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/export/ExportScmResultWithRevision.java (added)
+++ maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/export/ExportScmResultWithRevision.java Tue Mar 20 08:48:14 2007
@@ -0,0 +1,52 @@
+package org.apache.maven.scm.command.export;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id$
+ */
+public class ExportScmResultWithRevision
+    extends ExportScmResult
+{
+    private String revision;
+
+    public ExportScmResultWithRevision( String commandLine, String providerMessage, String commandOutput,
+                                        String revision, boolean success )
+    {
+        super( commandLine, providerMessage, commandOutput, success );
+
+        this.revision = revision;
+    }
+
+    public ExportScmResultWithRevision( String commandLine, List exportedFiles, String revision )
+    {
+        super( commandLine, exportedFiles );
+
+        this.revision = revision;
+    }
+
+    public String getRevision()
+    {
+        return revision;
+    }
+}

Propchange: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/export/ExportScmResultWithRevision.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/command/export/ExportScmResultWithRevision.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java?view=diff&rev=520441&r1=520440&r2=520441
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java (original)
+++ maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/AbstractScmProvider.java Tue Mar 20 08:48:14 2007
@@ -30,6 +30,7 @@
 import org.apache.maven.scm.command.checkout.CheckOutScmResult;
 import org.apache.maven.scm.command.diff.DiffScmResult;
 import org.apache.maven.scm.command.edit.EditScmResult;
+import org.apache.maven.scm.command.export.ExportScmResult;
 import org.apache.maven.scm.command.list.ListScmResult;
 import org.apache.maven.scm.command.login.LoginScmResult;
 import org.apache.maven.scm.command.remove.RemoveScmResult;
@@ -267,6 +268,32 @@
         throw new NoSuchCommandScmException( "checkout" );
     }
 
+    public ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, String tag )
+        throws ScmException
+    {
+        return export( repository, fileSet, tag, null );
+    }
+
+    public ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, String tag, String outputDirectory )
+        throws ScmException
+    {
+        login( repository, fileSet );
+
+        CommandParameters parameters = new CommandParameters();
+
+        parameters.setString( CommandParameter.TAG, tag );
+
+        parameters.setString( CommandParameter.OUTPUT_DIRECTORY, outputDirectory );
+
+        return export( repository, fileSet, parameters );
+    }
+
+    protected ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, CommandParameters parameters )
+        throws ScmException
+    {
+        throw new NoSuchCommandScmException( "export" );
+    }
+
     /**
      * @see org.apache.maven.scm.provider.ScmProvider#diff(org.apache.maven.scm.repository.ScmRepository,org.apache.maven.scm.ScmFileSet,java.lang.String,java.lang.String)
      */
@@ -395,8 +422,8 @@
         return update( repository, fileSet, tag, datePattern, true );
     }
 
-    private UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String tag,
-                                    String datePattern, boolean runChangelog )
+    private UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String tag, String datePattern,
+                                    boolean runChangelog )
         throws ScmException
     {
         login( repository, fileSet );

Modified: maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProvider.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProvider.java?view=diff&rev=520441&r1=520440&r2=520441
==============================================================================
--- maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProvider.java (original)
+++ maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmProvider.java Tue Mar 20 08:48:14 2007
@@ -27,6 +27,7 @@
 import org.apache.maven.scm.command.checkout.CheckOutScmResult;
 import org.apache.maven.scm.command.diff.DiffScmResult;
 import org.apache.maven.scm.command.edit.EditScmResult;
+import org.apache.maven.scm.command.export.ExportScmResult;
 import org.apache.maven.scm.command.list.ListScmResult;
 import org.apache.maven.scm.command.remove.RemoveScmResult;
 import org.apache.maven.scm.command.status.StatusScmResult;
@@ -224,6 +225,31 @@
         throws ScmException;
 
     DiffScmResult diff( ScmRepository repository, ScmFileSet fileSet, String startRevision, String endRevision )
+        throws ScmException;
+
+    /**
+     * Create an exported copy of the repository on your local machine
+     *
+     * @param repository the source control system
+     * @param fileSet    the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
+     * @param tag        get the version defined by the tag
+     * @return
+     * @throws ScmException
+     */
+    ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, String tag )
+        throws ScmException;
+
+    /**
+     * Create an exported copy of the repository on your local machine
+     *
+     * @param repository      the source control system
+     * @param fileSet         the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
+     * @param tag             get the version defined by the tag
+     * @param outputDirectory the directory where the export will be stored
+     * @return
+     * @throws ScmException
+     */
+    ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, String tag, String outputDirectory )
         throws ScmException;
 
     /**

Added: maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/ExportMojo.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/ExportMojo.java?view=auto&rev=520441
==============================================================================
--- maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/ExportMojo.java (added)
+++ maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/ExportMojo.java Tue Mar 20 08:48:14 2007
@@ -0,0 +1,135 @@
+package org.apache.maven.scm.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.plugin.MojoExecutionException;
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.command.export.ExportScmResult;
+import org.apache.maven.scm.repository.ScmRepository;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.StringUtils;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Get a fresh exported copy of the latest source from the configured scm url.
+ *
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id$
+ * @goal export
+ * @description Export a project
+ * @requiresProject false
+ */
+public class ExportMojo
+    extends AbstractScmMojo
+{
+    /**
+     * Branch name.
+     *
+     * @parameter expression="${branch}"
+     */
+    private String branch;
+
+    /**
+     * The tag to use when checking out or tagging a project.
+     *
+     * @parameter expression="${tag}"
+     */
+    private String tag;
+
+    /**
+     * The directory to export the sources to.
+     *
+     * @parameter expression="${exportDirectory}"
+     */
+    private String exportDirectory;
+
+    public void execute()
+        throws MojoExecutionException
+    {
+        export();
+    }
+
+    protected String getExportDirectory()
+    {
+        return this.exportDirectory;
+    }
+
+    public void setExportDirectory( String exportDirectory )
+    {
+        this.exportDirectory = exportDirectory;
+    }
+
+    protected void export()
+        throws MojoExecutionException
+    {
+        try
+        {
+            ScmRepository repository = getScmRepository();
+
+            String currentTag = null;
+
+            if ( branch != null )
+            {
+                currentTag = branch;
+            }
+
+            if ( tag != null )
+            {
+                currentTag = tag;
+            }
+
+            try
+            {
+                if ( StringUtils.isNotEmpty( getExportDirectory() ) )
+                {
+                    File f = new File( getExportDirectory() );
+                    if ( f.exists() )
+                    {
+                        this.getLog().info( "Removing " + getExportDirectory() );
+
+                        FileUtils.deleteDirectory( getExportDirectory() );
+                    }
+
+                    f.mkdirs();
+                }
+            }
+            catch ( IOException e )
+            {
+                throw new MojoExecutionException( "Cannot remove " + getExportDirectory() );
+            }
+
+            ExportScmResult result = getScmManager().getProviderByRepository( repository ).export( repository,
+                                                                                                   new ScmFileSet(
+                                                                                                       new File(
+                                                                                                           getExportDirectory() ).getAbsoluteFile() ),
+                                                                                                   currentTag,
+                                                                                                   getExportDirectory() );
+
+            checkResult( result );
+        }
+        catch ( ScmException e )
+        {
+            throw new MojoExecutionException( "Cannot run export command : ", e );
+        }
+    }
+}

Propchange: maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/ExportMojo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-plugin/src/main/java/org/apache/maven/scm/plugin/ExportMojo.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/AbstractCvsScmProvider.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/AbstractCvsScmProvider.java?view=diff&rev=520441&r1=520440&r2=520441
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/AbstractCvsScmProvider.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/AbstractCvsScmProvider.java Tue Mar 20 08:48:14 2007
@@ -29,6 +29,7 @@
 import org.apache.maven.scm.command.checkin.CheckInScmResult;
 import org.apache.maven.scm.command.checkout.CheckOutScmResult;
 import org.apache.maven.scm.command.diff.DiffScmResult;
+import org.apache.maven.scm.command.export.ExportScmResult;
 import org.apache.maven.scm.command.list.ListScmResult;
 import org.apache.maven.scm.command.login.LoginScmResult;
 import org.apache.maven.scm.command.remove.RemoveScmResult;
@@ -530,6 +531,8 @@
 
     protected abstract Command getDiffCommand();
 
+    protected abstract Command getExportCommand();
+
     protected abstract Command getListCommand();
 
     protected abstract Command getLoginCommand();
@@ -588,6 +591,15 @@
     }
 
     /**
+     * @see org.apache.maven.scm.provider.AbstractScmProvider#export(org.apache.maven.scm.repository.ScmRepository,org.apache.maven.scm.ScmFileSet,org.apache.maven.scm.CommandParameters)
+     */
+    protected ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, CommandParameters parameters )
+        throws ScmException
+    {
+        return (ExportScmResult) executeCommand( getExportCommand(), repository, fileSet, parameters );
+    }
+
+    /**
      * @see org.apache.maven.scm.provider.AbstractScmProvider#login(org.apache.maven.scm.repository.ScmRepository,org.apache.maven.scm.ScmFileSet,org.apache.maven.scm.CommandParameters)
      */
     public LoginScmResult login( ScmRepository repository, ScmFileSet fileSet, CommandParameters parameters )
@@ -653,6 +665,7 @@
         throws ScmException
     {
         ScmFileSet newFileSet = null;
+
         try
         {
             File basedir = getAbsoluteFilePath( currentFileSet.getBasedir() );

Added: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/export/AbstractCvsExportCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/export/AbstractCvsExportCommand.java?view=auto&rev=520441
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/export/AbstractCvsExportCommand.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/export/AbstractCvsExportCommand.java Tue Mar 20 08:48:14 2007
@@ -0,0 +1,73 @@
+package org.apache.maven.scm.provider.cvslib.command.export;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.export.AbstractExportCommand;
+import org.apache.maven.scm.command.export.ExportScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.cvslib.command.CvsCommandUtils;
+import org.apache.maven.scm.provider.cvslib.repository.CvsScmProviderRepository;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.cli.Commandline;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id$
+ */
+public abstract class AbstractCvsExportCommand
+    extends AbstractExportCommand
+{
+    protected ExportScmResult executeExportCommand( ScmProviderRepository repo, ScmFileSet fileSet, String tag,
+                                                    String outputDirectory )
+        throws ScmException
+    {
+        CvsScmProviderRepository repository = (CvsScmProviderRepository) repo;
+
+        Commandline cl = CvsCommandUtils.getBaseCommand( "export", repository, fileSet );
+
+        if ( tag != null )
+        {
+            cl.createArgument().setValue( "-r" + tag );
+        }
+        else
+        {
+            cl.createArgument().setValue( "-rHEAD" );
+        }
+
+        if ( StringUtils.isNotEmpty( outputDirectory ) )
+        {
+            cl.createArgument().setValue( "-d" );
+
+            cl.createArgument().setValue( outputDirectory );
+        }
+
+        cl.createArgument().setValue( repository.getModule() );
+
+        getLogger().info( "Executing: " + cl );
+        getLogger().info( "Working directory: " + cl.getWorkingDirectory().getAbsolutePath() );
+
+        return executeCvsCommand( cl );
+    }
+
+    protected abstract ExportScmResult executeCvsCommand( Commandline cl )
+        throws ScmException;
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/export/AbstractCvsExportCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/command/export/AbstractCvsExportCommand.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/src/main/java/org/apache/maven/scm/provider/cvslib/cvsexe/CvsExeScmProvider.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/src/main/java/org/apache/maven/scm/provider/cvslib/cvsexe/CvsExeScmProvider.java?view=diff&rev=520441&r1=520440&r2=520441
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/src/main/java/org/apache/maven/scm/provider/cvslib/cvsexe/CvsExeScmProvider.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/src/main/java/org/apache/maven/scm/provider/cvslib/cvsexe/CvsExeScmProvider.java Tue Mar 20 08:48:14 2007
@@ -27,6 +27,7 @@
 import org.apache.maven.scm.provider.cvslib.cvsexe.command.checkin.CvsExeCheckInCommand;
 import org.apache.maven.scm.provider.cvslib.cvsexe.command.checkout.CvsExeCheckOutCommand;
 import org.apache.maven.scm.provider.cvslib.cvsexe.command.diff.CvsExeDiffCommand;
+import org.apache.maven.scm.provider.cvslib.cvsexe.command.export.CvsExeExportCommand;
 import org.apache.maven.scm.provider.cvslib.cvsexe.command.list.CvsExeListCommand;
 import org.apache.maven.scm.provider.cvslib.cvsexe.command.remove.CvsExeRemoveCommand;
 import org.apache.maven.scm.provider.cvslib.cvsexe.command.status.CvsExeStatusCommand;
@@ -64,6 +65,11 @@
     protected Command getDiffCommand()
     {
         return new CvsExeDiffCommand();
+    }
+
+    protected Command getExportCommand()
+    {
+        return new CvsExeExportCommand();
     }
 
     protected Command getListCommand()

Added: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/src/main/java/org/apache/maven/scm/provider/cvslib/cvsexe/command/export/CvsExeExportCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/src/main/java/org/apache/maven/scm/provider/cvslib/cvsexe/command/export/CvsExeExportCommand.java?view=auto&rev=520441
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/src/main/java/org/apache/maven/scm/provider/cvslib/cvsexe/command/export/CvsExeExportCommand.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/src/main/java/org/apache/maven/scm/provider/cvslib/cvsexe/command/export/CvsExeExportCommand.java Tue Mar 20 08:48:14 2007
@@ -0,0 +1,63 @@
+package org.apache.maven.scm.provider.cvslib.cvsexe.command.export;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.cvslib.command.export.AbstractCvsExportCommand;
+import org.apache.maven.scm.provider.cvslib.command.update.CvsUpdateConsumer;
+import org.apache.maven.scm.command.export.ExportScmResult;
+import org.apache.maven.scm.command.update.UpdateScmResult;
+import org.apache.maven.scm.ScmException;
+import org.codehaus.plexus.util.cli.Commandline;
+import org.codehaus.plexus.util.cli.CommandLineUtils;
+import org.codehaus.plexus.util.cli.CommandLineException;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id$
+ */
+public class CvsExeExportCommand
+    extends AbstractCvsExportCommand
+{
+    protected ExportScmResult executeCvsCommand( Commandline cl )
+        throws ScmException
+    {
+        CvsUpdateConsumer consumer = new CvsUpdateConsumer( getLogger() );
+
+        CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
+
+        int exitCode;
+
+        try
+        {
+            exitCode = CommandLineUtils.executeCommandLine( cl, consumer, stderr );
+        }
+        catch ( CommandLineException ex )
+        {
+            throw new ScmException( "Error while executing command.", ex );
+        }
+
+        if ( exitCode != 0 )
+        {
+            return new ExportScmResult( cl.toString(), "The cvs command failed.", stderr.getOutput(), false );
+        }
+
+        return new ExportScmResult( cl.toString(), consumer.getUpdatedFiles() );
+    }
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/src/main/java/org/apache/maven/scm/provider/cvslib/cvsexe/command/export/CvsExeExportCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/src/main/java/org/apache/maven/scm/provider/cvslib/cvsexe/command/export/CvsExeExportCommand.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsjava/src/main/java/org/apache/maven/scm/provider/cvslib/cvsjava/CvsJavaScmProvider.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsjava/src/main/java/org/apache/maven/scm/provider/cvslib/cvsjava/CvsJavaScmProvider.java?view=diff&rev=520441&r1=520440&r2=520441
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsjava/src/main/java/org/apache/maven/scm/provider/cvslib/cvsjava/CvsJavaScmProvider.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsjava/src/main/java/org/apache/maven/scm/provider/cvslib/cvsjava/CvsJavaScmProvider.java Tue Mar 20 08:48:14 2007
@@ -22,11 +22,12 @@
 import org.apache.maven.scm.command.Command;
 import org.apache.maven.scm.provider.cvslib.AbstractCvsScmProvider;
 import org.apache.maven.scm.provider.cvslib.command.login.CvsLoginCommand;
-import org.apache.maven.scm.provider.cvslib.cvsjava.command.changelog.CvsJavaChangeLogCommand;
 import org.apache.maven.scm.provider.cvslib.cvsjava.command.add.CvsJavaAddCommand;
+import org.apache.maven.scm.provider.cvslib.cvsjava.command.changelog.CvsJavaChangeLogCommand;
 import org.apache.maven.scm.provider.cvslib.cvsjava.command.checkin.CvsJavaCheckInCommand;
 import org.apache.maven.scm.provider.cvslib.cvsjava.command.checkout.CvsJavaCheckOutCommand;
 import org.apache.maven.scm.provider.cvslib.cvsjava.command.diff.CvsJavaDiffCommand;
+import org.apache.maven.scm.provider.cvslib.cvsjava.command.export.CvsJavaExportCommand;
 import org.apache.maven.scm.provider.cvslib.cvsjava.command.list.CvsJavaListCommand;
 import org.apache.maven.scm.provider.cvslib.cvsjava.command.remove.CvsJavaRemoveCommand;
 import org.apache.maven.scm.provider.cvslib.cvsjava.command.status.CvsJavaStatusCommand;
@@ -64,6 +65,11 @@
     protected Command getDiffCommand()
     {
         return new CvsJavaDiffCommand();
+    }
+
+    protected Command getExportCommand()
+    {
+        return new CvsJavaExportCommand();
     }
 
     protected Command getListCommand()

Added: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsjava/src/main/java/org/apache/maven/scm/provider/cvslib/cvsjava/command/export/CvsJavaExportCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsjava/src/main/java/org/apache/maven/scm/provider/cvslib/cvsjava/command/export/CvsJavaExportCommand.java?view=auto&rev=520441
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsjava/src/main/java/org/apache/maven/scm/provider/cvslib/cvsjava/command/export/CvsJavaExportCommand.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsjava/src/main/java/org/apache/maven/scm/provider/cvslib/cvsjava/command/export/CvsJavaExportCommand.java Tue Mar 20 08:48:14 2007
@@ -0,0 +1,78 @@
+package org.apache.maven.scm.provider.cvslib.cvsjava.command.export;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.command.export.ExportScmResult;
+import org.apache.maven.scm.provider.cvslib.command.export.AbstractCvsExportCommand;
+import org.apache.maven.scm.provider.cvslib.command.update.CvsUpdateConsumer;
+import org.apache.maven.scm.provider.cvslib.cvsjava.util.CvsConnection;
+import org.apache.maven.scm.provider.cvslib.cvsjava.util.CvsLogListener;
+import org.codehaus.plexus.util.cli.Commandline;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.InputStreamReader;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id$
+ */
+public class CvsJavaExportCommand
+    extends AbstractCvsExportCommand
+{
+    protected ExportScmResult executeCvsCommand( Commandline cl )
+        throws ScmException
+    {
+        CvsLogListener logListener = new CvsLogListener();
+
+        CvsUpdateConsumer consumer = new CvsUpdateConsumer( getLogger() );
+
+        try
+        {
+            boolean isSuccess = CvsConnection.processCommand( cl.getArguments(),
+                                                              cl.getWorkingDirectory().getAbsolutePath(), logListener,
+                                                              getLogger() );
+
+            if ( !isSuccess )
+            {
+                return new ExportScmResult( cl.toString(), "The cvs command failed.",
+                                            logListener.getStderr().toString(), false );
+            }
+            BufferedReader stream = new BufferedReader(
+                new InputStreamReader( new ByteArrayInputStream( logListener.getStdout().toString().getBytes() ) ) );
+
+            String line;
+
+            while ( ( line = stream.readLine() ) != null )
+            {
+                consumer.consumeLine( line );
+            }
+        }
+        catch ( Exception e )
+        {
+            e.printStackTrace();
+            return new ExportScmResult( cl.toString(), "The cvs command failed.", logListener.getStderr().toString(),
+                                        false );
+        }
+
+        return new ExportScmResult( cl.toString(), consumer.getUpdatedFiles() );
+    }
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsjava/src/main/java/org/apache/maven/scm/provider/cvslib/cvsjava/command/export/CvsJavaExportCommand.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsjava/src/main/java/org/apache/maven/scm/provider/cvslib/cvsjava/command/export/CvsJavaExportCommand.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/AbstractSvnScmProvider.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/AbstractSvnScmProvider.java?view=diff&rev=520441&r1=520440&r2=520441
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/AbstractSvnScmProvider.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svn-commons/src/main/java/org/apache/maven/scm/provider/svn/AbstractSvnScmProvider.java Tue Mar 20 08:48:14 2007
@@ -28,6 +28,7 @@
 import org.apache.maven.scm.command.checkin.CheckInScmResult;
 import org.apache.maven.scm.command.checkout.CheckOutScmResult;
 import org.apache.maven.scm.command.diff.DiffScmResult;
+import org.apache.maven.scm.command.export.ExportScmResult;
 import org.apache.maven.scm.command.list.ListScmResult;
 import org.apache.maven.scm.command.remove.RemoveScmResult;
 import org.apache.maven.scm.command.status.StatusScmResult;
@@ -266,6 +267,14 @@
         throws ScmException
     {
         return (DiffScmResult) executeCommand( getDiffCommand(), repository, fileSet, parameters );
+    }
+
+    protected abstract SvnCommand getExportCommand();
+
+    protected ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, CommandParameters parameters )
+        throws ScmException
+    {
+        return (ExportScmResult) executeCommand( getExportCommand(), repository, fileSet, parameters );
     }
 
     protected abstract SvnCommand getRemoveCommand();

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/SvnExeScmProvider.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/SvnExeScmProvider.java?view=diff&rev=520441&r1=520440&r2=520441
==============================================================================
--- 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 (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/SvnExeScmProvider.java Tue Mar 20 08:48:14 2007
@@ -30,6 +30,7 @@
 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.export.SvnExeExportCommand;
 import org.apache.maven.scm.provider.svn.svnexe.command.info.SvnInfoCommand;
 import org.apache.maven.scm.provider.svn.svnexe.command.list.SvnListCommand;
 import org.apache.maven.scm.provider.svn.svnexe.command.remove.SvnRemoveCommand;
@@ -71,6 +72,11 @@
     protected SvnCommand getDiffCommand()
     {
         return new SvnDiffCommand();
+    }
+
+    protected SvnCommand getExportCommand()
+    {
+        return new SvnExeExportCommand();
     }
 
     protected SvnCommand getRemoveCommand()

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/export/SvnExeExportCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/export/SvnExeExportCommand.java?view=auto&rev=520441
==============================================================================
--- 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/export/SvnExeExportCommand.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/export/SvnExeExportCommand.java Tue Mar 20 08:48:14 2007
@@ -0,0 +1,126 @@
+package org.apache.maven.scm.provider.svn.svnexe.command.export;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.export.AbstractExportCommand;
+import org.apache.maven.scm.command.export.ExportScmResult;
+import org.apache.maven.scm.command.export.ExportScmResultWithRevision;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.svn.SvnCommandUtils;
+import org.apache.maven.scm.provider.svn.SvnTagBranchUtils;
+import org.apache.maven.scm.provider.svn.command.SvnCommand;
+import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository;
+import org.apache.maven.scm.provider.svn.svnexe.command.SvnCommandLineUtils;
+import org.apache.maven.scm.provider.svn.svnexe.command.update.SvnUpdateConsumer;
+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;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id$
+ */
+public class SvnExeExportCommand
+    extends AbstractExportCommand
+    implements SvnCommand
+
+{
+    protected ExportScmResult executeExportCommand( ScmProviderRepository repo, ScmFileSet fileSet, String tag,
+                                                    String outputDirectory )
+        throws ScmException
+    {
+        SvnScmProviderRepository repository = (SvnScmProviderRepository) repo;
+
+        String url = repository.getUrl();
+
+        if ( tag != null && StringUtils.isNotEmpty( tag.trim() ) )
+        {
+            url = SvnTagBranchUtils.resolveTagUrl( repository, tag );
+        }
+
+        url = SvnCommandUtils.fixUrl( url, repository.getUser() );
+
+        Commandline cl =
+            createCommandLine( (SvnScmProviderRepository) repo, fileSet.getBasedir(), tag, url, outputDirectory );
+
+        SvnUpdateConsumer consumer = new SvnUpdateConsumer( getLogger(), fileSet.getBasedir() );
+
+        CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
+
+        getLogger().info( "Executing: " + SvnCommandLineUtils.cryptPassword( 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 command.", ex );
+        }
+
+        if ( exitCode != 0 )
+        {
+            return new ExportScmResult( cl.toString(), "The svn command failed.", stderr.getOutput(), false );
+        }
+
+        return new ExportScmResultWithRevision( cl.toString(), consumer.getUpdatedFiles(),
+                                                String.valueOf( consumer.getRevision() ) );
+    }
+
+    // ----------------------------------------------------------------------
+    //
+    // ----------------------------------------------------------------------
+
+    public static Commandline createCommandLine( SvnScmProviderRepository repository, File workingDirectory, String tag,
+                                                 String url, String outputSirectory )
+    {
+        if ( tag != null && StringUtils.isEmpty( tag.trim() ) )
+        {
+            tag = null;
+        }
+
+        Commandline cl = SvnCommandLineUtils.getBaseSvnCommandLine( workingDirectory, repository );
+
+        cl.createArgument().setValue( "export" );
+
+        if ( StringUtils.isNotEmpty( tag ) )
+        {
+            cl.createArgument().setValue( "-r" );
+            cl.createArgument().setValue( tag );
+        }
+
+        cl.createArgument().setValue( url );
+
+        if ( StringUtils.isNotEmpty( outputSirectory ) )
+        {
+            cl.createArgument().setValue( outputSirectory );
+        }
+
+        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/export/SvnExeExportCommand.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/export/SvnExeExportCommand.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/update/SvnUpdateCommand.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/update/SvnUpdateCommand.java?view=diff&rev=520441&r1=520440&r2=520441
==============================================================================
--- 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/update/SvnUpdateCommand.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/update/SvnUpdateCommand.java Tue Mar 20 08:48:14 2007
@@ -46,7 +46,6 @@
     extends AbstractUpdateCommand
     implements SvnCommand
 {
-
     protected UpdateScmResult executeUpdateCommand( ScmProviderRepository repo, ScmFileSet fileSet, String tag )
         throws ScmException
     {

Modified: maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/update/SvnUpdateConsumer.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/update/SvnUpdateConsumer.java?view=diff&rev=520441&r1=520440&r2=520441
==============================================================================
--- 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/update/SvnUpdateConsumer.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-svn/maven-scm-provider-svnexe/src/main/java/org/apache/maven/scm/provider/svn/svnexe/command/update/SvnUpdateConsumer.java Tue Mar 20 08:48:14 2007
@@ -38,6 +38,8 @@
 
     private static final String AT_REVISION_TOKEN = "At revision";
 
+    private static final String EXPORTED_REVISION_TOKEN = "Exported revision";
+
     private static final String RESTORED_TOKEN = "Restored";
 
     // ----------------------------------------------------------------------
@@ -73,6 +75,14 @@
         else if ( line.startsWith( AT_REVISION_TOKEN ) )
         {
             String revisionString = line.substring( AT_REVISION_TOKEN.length() + 1, line.length() - 1 );
+
+            revision = parseInt( revisionString );
+
+            return;
+        }
+        else if ( line.startsWith( EXPORTED_REVISION_TOKEN ) )
+        {
+            String revisionString = line.substring( EXPORTED_REVISION_TOKEN.length() + 1, line.length() - 1 );
 
             revision = parseInt( revisionString );
 

Modified: maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/provider/ScmProviderStub.java
URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/provider/ScmProviderStub.java?view=diff&rev=520441&r1=520440&r2=520441
==============================================================================
--- maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/provider/ScmProviderStub.java (original)
+++ maven/scm/trunk/maven-scm-test/src/main/java/org/apache/maven/scm/provider/ScmProviderStub.java Tue Mar 20 08:48:14 2007
@@ -27,6 +27,7 @@
 import org.apache.maven.scm.command.checkout.CheckOutScmResult;
 import org.apache.maven.scm.command.diff.DiffScmResult;
 import org.apache.maven.scm.command.edit.EditScmResult;
+import org.apache.maven.scm.command.export.ExportScmResult;
 import org.apache.maven.scm.command.list.ListScmResult;
 import org.apache.maven.scm.command.remove.RemoveScmResult;
 import org.apache.maven.scm.command.status.StatusScmResult;
@@ -89,6 +90,8 @@
 
     private ListScmResult listScmResult;
 
+    private ExportScmResult exportScmResult;
+
     /**
      * Create a new ScmProviderStub with bogus (not null) attributes
      */
@@ -101,6 +104,7 @@
         setCheckOutScmResult( new CheckOutScmResult( "", "", "", true ) );
         setDiffScmResult( new DiffScmResult( "", "", "", true ) );
         setEditScmResult( new EditScmResult( "", "", "", true ) );
+        setExportScmResult( new ExportScmResult( "", "", "", true ) );
         setRemoveScmResult( new RemoveScmResult( "", "", "", true ) );
         setStatusScmResult( new StatusScmResult( "", "", "", true ) );
         setTagScmResult( new TagScmResult( "", "", "", true ) );
@@ -188,6 +192,16 @@
         return diffScmResult;
     }
 
+    public ExportScmResult getExportScmResult()
+    {
+        return exportScmResult;
+    }
+
+    public void setExportScmResult( ExportScmResult exportScmResult )
+    {
+        this.exportScmResult = exportScmResult;
+    }
+
     public void setTagScmResult( TagScmResult tagScmResult )
     {
         this.tagScmResult = tagScmResult;
@@ -358,7 +372,8 @@
         return getCheckInScmResult();
     }
 
-    public CheckOutScmResult checkOut( ScmRepository scmRepository, ScmFileSet scmFileSet, String tag, boolean recursive )
+    public CheckOutScmResult checkOut( ScmRepository scmRepository, ScmFileSet scmFileSet, String tag,
+                                       boolean recursive )
         throws ScmException
     {
         return getCheckOutScmResult();
@@ -383,6 +398,24 @@
     }
 
     /**
+     * @return getExportScmResult() always
+     */
+    public ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, String tag )
+        throws ScmException
+    {
+        return getExportScmResult();
+    }
+
+    /**
+     * @return getExportScmResult() always
+     */
+    public ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, String tag, String outputDirectory )
+        throws ScmException
+    {
+        return getExportScmResult();
+    }
+
+    /**
      * @return getRemoveScmResult() always
      */
     public RemoveScmResult remove( ScmRepository repository, ScmFileSet fileSet, String message )
@@ -458,7 +491,8 @@
     /**
      * @return getUpdateScmResult() always
      */
-    public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String tag, Date lastUpdate, String datePattern, boolean runChangelog )
+    public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String tag, Date lastUpdate,
+                                   String datePattern, boolean runChangelog )
         throws ScmException
     {
         return getUpdateScmResult();