You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm-commits@maven.apache.org by ev...@apache.org on 2006/03/01 12:16:38 UTC

svn commit: r381987 [2/13] - in /maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs: ./ maven-scm-provider-cvs-commons/ maven-scm-provider-cvs-commons/src/ maven-scm-provider-cvs-commons/src/main/ maven-scm-provider-cvs-commons/src/main/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/changelog/AbstractCvsChangeLogCommand.java
URL: http://svn.apache.org/viewcvs/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/changelog/AbstractCvsChangeLogCommand.java?rev=381987&view=auto
==============================================================================
--- 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/changelog/AbstractCvsChangeLogCommand.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/changelog/AbstractCvsChangeLogCommand.java Wed Mar  1 03:16:02 2006
@@ -0,0 +1,105 @@
+package org.apache.maven.scm.provider.cvslib.command.changelog;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.command.changelog.AbstractChangeLogCommand;
+import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.cvslib.command.CvsCommand;
+import org.apache.maven.scm.provider.cvslib.command.CvsCommandUtils;
+import org.apache.maven.scm.provider.cvslib.repository.CvsScmProviderRepository;
+import org.codehaus.plexus.util.cli.Commandline;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse </a>
+ * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
+ * @version $Id$
+ */
+public abstract class AbstractCvsChangeLogCommand
+    extends AbstractChangeLogCommand
+    implements CvsCommand
+{
+    protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repo, ScmFileSet fileSet,
+                                                          String startTag, String endTag, String datePattern )
+        throws ScmException
+    {
+        return executeChangeLogCommand( repo, fileSet, null, null, null, startTag, endTag, datePattern );
+    }
+
+    protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repo, ScmFileSet fileSet,
+                                                          Date startDate, Date endDate, String branch,
+                                                          String datePattern )
+        throws ScmException
+    {
+        return executeChangeLogCommand( repo, fileSet, startDate, endDate, branch, null, null, datePattern );
+    }
+
+    private ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repo, ScmFileSet fileSet, Date startDate,
+                                                        Date endDate, String branch, String startTag, String endTag,
+                                                        String datePattern )
+        throws ScmException
+    {
+        CvsScmProviderRepository repository = (CvsScmProviderRepository) repo;
+
+        Commandline cl = CvsCommandUtils.getBaseCommand( "log", repository, fileSet );
+
+        if ( startDate != null )
+        {
+            SimpleDateFormat outputDate = new SimpleDateFormat( "yyyy-MM-dd" );
+
+            String dateRange;
+
+            if ( endDate == null )
+            {
+                dateRange = ">" + outputDate.format( startDate );
+            }
+            else
+            {
+                dateRange = outputDate.format( startDate ) + "<" + outputDate.format( endDate );
+            }
+
+            cl.createArgument().setValue( "-d " + dateRange );
+        }
+
+        if ( branch != null )
+        {
+            cl.createArgument().setValue( "-r" + branch );
+        }
+
+        if ( startTag != null )
+        {
+            String param = "-r" + startTag + "::" + ( endTag != null ? endTag : "" );
+
+            cl.createArgument().setValue( param );
+        }
+
+        getLogger().debug( "Working directory: " + fileSet.getBasedir().getAbsolutePath() );
+
+        getLogger().debug( "Command line: " + cl );
+
+        return executeCvsCommand( cl, startDate, endDate, datePattern );
+    }
+
+    protected abstract ChangeLogScmResult executeCvsCommand( Commandline cl, Date startDate, Date endDate,
+                                                             String datePattern )
+        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/changelog/AbstractCvsChangeLogCommand.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/changelog/AbstractCvsChangeLogCommand.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

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/changelog/CvsChangeLogConsumer.java
URL: http://svn.apache.org/viewcvs/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/changelog/CvsChangeLogConsumer.java?rev=381987&view=auto
==============================================================================
--- 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/changelog/CvsChangeLogConsumer.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/changelog/CvsChangeLogConsumer.java Wed Mar  1 03:16:02 2006
@@ -0,0 +1,313 @@
+package org.apache.maven.scm.provider.cvslib.command.changelog;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.scm.ChangeFile;
+import org.apache.maven.scm.ChangeSet;
+import org.apache.maven.scm.log.ScmLogger;
+import org.apache.maven.scm.util.AbstractConsumer;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.StringTokenizer;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse </a>
+ * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
+ * @version $Id$
+ */
+public class CvsChangeLogConsumer
+    extends AbstractConsumer
+{
+    private List entries = new ArrayList();
+
+    // state machine constants for reading cvs output
+
+    /**
+     * expecting file information
+     */
+    private static final int GET_FILE = 1;
+
+    /**
+     * expecting date
+     */
+    private static final int GET_DATE = 2;
+
+    /**
+     * expecting comments
+     */
+    private static final int GET_COMMENT = 3;
+
+    /**
+     * expecting revision
+     */
+    private static final int GET_REVISION = 4;
+
+    /**
+     * Marks start of file data
+     */
+    private static final String START_FILE = "Working file: ";
+
+    /**
+     * Marks end of file
+     */
+    private static final String END_FILE =
+        "===================================" + "==========================================";
+
+    /**
+     * Marks start of revision
+     */
+    private static final String START_REVISION = "----------------------------";
+
+    /**
+     * Marks revision data
+     */
+    private static final String REVISION_TAG = "revision ";
+
+    /**
+     * Marks date data
+     */
+    private static final String DATE_TAG = "date: ";
+
+    /**
+     * current status of the parser
+     */
+    private int status = GET_FILE;
+
+    /**
+     * the current log entry being processed by the parser
+     */
+    private ChangeSet currentChange = null;
+
+    /**
+     * the current file being processed by the parser
+     */
+    private ChangeFile currentFile = null;
+
+    private String userDatePattern;
+
+    public CvsChangeLogConsumer( ScmLogger logger, String userDatePattern )
+    {
+        super( logger );
+
+        this.userDatePattern = userDatePattern;
+    }
+
+    public List getModifications()
+    {
+        return entries;
+    }
+
+    public void consumeLine( String line )
+    {
+        try
+        {
+            switch ( getStatus() )
+            {
+                case GET_FILE:
+                    processGetFile( line );
+                    break;
+                case GET_REVISION:
+                    processGetRevision( line );
+                    break;
+                case GET_DATE:
+                    processGetDate( line );
+                    break;
+                case GET_COMMENT:
+                    processGetComment( line );
+                    break;
+                default:
+                    throw new IllegalStateException( "Unknown state: " + status );
+            }
+        }
+        catch ( Throwable ex )
+        {
+            getLogger().warn( "Exception in the cvs changelog consumer.", ex );
+        }
+    }
+
+    /**
+     * Add a change log entry to the list (if it's not already there) with the
+     * given file.
+     *
+     * @param entry a {@link ChangeSet}to be added to the list if another
+     *              with the same key doesn't exist already. If the entry's author
+     *              is null, the entry wont be added
+     * @param file  a {@link ChangeFile}to be added to the entry
+     */
+    private void addEntry( ChangeSet entry, ChangeFile file )
+    {
+        // do not add if entry is not populated
+        if ( entry.getAuthor() == null )
+        {
+            return;
+        }
+
+        entry.addFile( file );
+
+        entries.add( entry );
+    }
+
+    /**
+     * Process the current input line in the Get File state.
+     *
+     * @param line a line of text from the cvs log output
+     */
+    private void processGetFile( String line )
+    {
+        if ( line.startsWith( START_FILE ) )
+        {
+            setCurrentChange( new ChangeSet() );
+            setCurrentFile( new ChangeFile( line.substring( START_FILE.length(), line.length() ) ) );
+            setStatus( GET_REVISION );
+        }
+    }
+
+    /**
+     * Process the current input line in the Get Revision state.
+     *
+     * @param line a line of text from the cvs log output
+     */
+    private void processGetRevision( String line )
+    {
+        if ( line.startsWith( REVISION_TAG ) )
+        {
+            getCurrentFile().setRevision( line.substring( REVISION_TAG.length() ) );
+            setStatus( GET_DATE );
+        }
+        else if ( line.startsWith( END_FILE ) )
+        {
+            // If we encounter an end of file line, it means there
+            // are no more revisions for the current file.
+            // there could also be a file still being processed.
+            setStatus( GET_FILE );
+            addEntry( getCurrentChange(), getCurrentFile() );
+        }
+    }
+
+    /**
+     * Process the current input line in the Get Date state.
+     *
+     * @param line a line of text from the cvs log output
+     */
+    private void processGetDate( String line )
+    {
+        if ( line.startsWith( DATE_TAG ) )
+        {
+            StringTokenizer tokenizer = new StringTokenizer( line, " ;" );
+            // date: YYYY/mm/dd HH:mm:ss; author: name
+            tokenizer.nextToken(); // date tag
+            String date = tokenizer.nextToken();
+            String time = tokenizer.nextToken();
+            getCurrentChange().setDate( date + " " + time, userDatePattern );
+            tokenizer.nextToken(); // author tag
+            // assumes author can't contain spaces
+            String author = tokenizer.nextToken();
+            getCurrentChange().setAuthor( author );
+            setStatus( GET_COMMENT );
+        }
+    }
+
+    /**
+     * Process the current input line in the Get Comment state.
+     *
+     * @param line a line of text from the cvs log output
+     */
+    private void processGetComment( String line )
+    {
+        if ( line.startsWith( START_REVISION ) )
+        {
+            // add entry, and set state to get revision
+            addEntry( getCurrentChange(), getCurrentFile() );
+            // new change log entry
+            setCurrentChange( new ChangeSet() );
+            // same file name, but different rev
+            setCurrentFile( new ChangeFile( getCurrentFile().getName() ) );
+            setStatus( GET_REVISION );
+        }
+        else if ( line.startsWith( END_FILE ) )
+        {
+            addEntry( getCurrentChange(), getCurrentFile() );
+            setStatus( GET_FILE );
+        }
+        else
+        {
+            // keep gathering comments
+            getCurrentChange().setComment( getCurrentChange().getComment() + line + "\n" );
+        }
+    }
+
+    /**
+     * Getter for property currentFile.
+     *
+     * @return Value of property currentFile.
+     */
+    private ChangeFile getCurrentFile()
+    {
+        return currentFile;
+    }
+
+    /**
+     * Setter for property currentFile.
+     *
+     * @param currentFile New value of property currentFile.
+     */
+    private void setCurrentFile( ChangeFile currentFile )
+    {
+        this.currentFile = currentFile;
+    }
+
+    /**
+     * Getter for property currentChange.
+     *
+     * @return Value of property currentChange.
+     */
+    private ChangeSet getCurrentChange()
+    {
+        return currentChange;
+    }
+
+    /**
+     * Setter for property currentChange.
+     *
+     * @param currentChange New value of property currentChange.
+     */
+    private void setCurrentChange( ChangeSet currentChange )
+    {
+        this.currentChange = currentChange;
+    }
+
+    /**
+     * Getter for property status.
+     *
+     * @return Value of property status.
+     */
+    private int getStatus()
+    {
+        return status;
+    }
+
+    /**
+     * Setter for property status.
+     *
+     * @param status New value of property status.
+     */
+    private void setStatus( int status )
+    {
+        this.status = status;
+    }
+}

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/changelog/CvsChangeLogConsumer.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/changelog/CvsChangeLogConsumer.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

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/checkin/AbstractCvsCheckInCommand.java
URL: http://svn.apache.org/viewcvs/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/checkin/AbstractCvsCheckInCommand.java?rev=381987&view=auto
==============================================================================
--- 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/checkin/AbstractCvsCheckInCommand.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/checkin/AbstractCvsCheckInCommand.java Wed Mar  1 03:16:02 2006
@@ -0,0 +1,103 @@
+package org.apache.maven.scm.provider.cvslib.command.checkin;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.command.checkin.AbstractCheckInCommand;
+import org.apache.maven.scm.command.checkin.CheckInScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.cvslib.command.CvsCommand;
+import org.apache.maven.scm.provider.cvslib.command.CvsCommandUtils;
+import org.apache.maven.scm.provider.cvslib.repository.CvsScmProviderRepository;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.cli.Commandline;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse </a>
+ * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
+ * @version $Id$
+ */
+public abstract class AbstractCvsCheckInCommand
+    extends AbstractCheckInCommand
+    implements CvsCommand
+{
+    protected CheckInScmResult executeCheckInCommand( ScmProviderRepository repo, ScmFileSet fileSet, String message,
+                                                      String tag )
+        throws ScmException
+    {
+        CvsScmProviderRepository repository = (CvsScmProviderRepository) repo;
+
+        Commandline cl = CvsCommandUtils.getBaseCommand( "commit", repository, fileSet );
+
+        if ( !StringUtils.isEmpty( tag ) )
+        {
+            cl.createArgument().setValue( "-r" + tag );
+        }
+
+        cl.createArgument().setValue( "-R" );
+
+        cl.createArgument().setValue( "-F" );
+
+        File messageFile;
+
+        try
+        {
+            messageFile = File.createTempFile( "scm-commit-message", ".txt" );
+
+            FileUtils.fileWrite( messageFile.getAbsolutePath(), message );
+        }
+        catch ( IOException ex )
+        {
+            throw new ScmException( "Error while making a temporary commit message file." );
+        }
+
+        cl.createArgument().setValue( messageFile.getAbsolutePath() );
+
+        File[] files = fileSet.getFiles();
+
+        for ( int i = 0; i < files.length; i++ )
+        {
+            cl.createArgument().setValue( files[i].getPath().replace( '\\', '/' ) );
+        }
+
+        getLogger().debug( "Working directory: " + fileSet.getBasedir().getAbsolutePath() );
+
+        getLogger().debug( "Command line: " + cl );
+
+        CheckInScmResult result = executeCvsCommand( cl, repository, messageFile );
+
+        try
+        {
+            FileUtils.forceDelete( messageFile );
+        }
+        catch ( IOException ex )
+        {
+            // ignore
+        }
+
+        return result;
+    }
+
+    protected abstract CheckInScmResult executeCvsCommand( Commandline cl, CvsScmProviderRepository repository,
+                                                           File messageFile )
+        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/checkin/AbstractCvsCheckInCommand.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/checkin/AbstractCvsCheckInCommand.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

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/checkout/AbstractCvsCheckOutCommand.java
URL: http://svn.apache.org/viewcvs/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/checkout/AbstractCvsCheckOutCommand.java?rev=381987&view=auto
==============================================================================
--- 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/checkout/AbstractCvsCheckOutCommand.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/checkout/AbstractCvsCheckOutCommand.java Wed Mar  1 03:16:02 2006
@@ -0,0 +1,84 @@
+package org.apache.maven.scm.provider.cvslib.command.checkout;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.command.checkout.AbstractCheckOutCommand;
+import org.apache.maven.scm.command.checkout.CheckOutScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.cvslib.command.CvsCommand;
+import org.apache.maven.scm.provider.cvslib.command.CvsCommandUtils;
+import org.apache.maven.scm.provider.cvslib.repository.CvsScmProviderRepository;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.StringUtils;
+import org.codehaus.plexus.util.cli.Commandline;
+
+import java.io.IOException;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse </a>
+ * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
+ * @version $Id$
+ */
+public abstract class AbstractCvsCheckOutCommand
+    extends AbstractCheckOutCommand
+    implements CvsCommand
+{
+    protected CheckOutScmResult executeCheckOutCommand( ScmProviderRepository repo, ScmFileSet fileSet, String tag )
+        throws ScmException
+    {
+        if ( fileSet.getBasedir().exists() )
+        {
+            try
+            {
+                FileUtils.deleteDirectory( fileSet.getBasedir() );
+            }
+            catch ( IOException e )
+            {
+                getLogger().warn( "Can't delete " + fileSet.getBasedir().getAbsolutePath(), e );
+            }
+        }
+
+        CvsScmProviderRepository repository = (CvsScmProviderRepository) repo;
+
+        Commandline cl = CvsCommandUtils.getBaseCommand( "checkout", repository, fileSet );
+
+        cl.setWorkingDirectory( fileSet.getBasedir().getParentFile().getAbsolutePath() );
+
+        if ( !StringUtils.isEmpty( tag ) )
+        {
+            cl.createArgument().setValue( "-r" );
+            cl.createArgument().setValue( tag );
+        }
+
+        cl.createArgument().setValue( "-d" );
+
+        cl.createArgument().setValue( fileSet.getBasedir().getName() );
+
+        cl.createArgument().setValue( repository.getModule() );
+
+        getLogger().debug( "Working directory: " + fileSet.getBasedir().getAbsolutePath() );
+
+        getLogger().debug( "Command line: " + cl );
+
+        return executeCvsCommand( cl );
+    }
+
+    protected abstract CheckOutScmResult 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/checkout/AbstractCvsCheckOutCommand.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/checkout/AbstractCvsCheckOutCommand.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

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/diff/AbstractCvsDiffCommand.java
URL: http://svn.apache.org/viewcvs/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/diff/AbstractCvsDiffCommand.java?rev=381987&view=auto
==============================================================================
--- 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/diff/AbstractCvsDiffCommand.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/diff/AbstractCvsDiffCommand.java Wed Mar  1 03:16:02 2006
@@ -0,0 +1,70 @@
+package org.apache.maven.scm.provider.cvslib.command.diff;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.command.diff.AbstractDiffCommand;
+import org.apache.maven.scm.command.diff.DiffScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.cvslib.command.CvsCommand;
+import org.apache.maven.scm.provider.cvslib.command.CvsCommandUtils;
+import org.apache.maven.scm.provider.cvslib.repository.CvsScmProviderRepository;
+import org.codehaus.plexus.util.cli.Commandline;
+
+/**
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @version $Id$
+ */
+public abstract class AbstractCvsDiffCommand
+    extends AbstractDiffCommand
+    implements CvsCommand
+{
+    protected DiffScmResult executeDiffCommand( ScmProviderRepository repo, ScmFileSet fileSet, String startRevision,
+                                                String endRevision )
+        throws ScmException
+    {
+        CvsScmProviderRepository repository = (CvsScmProviderRepository) repo;
+
+        Commandline cl = CvsCommandUtils.getBaseCommand( "diff", repository, fileSet );
+
+        cl.createArgument().setValue( "-u" );
+
+        cl.createArgument().setValue( "-N" );
+
+        if ( startRevision != null )
+        {
+            cl.createArgument().setValue( "-r" );
+            cl.createArgument().setValue( startRevision );
+        }
+
+        if ( endRevision != null )
+        {
+            cl.createArgument().setValue( "-r" );
+            cl.createArgument().setValue( endRevision );
+        }
+
+        getLogger().debug( "Working directory: " + fileSet.getBasedir().getAbsolutePath() );
+
+        getLogger().debug( "Command line: " + cl );
+
+        return executeCvsCommand( cl );
+    }
+
+    protected abstract DiffScmResult 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/diff/AbstractCvsDiffCommand.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/diff/AbstractCvsDiffCommand.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

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/login/CvsLoginCommand.java
URL: http://svn.apache.org/viewcvs/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/login/CvsLoginCommand.java?rev=381987&view=auto
==============================================================================
--- 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/login/CvsLoginCommand.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/login/CvsLoginCommand.java Wed Mar  1 03:16:02 2006
@@ -0,0 +1,72 @@
+package org.apache.maven.scm.provider.cvslib.command.login;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.scm.CommandParameters;
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.login.AbstractLoginCommand;
+import org.apache.maven.scm.login.LoginScmResult;
+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 java.io.IOException;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id$
+ */
+public class CvsLoginCommand
+    extends AbstractLoginCommand
+{
+    /**
+     * @see org.apache.maven.scm.login.AbstractLoginCommand#executeLoginCommand(org.apache.maven.scm.provider.ScmProviderRepository, org.apache.maven.scm.ScmFileSet, org.apache.maven.scm.CommandParameters)
+     */
+    public LoginScmResult executeLoginCommand( ScmProviderRepository repository, ScmFileSet fileSet,
+                                               CommandParameters parameters )
+        throws ScmException
+    {
+        CvsScmProviderRepository repo = (CvsScmProviderRepository) repository;
+
+        if ( !"pserver".equals( repo.getTransport() ) )
+        {
+            return new LoginScmResult( null, "The cvs login ignored for " + repo.getTransport() + ".", "", true );
+        }
+        else if ( CvsCommandUtils.isCvsNT() )
+        {
+            //We don't continue becauseCVSNT doesn't use .cvspass
+            return new LoginScmResult( null, "The cvs login ignored for CVSNT.", "", true );
+        }
+
+        CvsPass passGenerator = new CvsPass( getLogger() );
+
+        passGenerator.setCvsroot( repo.getCvsRootForCvsPass() );
+
+        passGenerator.setPassword( repo.getPassword() );
+        try
+        {
+            passGenerator.execute();
+        }
+        catch ( IOException e )
+        {
+            throw new ScmException( "Error while executing cvs login command.", e );
+        }
+
+        return new LoginScmResult( null, "The cvs command succeed.", "", true );
+    }
+}

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/login/CvsLoginCommand.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/login/CvsLoginCommand.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

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/login/CvsPass.java
URL: http://svn.apache.org/viewcvs/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/login/CvsPass.java?rev=381987&view=auto
==============================================================================
--- 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/login/CvsPass.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/login/CvsPass.java Wed Mar  1 03:16:02 2006
@@ -0,0 +1,202 @@
+package org.apache.maven.scm.provider.cvslib.command.login;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.log.ScmLogger;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+/**
+ * Adds an new entry to a CVS password file.
+ *
+ * @version $Id$
+ * @todo Update this class for support password storage in cvsnt. CVSNT use the windows registry, so, we need a jni
+ * tool for access to the windows registry
+ */
+public class CvsPass
+{
+    /**
+     * CVS Root
+     */
+    private String cvsRoot = null;
+
+    /**
+     * Password file to add password to
+     */
+    private File passFile = null;
+
+    /**
+     * Password to add to file
+     */
+    private String password = null;
+
+    private ScmLogger logger;
+
+    /**
+     * Array contain char conversion data
+     */
+    private final char[] shifts = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+        24, 25, 26, 27, 28, 29, 30, 31, 114, 120, 53, 79, 96, 109, 72, 108, 70, 64, 76, 67, 116, 74, 68, 87, 111, 52,
+        75, 119, 49, 34, 82, 81, 95, 65, 112, 86, 118, 110, 122, 105, 41, 57, 83, 43, 46, 102, 40, 89, 38, 103, 45, 50,
+        42, 123, 91, 35, 125, 55, 54, 66, 124, 126, 59, 47, 92, 71, 115, 78, 88, 107, 106, 56, 36, 121, 117, 104, 101,
+        100, 69, 73, 99, 63, 94, 93, 39, 37, 61, 48, 58, 113, 32, 90, 44, 98, 60, 51, 33, 97, 62, 77, 84, 80, 85, 223,
+        225, 216, 187, 166, 229, 189, 222, 188, 141, 249, 148, 200, 184, 136, 248, 190, 199, 170, 181, 204, 138, 232,
+        218, 183, 255, 234, 220, 247, 213, 203, 226, 193, 174, 172, 228, 252, 217, 201, 131, 230, 197, 211, 145, 238,
+        161, 179, 160, 212, 207, 221, 254, 173, 202, 146, 224, 151, 140, 196, 205, 130, 135, 133, 143, 246, 192, 159,
+        244, 239, 185, 168, 215, 144, 139, 165, 180, 157, 147, 186, 214, 176, 227, 231, 219, 169, 175, 156, 206, 198,
+        129, 164, 150, 210, 154, 177, 134, 127, 182, 128, 158, 208, 162, 132, 167, 209, 149, 241, 153, 251, 237, 236,
+        171, 195, 243, 233, 253, 240, 194, 250, 191, 155, 142, 137, 245, 235, 163, 242, 178, 152};
+
+    /**
+     * Create a CVS task using the default cvspass file location.
+     */
+    public CvsPass( ScmLogger logger )
+    {
+        passFile = new File( System.getProperty( "cygwin.user.home", System.getProperty( "user.home" ) ) + File
+            .separatorChar + ".cvspass" );
+        this.logger = logger;
+    }
+
+    /**
+     * Does the work.
+     *
+     * @throws ScmException if something is missing
+     * @throws IOException  if something goes wrong
+     */
+    public final void execute()
+        throws ScmException, IOException
+    {
+        if ( cvsRoot == null )
+        {
+            throw new ScmException( "cvsroot is required" );
+        }
+
+        logger.debug( "cvsRoot: " + cvsRoot );
+
+        logger.debug( "passFile: " + passFile );
+
+        BufferedReader reader = null;
+
+        PrintWriter writer = null;
+        try
+        {
+            StringBuffer buf = new StringBuffer();
+
+            if ( passFile.exists() )
+            {
+                reader = new BufferedReader( new FileReader( passFile ) );
+
+                String line = null;
+
+                while ( ( line = reader.readLine() ) != null )
+                {
+                    if ( !line.startsWith( cvsRoot ) && !line.startsWith( "/1 " + cvsRoot ) )
+                    {
+                        buf.append( line ).append( "\n" );
+                    }
+                    else
+                    {
+                        logger.debug(
+                            "cvsroot " + cvsRoot + " already exist in " + passFile.getAbsolutePath() + ". SKIPPED." );
+
+                        return;
+                    }
+                }
+            }
+
+            if ( password == null )
+            {
+                throw new ScmException( "password is required" );
+            }
+
+            //logger.debug( "password: " + password );
+
+            String pwdfile = buf.toString() + "/1 " + cvsRoot + " A" + mangle( password );
+
+            logger.debug( "Writing -> " + pwdfile );
+
+            writer = new PrintWriter( new FileWriter( passFile ) );
+
+            writer.println( pwdfile );
+        }
+        finally
+        {
+            if ( reader != null )
+            {
+                try
+                {
+                    reader.close();
+                }
+                catch ( IOException e )
+                {
+                    // ignore
+                }
+            }
+            if ( writer != null )
+            {
+                writer.close();
+            }
+        }
+    }
+
+    private final String mangle( String password )
+    {
+        StringBuffer buf = new StringBuffer();
+        for ( int i = 0; i < password.length(); i++ )
+        {
+            buf.append( shifts[password.charAt( i )] );
+        }
+        return buf.toString();
+    }
+
+    /**
+     * The CVS repository to add an entry for.
+     *
+     * @param cvsRoot the CVS repository
+     */
+    public void setCvsroot( String cvsRoot )
+    {
+        this.cvsRoot = cvsRoot;
+    }
+
+    /**
+     * Password file to add the entry to.
+     *
+     * @param passFile the password file.
+     */
+    public void setPassfile( File passFile )
+    {
+        this.passFile = passFile;
+    }
+
+    /**
+     * Password to be added to the password file.
+     *
+     * @param password the password.
+     */
+    public void setPassword( String password )
+    {
+        this.password = password;
+    }
+
+}

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/login/CvsPass.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/login/CvsPass.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

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/remove/AbstractCvsRemoveCommand.java
URL: http://svn.apache.org/viewcvs/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/remove/AbstractCvsRemoveCommand.java?rev=381987&view=auto
==============================================================================
--- 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/remove/AbstractCvsRemoveCommand.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/remove/AbstractCvsRemoveCommand.java Wed Mar  1 03:16:02 2006
@@ -0,0 +1,85 @@
+package org.apache.maven.scm.provider.cvslib.command.remove;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.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.remove.AbstractRemoveCommand;
+import org.apache.maven.scm.command.remove.RemoveScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.cvslib.command.CvsCommand;
+import org.apache.maven.scm.provider.cvslib.command.CvsCommandUtils;
+import org.apache.maven.scm.provider.cvslib.repository.CvsScmProviderRepository;
+import org.codehaus.plexus.util.cli.Commandline;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @version $Id$
+ * @todo separate the CVSlib stuff from the cvs command line so it is clear what needs to be updated eventually
+ */
+public abstract class AbstractCvsRemoveCommand
+    extends AbstractRemoveCommand
+    implements CvsCommand
+{
+    protected ScmResult executeRemoveCommand( ScmProviderRepository repo, ScmFileSet fileSet, String message )
+        throws ScmException
+    {
+        CvsScmProviderRepository repository = (CvsScmProviderRepository) repo;
+
+        Commandline cl = CvsCommandUtils.getBaseCommand( "remove", repository, fileSet );
+
+        cl.createArgument().setValue( "-f" );
+
+        cl.createArgument().setValue( "-l" );
+
+        if ( message != null && message.length() > 0 )
+        {
+            cl.createArgument().setValue( "-m" );
+
+            cl.createArgument().setValue( "\"" + message + "\"" );
+        }
+
+        File[] files = fileSet.getFiles();
+
+        List removedFiles = new ArrayList();
+
+        for ( int i = 0; i < files.length; i++ )
+        {
+            String path = files[i].getPath().replace( '\\', '/' );
+
+            cl.createArgument().setValue( path );
+
+            removedFiles.add( new ScmFile( path, ScmFileStatus.DELETED ) );
+        }
+
+        getLogger().debug( "Working directory: " + fileSet.getBasedir().getAbsolutePath() );
+
+        getLogger().debug( "Command line: " + cl );
+
+        return executeCvsCommand( cl, removedFiles );
+    }
+
+    protected abstract RemoveScmResult executeCvsCommand( Commandline cl, List removedFiles )
+        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/remove/AbstractCvsRemoveCommand.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/remove/AbstractCvsRemoveCommand.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

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/status/AbstractCvsStatusCommand.java
URL: http://svn.apache.org/viewcvs/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/status/AbstractCvsStatusCommand.java?rev=381987&view=auto
==============================================================================
--- 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/status/AbstractCvsStatusCommand.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/status/AbstractCvsStatusCommand.java Wed Mar  1 03:16:02 2006
@@ -0,0 +1,55 @@
+package org.apache.maven.scm.provider.cvslib.command.status;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.command.status.AbstractStatusCommand;
+import org.apache.maven.scm.command.status.StatusScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.cvslib.command.CvsCommand;
+import org.apache.maven.scm.provider.cvslib.command.CvsCommandUtils;
+import org.apache.maven.scm.provider.cvslib.repository.CvsScmProviderRepository;
+import org.codehaus.plexus.util.cli.Commandline;
+
+/**
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @version $Id$
+ */
+public abstract class AbstractCvsStatusCommand
+    extends AbstractStatusCommand
+    implements CvsCommand
+{
+    protected StatusScmResult executeStatusCommand( ScmProviderRepository repo, ScmFileSet fileSet )
+        throws ScmException
+    {
+        CvsScmProviderRepository repository = (CvsScmProviderRepository) repo;
+
+        Commandline cl = CvsCommandUtils.getBaseCommand( "update", repository, fileSet, "-n" );
+
+        cl.createArgument().setValue( "-d" );
+
+        getLogger().debug( "Working directory: " + fileSet.getBasedir().getAbsolutePath() );
+
+        getLogger().debug( "Command line: " + cl );
+
+        return executeCvsCommand( cl );
+    }
+
+    protected abstract StatusScmResult 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/status/AbstractCvsStatusCommand.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/status/AbstractCvsStatusCommand.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

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/tag/AbstractCvsTagCommand.java
URL: http://svn.apache.org/viewcvs/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/tag/AbstractCvsTagCommand.java?rev=381987&view=auto
==============================================================================
--- 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/tag/AbstractCvsTagCommand.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/tag/AbstractCvsTagCommand.java Wed Mar  1 03:16:02 2006
@@ -0,0 +1,61 @@
+package org.apache.maven.scm.provider.cvslib.command.tag;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.ScmResult;
+import org.apache.maven.scm.command.tag.AbstractTagCommand;
+import org.apache.maven.scm.command.tag.TagScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.cvslib.command.CvsCommand;
+import org.apache.maven.scm.provider.cvslib.command.CvsCommandUtils;
+import org.apache.maven.scm.provider.cvslib.repository.CvsScmProviderRepository;
+import org.codehaus.plexus.util.cli.Commandline;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse </a>
+ * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
+ * @version $Id$
+ */
+public abstract class AbstractCvsTagCommand
+    extends AbstractTagCommand
+    implements CvsCommand
+{
+    public ScmResult executeTagCommand( ScmProviderRepository repo, ScmFileSet fileSet, String tag )
+        throws ScmException
+    {
+        CvsScmProviderRepository repository = (CvsScmProviderRepository) repo;
+
+        Commandline cl = CvsCommandUtils.getBaseCommand( "tag", repository, fileSet );
+
+        cl.createArgument().setValue( "-F" );
+
+        cl.createArgument().setValue( "-c" );
+
+        cl.createArgument().setValue( tag );
+
+        getLogger().debug( "Working directory: " + fileSet.getBasedir().getAbsolutePath() );
+
+        getLogger().debug( "Command line: " + cl );
+
+        return executeCvsCommand( cl );
+    }
+
+    protected abstract TagScmResult 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/tag/AbstractCvsTagCommand.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/tag/AbstractCvsTagCommand.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

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/update/AbstractCvsUpdateCommand.java
URL: http://svn.apache.org/viewcvs/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/update/AbstractCvsUpdateCommand.java?rev=381987&view=auto
==============================================================================
--- 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/update/AbstractCvsUpdateCommand.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/update/AbstractCvsUpdateCommand.java Wed Mar  1 03:16:02 2006
@@ -0,0 +1,61 @@
+package org.apache.maven.scm.provider.cvslib.command.update;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.command.update.AbstractUpdateCommand;
+import org.apache.maven.scm.command.update.UpdateScmResult;
+import org.apache.maven.scm.provider.ScmProviderRepository;
+import org.apache.maven.scm.provider.cvslib.command.CvsCommand;
+import org.apache.maven.scm.provider.cvslib.command.CvsCommandUtils;
+import org.apache.maven.scm.provider.cvslib.repository.CvsScmProviderRepository;
+import org.codehaus.plexus.util.cli.Commandline;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse </a>
+ * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
+ * @version $Id$
+ */
+public abstract class AbstractCvsUpdateCommand
+    extends AbstractUpdateCommand
+    implements CvsCommand
+{
+    public UpdateScmResult executeUpdateCommand( ScmProviderRepository repo, ScmFileSet fileSet, String tag )
+        throws ScmException
+    {
+        CvsScmProviderRepository repository = (CvsScmProviderRepository) repo;
+
+        Commandline cl = CvsCommandUtils.getBaseCommand( "update", repository, fileSet );
+
+        cl.createArgument().setValue( "-d" );
+
+        if ( tag != null )
+        {
+            cl.createArgument().setValue( "-r" + tag );
+        }
+
+        getLogger().debug( "Working directory: " + fileSet.getBasedir().getAbsolutePath() );
+
+        getLogger().debug( "Command line: " + cl );
+
+        return executeCvsCommand( cl );
+    }
+
+    protected abstract UpdateScmResult 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/update/AbstractCvsUpdateCommand.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/update/AbstractCvsUpdateCommand.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Copied: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/repository/CvsScmProviderRepository.java (from r380634, maven/scm/trunk/maven-scm-providers/maven-scm-provider-cvs/src/main/java/org/apache/maven/scm/provider/cvslib/repository/CvsScmProviderRepository.java)
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/repository/CvsScmProviderRepository.java?p2=maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/main/java/org/apache/maven/scm/provider/cvslib/repository/CvsScmProviderRepository.java&p1=maven/scm/trunk/maven-scm-providers/maven-scm-provider-cvs/src/main/java/org/apache/maven/scm/provider/cvslib/repository/CvsScmProviderRepository.java&r1=380634&r2=381987&rev=381987&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-cvs/src/main/java/org/apache/maven/scm/provider/cvslib/repository/CvsScmProviderRepository.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/repository/CvsScmProviderRepository.java Wed Mar  1 03:16:02 2006
@@ -17,7 +17,7 @@
  */
 
 import org.apache.maven.scm.provider.ScmProviderRepositoryWithHost;
-import org.apache.maven.scm.provider.cvslib.CvsScmProvider;
+import org.apache.maven.scm.provider.cvslib.AbstractCvsScmProvider;
 
 /**
  * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
@@ -91,7 +91,7 @@
         }
         else
         {
-            if ( CvsScmProvider.TRANSPORT_LOCAL.equals( getTransport() ) )
+            if ( AbstractCvsScmProvider.TRANSPORT_LOCAL.equals( getTransport() ) )
             {
                 return cvsroot;
             }

Copied: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/test/java/org/apache/maven/scm/provider/cvslib/repository/CvsScmProviderRepositoryTest.java (from r380634, maven/scm/trunk/maven-scm-providers/maven-scm-provider-cvs/src/test/java/org/apache/maven/scm/provider/cvslib/repository/CvsScmProviderRepositoryTest.java)
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/test/java/org/apache/maven/scm/provider/cvslib/repository/CvsScmProviderRepositoryTest.java?p2=maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/test/java/org/apache/maven/scm/provider/cvslib/repository/CvsScmProviderRepositoryTest.java&p1=maven/scm/trunk/maven-scm-providers/maven-scm-provider-cvs/src/test/java/org/apache/maven/scm/provider/cvslib/repository/CvsScmProviderRepositoryTest.java&r1=380634&r2=381987&rev=381987&view=diff
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-provider-cvs/src/test/java/org/apache/maven/scm/provider/cvslib/repository/CvsScmProviderRepositoryTest.java (original)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/test/java/org/apache/maven/scm/provider/cvslib/repository/CvsScmProviderRepositoryTest.java Wed Mar  1 03:16:02 2006
@@ -18,7 +18,6 @@
 
 import org.apache.maven.scm.manager.ScmManager;
 import org.apache.maven.scm.provider.cvslib.AbstractCvsScmTest;
-import org.apache.maven.scm.provider.cvslib.CvsScmProvider;
 import org.apache.maven.scm.repository.ScmRepository;
 import org.apache.maven.scm.repository.ScmRepositoryException;
 
@@ -43,7 +42,7 @@
     public void testParseConnectionFromPath()
         throws Exception
     {
-        CvsScmProvider provider = new CvsScmProvider();
+        TestCvsScmProvider provider = new TestCvsScmProvider();
 
         CvsScmProviderRepository repo = (CvsScmProviderRepository) provider
             .makeProviderScmRepository( getTestFile( "src/test/resources/checkoutdir" ) );

Added: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/test/java/org/apache/maven/scm/provider/cvslib/repository/TestCvsScmProvider.java
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/test/java/org/apache/maven/scm/provider/cvslib/repository/TestCvsScmProvider.java?rev=381987&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/test/java/org/apache/maven/scm/provider/cvslib/repository/TestCvsScmProvider.java (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/test/java/org/apache/maven/scm/provider/cvslib/repository/TestCvsScmProvider.java Wed Mar  1 03:16:02 2006
@@ -0,0 +1,66 @@
+package org.apache.maven.scm.provider.cvslib.repository;
+
+import org.apache.maven.scm.provider.cvslib.AbstractCvsScmProvider;
+import org.apache.maven.scm.command.Command;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.  Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at       http://www.apache.org/licenses/LICENSE-2.0  Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
+ */
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id$
+ */
+public class TestCvsScmProvider
+    extends AbstractCvsScmProvider
+{
+    protected Command getAddCommand()
+    {
+        return null;
+    }
+
+    protected Command getChangeLogCommand()
+    {
+        return null;
+    }
+
+    protected Command getCheckInCommand()
+    {
+        return null;
+    }
+
+    protected Command getCheckOutCommand()
+    {
+        return null;
+    }
+
+    protected Command getDiffCommand()
+    {
+        return null;
+    }
+
+    protected Command getLoginCommand()
+    {
+        return null;
+    }
+
+    protected Command getRemoveCommand()
+    {
+        return null;
+    }
+
+    protected Command getStatusCommand()
+    {
+        return null;
+    }
+
+    protected Command getTagCommand()
+    {
+        return null;
+    }
+
+    protected Command getUpdateCommand()
+    {
+        return null;
+    }
+}

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/test/java/org/apache/maven/scm/provider/cvslib/repository/TestCvsScmProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/test/java/org/apache/maven/scm/provider/cvslib/repository/TestCvsScmProvider.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/test/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/test/resources/META-INF/plexus/components.xml?rev=381987&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/test/resources/META-INF/plexus/components.xml (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/test/resources/META-INF/plexus/components.xml Wed Mar  1 03:16:02 2006
@@ -0,0 +1,9 @@
+<component-set>
+  <components>
+    <component>
+      <role>org.apache.maven.scm.provider.ScmProvider</role>
+      <role-hint>cvs</role-hint>
+      <implementation>org.apache.maven.scm.provider.cvslib.repository.TestCvsScmProvider</implementation>
+    </component>
+  </components>
+</component-set>

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/test/resources/META-INF/plexus/components.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvs-commons/src/test/resources/META-INF/plexus/components.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Wed Mar  1 03:16:02 2006
@@ -0,0 +1,2 @@
+target
+maven-scm-provider-cvsexe.iml

Added: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/pom.xml
URL: http://svn.apache.org/viewcvs/maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/pom.xml?rev=381987&view=auto
==============================================================================
--- maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/pom.xml (added)
+++ maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/pom.xml Wed Mar  1 03:16:02 2006
@@ -0,0 +1,24 @@
+<project>
+  <parent>
+    <artifactId>maven-scm-providers-cvs</artifactId>
+    <groupId>org.apache.maven.scm</groupId>
+    <version>1.0-beta-3-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>maven-scm-provider-cvsexe</artifactId>
+  <name>Maven SCM CVS Provider - CVS Executable Impl.</name>
+  <version>1.0-beta-3-SNAPSHOT</version>
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.maven.scm</groupId>
+      <artifactId>maven-scm-provider-cvs-commons</artifactId>
+      <version>1.0-beta-3-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.scm</groupId>
+      <artifactId>maven-scm-provider-cvstest</artifactId>
+      <version>1.0-beta-3-SNAPSHOT</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+</project>

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-providers-cvs/maven-scm-provider-cvsexe/pom.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

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/CvsExeScmProvider.java
URL: http://svn.apache.org/viewcvs/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?rev=381987&view=auto
==============================================================================
--- 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 (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/CvsExeScmProvider.java Wed Mar  1 03:16:02 2006
@@ -0,0 +1,88 @@
+package org.apache.maven.scm.provider.cvslib.cvsexe;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.scm.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.cvsexe.command.add.CvsExeAddCommand;
+import org.apache.maven.scm.provider.cvslib.cvsexe.command.changelog.CvsExeChangeLogCommand;
+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.remove.CvsExeRemoveCommand;
+import org.apache.maven.scm.provider.cvslib.cvsexe.command.status.CvsExeStatusCommand;
+import org.apache.maven.scm.provider.cvslib.cvsexe.command.tag.CvsExeTagCommand;
+import org.apache.maven.scm.provider.cvslib.cvsexe.command.update.CvsExeUpdateCommand;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id$
+ */
+public class CvsExeScmProvider
+    extends AbstractCvsScmProvider
+{
+    protected Command getAddCommand()
+    {
+        return new CvsExeAddCommand();
+    }
+
+    protected Command getChangeLogCommand()
+    {
+        return new CvsExeChangeLogCommand();
+    }
+
+    protected Command getCheckInCommand()
+    {
+        return new CvsExeCheckInCommand();
+    }
+
+    protected Command getCheckOutCommand()
+    {
+        return new CvsExeCheckOutCommand();
+    }
+
+    protected Command getDiffCommand()
+    {
+        return new CvsExeDiffCommand();
+    }
+
+    protected Command getLoginCommand()
+    {
+        return new CvsLoginCommand();
+    }
+
+    protected Command getRemoveCommand()
+    {
+        return new CvsExeRemoveCommand();
+    }
+
+    protected Command getStatusCommand()
+    {
+        return new CvsExeStatusCommand();
+    }
+
+    protected Command getTagCommand()
+    {
+        return new CvsExeTagCommand();
+    }
+
+    protected Command getUpdateCommand()
+    {
+        return new CvsExeUpdateCommand();
+    }
+}

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/CvsExeScmProvider.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/CvsExeScmProvider.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

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/add/CvsExeAddCommand.java
URL: http://svn.apache.org/viewcvs/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/add/CvsExeAddCommand.java?rev=381987&view=auto
==============================================================================
--- 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/add/CvsExeAddCommand.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/add/CvsExeAddCommand.java Wed Mar  1 03:16:02 2006
@@ -0,0 +1,61 @@
+package org.apache.maven.scm.provider.cvslib.cvsexe.command.add;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.command.add.AddScmResult;
+import org.apache.maven.scm.provider.cvslib.command.add.AbstractCvsAddCommand;
+import org.codehaus.plexus.util.cli.CommandLineException;
+import org.codehaus.plexus.util.cli.CommandLineUtils;
+import org.codehaus.plexus.util.cli.Commandline;
+
+import java.util.List;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id$
+ */
+public class CvsExeAddCommand
+    extends AbstractCvsAddCommand
+{
+    protected AddScmResult executeCvsCommand( Commandline cl, List addedFiles )
+        throws ScmException
+    {
+        CommandLineUtils.StringStreamConsumer consumer = new CommandLineUtils.StringStreamConsumer();
+
+        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 );
+        }
+
+        // TODO: actually it may have partially succeeded - should we cvs update the files and parse "A " responses?
+        if ( exitCode != 0 )
+        {
+            return new AddScmResult( cl.toString(), "The cvs command failed.", stderr.getOutput(), false );
+        }
+
+        return new AddScmResult( cl.toString(), addedFiles );
+    }
+}

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/add/CvsExeAddCommand.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/add/CvsExeAddCommand.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

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/changelog/CvsExeChangeLogCommand.java
URL: http://svn.apache.org/viewcvs/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/changelog/CvsExeChangeLogCommand.java?rev=381987&view=auto
==============================================================================
--- 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/changelog/CvsExeChangeLogCommand.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/changelog/CvsExeChangeLogCommand.java Wed Mar  1 03:16:02 2006
@@ -0,0 +1,63 @@
+package org.apache.maven.scm.provider.cvslib.cvsexe.command.changelog;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
+import org.apache.maven.scm.command.changelog.ChangeLogSet;
+import org.apache.maven.scm.provider.cvslib.command.changelog.AbstractCvsChangeLogCommand;
+import org.apache.maven.scm.provider.cvslib.command.changelog.CvsChangeLogConsumer;
+import org.codehaus.plexus.util.cli.CommandLineException;
+import org.codehaus.plexus.util.cli.CommandLineUtils;
+import org.codehaus.plexus.util.cli.Commandline;
+
+import java.util.Date;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id$
+ */
+public class CvsExeChangeLogCommand
+    extends AbstractCvsChangeLogCommand
+{
+    protected ChangeLogScmResult executeCvsCommand( Commandline cl, Date startDate, Date endDate, String datePattern )
+        throws ScmException
+    {
+        CvsChangeLogConsumer consumer = new CvsChangeLogConsumer( getLogger(), datePattern );
+
+        CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
+
+        int exitCode;
+
+        try
+        {
+            exitCode = CommandLineUtils.executeCommandLine( cl, consumer, stderr );
+        }
+        catch ( CommandLineException ex )
+        {
+            throw new ScmException( "Error while executing cvs command.", ex );
+        }
+
+        if ( exitCode != 0 )
+        {
+            return new ChangeLogScmResult( cl.toString(), "The cvs command failed.", stderr.getOutput(), false );
+        }
+
+        return new ChangeLogScmResult( cl.toString(),
+                                       new ChangeLogSet( consumer.getModifications(), startDate, endDate ) );
+    }
+}

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/changelog/CvsExeChangeLogCommand.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/changelog/CvsExeChangeLogCommand.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

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/checkin/CvsCheckInConsumer.java
URL: http://svn.apache.org/viewcvs/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/checkin/CvsCheckInConsumer.java?rev=381987&view=auto
==============================================================================
--- 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/checkin/CvsCheckInConsumer.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/checkin/CvsCheckInConsumer.java Wed Mar  1 03:16:02 2006
@@ -0,0 +1,87 @@
+package org.apache.maven.scm.provider.cvslib.cvsexe.command.checkin;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.scm.ScmFile;
+import org.apache.maven.scm.ScmFileStatus;
+import org.apache.maven.scm.log.ScmLogger;
+import org.codehaus.plexus.util.cli.StreamConsumer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
+ * @version $Id$
+ */
+public class CvsCheckInConsumer
+    implements StreamConsumer
+{
+    private List checkedInFiles = new ArrayList();
+
+    private String remotePath;
+
+    private ScmLogger logger;
+
+    public CvsCheckInConsumer( String remotePath, ScmLogger logger )
+    {
+        this.remotePath = remotePath;
+
+        this.logger = logger;
+    }
+
+    // ----------------------------------------------------------------------
+    // StreamConsumer Implementation
+    // ----------------------------------------------------------------------
+
+    public void consumeLine( String line )
+    {
+        /*
+         * The output from "cvs commit" contains lines like this:
+         *
+         *   /path/rot/repo/test-repo/check-in/foo/bar,v  <--  bar
+         *
+         * so this code assumes that it contains ",v  <--  "
+         * it's a committed file.
+         */
+
+        logger.debug( line );
+
+        int end = line.indexOf( ",v  <--  " );
+
+        if ( end == -1 )
+        {
+            return;
+        }
+
+        String fileName = line.substring( 0, end );
+
+        if ( !fileName.startsWith( remotePath ) )
+        {
+            return;
+        }
+
+        fileName = fileName.substring( remotePath.length() );
+
+        checkedInFiles.add( new ScmFile( fileName, ScmFileStatus.CHECKED_IN ) );
+    }
+
+    public List getCheckedInFiles()
+    {
+        return checkedInFiles;
+    }
+}

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/checkin/CvsCheckInConsumer.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/checkin/CvsCheckInConsumer.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

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/checkin/CvsExeCheckInCommand.java
URL: http://svn.apache.org/viewcvs/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/checkin/CvsExeCheckInCommand.java?rev=381987&view=auto
==============================================================================
--- 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/checkin/CvsExeCheckInCommand.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/checkin/CvsExeCheckInCommand.java Wed Mar  1 03:16:02 2006
@@ -0,0 +1,73 @@
+package org.apache.maven.scm.provider.cvslib.cvsexe.command.checkin;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.scm.ScmException;
+import org.apache.maven.scm.command.checkin.CheckInScmResult;
+import org.apache.maven.scm.provider.cvslib.command.checkin.AbstractCvsCheckInCommand;
+import org.apache.maven.scm.provider.cvslib.repository.CvsScmProviderRepository;
+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;
+
+/**
+ * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
+ * @version $Id$
+ */
+public class CvsExeCheckInCommand
+    extends AbstractCvsCheckInCommand
+{
+    protected CheckInScmResult executeCvsCommand( Commandline cl, CvsScmProviderRepository repository,
+                                                  File messageFile )
+        throws ScmException
+    {
+        CvsCheckInConsumer consumer = new CvsCheckInConsumer( repository.getPath(), 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 );
+        }
+
+        try
+        {
+            FileUtils.forceDelete( messageFile );
+        }
+        catch ( IOException ex )
+        {
+            // ignore
+        }
+
+        if ( exitCode != 0 )
+        {
+            return new CheckInScmResult( cl.toString(), "The cvs command failed.", stderr.getOutput(), false );
+        }
+
+        return new CheckInScmResult( cl.toString(), consumer.getCheckedInFiles() );
+    }
+}