Author: evenisse Date: Sun Sep 24 05:41:33 2006 New Revision: 449398 URL: http://svn.apache.org/viewvc?view=rev&rev=449398 Log: [SCM-223] Add VSS Add and Edit commands Sumbmitted by: Thorsten Riek
Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/add/ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/add/VssAddCommand.java (with props) maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/add/VssAddConsumer.java (with props) maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/edit/ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommand.java (with props) maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditConsumer.java (with props) maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/add/ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/add/VssAddCommandTest.java (with props) maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/edit/ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.java (with props) Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/VssScmProvider.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/VssCommandLineUtils.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/VssParameterContext.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/changelog/VssHistoryCommand.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/checkout/VssCheckOutCommand.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/status/VssStatusCommand.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/status/VssStatusConsumer.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/update/VssUpdateCommand.java maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/repository/VssScmProviderRepository.java Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/VssScmProvider.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/VssScmProvider.java?view=diff&rev=449398&r1=449397&r2=449398 ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/VssScmProvider.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/VssScmProvider.java Sun Sep 24 05:41:33 2006 @@ -19,14 +19,18 @@ import org.apache.maven.scm.CommandParameters; import org.apache.maven.scm.ScmException; import org.apache.maven.scm.ScmFileSet; +import org.apache.maven.scm.command.add.AddScmResult; import org.apache.maven.scm.command.changelog.ChangeLogScmResult; import org.apache.maven.scm.command.checkout.CheckOutScmResult; +import org.apache.maven.scm.command.edit.EditScmResult; import org.apache.maven.scm.command.status.StatusScmResult; import org.apache.maven.scm.command.update.UpdateScmResult; import org.apache.maven.scm.provider.AbstractScmProvider; import org.apache.maven.scm.provider.ScmProviderRepository; +import org.apache.maven.scm.provider.vss.commands.add.VssAddCommand; import org.apache.maven.scm.provider.vss.commands.changelog.VssHistoryCommand; import org.apache.maven.scm.provider.vss.commands.checkout.VssCheckOutCommand; +import org.apache.maven.scm.provider.vss.commands.edit.VssEditCommand; import org.apache.maven.scm.provider.vss.commands.status.VssStatusCommand; import org.apache.maven.scm.provider.vss.commands.update.VssUpdateCommand; import org.apache.maven.scm.provider.vss.repository.VssScmProviderRepository; @@ -37,8 +41,7 @@ /** * @author <a href="mailto:[EMAIL PROTECTED]">George Gastaldi</a> * @version $Id$ - * <p/> - * http://msdn.microsoft.com/library/default.asp?url=/library/en-us/guides/html/vstskuse_command_line_commands_and_options.asp + * @link http://msdn.microsoft.com/library/default.asp?url=/library/en-us/guides/html/vstskuse_command_line_commands_and_options.asp */ public class VssScmProvider extends AbstractScmProvider @@ -112,7 +115,6 @@ * org.apache.maven.scm.ScmFileSet, * org.apache.maven.scm.CommandParameters) */ - /* public AddScmResult add( ScmRepository repository, ScmFileSet fileSet, CommandParameters parameters ) throws ScmException { @@ -120,10 +122,8 @@ VssAddCommand command = new VssAddCommand(); command.setLogger( getLogger() ); - return (AddScmResult) command.execute( repository - .getProviderRepository(), fileSet, parameters ); + return (AddScmResult) command.execute( repository.getProviderRepository(), fileSet, parameters ); } - */ /** * @see org.apache.maven.scm.provider.AbstractScmProvider#checkin(org.apache.maven.scm.repository.ScmRepository, @@ -226,7 +226,6 @@ * org.apache.maven.scm.ScmFileSet, * org.apache.maven.scm.CommandParameters) */ - /* public EditScmResult edit( ScmRepository repository, ScmFileSet fileSet, CommandParameters parameters ) throws ScmException { @@ -236,7 +235,6 @@ return (EditScmResult) command.execute( repository.getProviderRepository(), fileSet, parameters ); } - */ /** * @see org.apache.maven.scm.provider.AbstractScmProvider#unedit(org.apache.maven.scm.repository.ScmRepository, Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/VssCommandLineUtils.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/VssCommandLineUtils.java?view=diff&rev=449398&r1=449397&r2=449398 ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/VssCommandLineUtils.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/VssCommandLineUtils.java Sun Sep 24 05:41:33 2006 @@ -16,7 +16,14 @@ * limitations under the License. */ +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.util.Iterator; + import org.apache.maven.scm.ScmException; +import org.apache.maven.scm.ScmFileSet; import org.apache.maven.scm.log.ScmLogger; import org.apache.maven.scm.provider.vss.repository.VssScmProviderRepository; import org.apache.maven.scm.providers.vss.settings.Settings; @@ -28,21 +35,24 @@ import org.codehaus.plexus.util.cli.StreamConsumer; import org.codehaus.plexus.util.xml.pull.XmlPullParserException; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; - -// FIXME extend CommandLineUtils +/** + * @author <a href="mailto:[EMAIL PROTECTED]">Thorsten Riek</a> + * @version $Id$ + */ public class VssCommandLineUtils - implements VssConstants + implements VssConstants // FIXME extend CommandLineUtils { - public static void addFiles( Commandline cl, File[] files ) + public static void addFiles( Commandline cl, ScmFileSet fileSet ) { - for ( int i = 0; i < files.length; i++ ) + Iterator it = fileSet.getFileList().iterator(); + + while ( it.hasNext() ) { - cl.createArgument().setValue( files[i].getPath().replace( '\\', '/' ) ); + File file = (File) it.next(); + + cl.createArgument().setValue( file.getPath().replace( '\\', '/' ) ); } + } public static Commandline getBaseVssCommandLine( File workingDirectory, String cmd, Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/VssParameterContext.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/VssParameterContext.java?view=diff&rev=449398&r1=449397&r2=449398 ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/VssParameterContext.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/VssParameterContext.java Sun Sep 24 05:41:33 2006 @@ -27,6 +27,10 @@ import java.util.GregorianCalendar; +/** + * @author <a href="mailto:[EMAIL PROTECTED]">Thorsten Riek</a> + * @version $Id$ + */ public class VssParameterContext implements VssConstants { Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/add/VssAddCommand.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/add/VssAddCommand.java?view=auto&rev=449398 ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/add/VssAddCommand.java (added) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/add/VssAddCommand.java Sun Sep 24 05:41:33 2006 @@ -0,0 +1,145 @@ +package org.apache.maven.scm.provider.vss.commands.add; + +/* + * Copyright 2001-2006 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import org.apache.maven.scm.ScmException; +import org.apache.maven.scm.ScmFileSet; +import org.apache.maven.scm.ScmResult; +import org.apache.maven.scm.command.add.AbstractAddCommand; +import org.apache.maven.scm.command.add.AddScmResult; +import org.apache.maven.scm.command.changelog.ChangeLogScmResult; +import org.apache.maven.scm.provider.ScmProviderRepository; +import org.apache.maven.scm.provider.vss.commands.VssCommandLineUtils; +import org.apache.maven.scm.provider.vss.commands.VssConstants; +import org.apache.maven.scm.provider.vss.repository.VssScmProviderRepository; +import org.codehaus.plexus.util.cli.CommandLineUtils; +import org.codehaus.plexus.util.cli.Commandline; + +/** + * @author <a href="mailto:[EMAIL PROTECTED]">Brett Porter</a> + * @version $Id$ + */ +public class VssAddCommand + extends AbstractAddCommand +{ + protected ScmResult executeAddCommand( ScmProviderRepository repository, ScmFileSet fileSet, String message, + boolean binary ) + throws ScmException + { + VssScmProviderRepository repo = (VssScmProviderRepository) repository; + + if ( fileSet.getFiles().length == 0 ) + { + throw new ScmException( "You must provide at least one file/directory to add" ); + } + + Commandline cl = buildCmdLine( repo, fileSet ); + + VssAddConsumer consumer = new VssAddConsumer( getLogger() ); + + CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer(); + + getLogger().info( "Executing: " + cl ); + getLogger().info( "Working directory: " + cl.getWorkingDirectory().getAbsolutePath() ); + + int exitCode = VssCommandLineUtils.executeCommandline( cl, consumer, stderr, getLogger() ); + + if ( exitCode != 0 ) + { + return new ChangeLogScmResult( cl.toString(), "The vss command failed.", stderr.getOutput(), false ); + } + + return new AddScmResult( cl.toString(), consumer.getAddedFiles() ); + } + + public Commandline buildCmdLine( VssScmProviderRepository repo, ScmFileSet fileSet ) + throws ScmException + { + Commandline command = new Commandline(); + + command.setWorkingDirectory( fileSet.getBasedir().getAbsolutePath() ); + + try + { + command.addSystemEnvironment(); + } + catch ( Exception e ) + { + throw new ScmException( "Can't add system environment.", e ); + } + + command.addEnvironment( "SSDIR", repo.getVssdir() ); + + String ssDir = VssCommandLineUtils.getSsDir(); + + command.setExecutable( ssDir + VssConstants.SS_EXE ); + + command.createArgument().setValue( VssConstants.COMMAND_ADD ); + + VssCommandLineUtils.addFiles( command, fileSet ); + + // command.createArgument().setValue( VssConstants.PROJECT_PREFIX + repo.getProject() ); + + //User identification to get access to vss repository + if ( repo.getUserPassword() != null ) + { + command.createArgument().setValue( VssConstants.FLAG_LOGIN + repo.getUserPassword() ); + } + + //Ignore: Do not ask for input under any circumstances. + command.createArgument().setValue( VssConstants.FLAG_AUTORESPONSE_DEF ); + + return command; + } + + public Commandline buildSetCurrentProjectCmdLine( VssScmProviderRepository repo ) + throws ScmException + { + Commandline command = new Commandline(); + + try + { + command.addSystemEnvironment(); + } + catch ( Exception e ) + { + throw new ScmException( "Can't add system environment.", e ); + } + + command.addEnvironment( "SSDIR", repo.getVssdir() ); + + String ssDir = VssCommandLineUtils.getSsDir(); + + command.setExecutable( ssDir + VssConstants.SS_EXE ); + + command.createArgument().setValue( VssConstants.COMMAND_CP ); + + command.createArgument().setValue( VssConstants.PROJECT_PREFIX + repo.getProject() ); + + //User identification to get access to vss repository + if ( repo.getUserPassword() != null ) + { + command.createArgument().setValue( VssConstants.FLAG_LOGIN + repo.getUserPassword() ); + } + + //Ignore: Do not ask for input under any circumstances. + command.createArgument().setValue( VssConstants.FLAG_AUTORESPONSE_DEF ); + + return command; + } + +} Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/add/VssAddCommand.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/add/VssAddCommand.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/add/VssAddConsumer.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/add/VssAddConsumer.java?view=auto&rev=449398 ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/add/VssAddConsumer.java (added) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/add/VssAddConsumer.java Sun Sep 24 05:41:33 2006 @@ -0,0 +1,85 @@ +package org.apache.maven.scm.provider.vss.commands.add; + +/* + * Copyright 2001-2006 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import org.apache.maven.scm.ScmFile; +import org.apache.maven.scm.ScmFileStatus; +import org.apache.maven.scm.log.ScmLogger; +import org.codehaus.plexus.util.cli.StreamConsumer; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author <a href="mailto:[EMAIL PROTECTED]">Brett Porter</a> + * @version $Id$ + */ +public class VssAddConsumer + implements StreamConsumer +{ + private ScmLogger logger; + + private List addedFiles = new ArrayList(); + + // ---------------------------------------------------------------------- + // + // ---------------------------------------------------------------------- + + public VssAddConsumer( ScmLogger logger ) + { + this.logger = logger; + } + + // ---------------------------------------------------------------------- + // StreamConsumer Implementation + // ---------------------------------------------------------------------- + + public void consumeLine( String line ) + { + if ( line.length() <= 3 ) + { + logger.warn( "Unexpected input, the line must be at least three characters long. Line: '" + line + "'." ); + + return; + } + + String statusString = line.substring( 0, 1 ); + + String file = line.substring( 3 ); + + ScmFileStatus status; + + if ( statusString.equals( "A" ) ) + { + status = ScmFileStatus.ADDED; + } + else + { + logger.info( "Unknown file status: '" + statusString + "'." ); + + return; + } + + addedFiles.add( new ScmFile( file, status ) ); + } + + public List getAddedFiles() + { + return addedFiles; + } + +} Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/add/VssAddConsumer.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/add/VssAddConsumer.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/changelog/VssHistoryCommand.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/changelog/VssHistoryCommand.java?view=diff&rev=449398&r1=449397&r2=449398 ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/changelog/VssHistoryCommand.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/changelog/VssHistoryCommand.java Sun Sep 24 05:41:33 2006 @@ -32,6 +32,10 @@ import java.util.Date; import java.util.Locale; +/** + * @author <a href="mailto:[EMAIL PROTECTED]">Thorsten Riek</a> + * @version $Id: VssHistoryCommand.java 02.06.2006 00:05:29 + */ public class VssHistoryCommand extends AbstractChangeLogCommand { Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/checkout/VssCheckOutCommand.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/checkout/VssCheckOutCommand.java?view=diff&rev=449398&r1=449397&r2=449398 ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/checkout/VssCheckOutCommand.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/checkout/VssCheckOutCommand.java Sun Sep 24 05:41:33 2006 @@ -29,6 +29,10 @@ import org.codehaus.plexus.util.cli.CommandLineUtils; import org.codehaus.plexus.util.cli.Commandline; +/** + * @author <a href="mailto:[EMAIL PROTECTED]">Thorsten Riek</a> + * @version $Id: VssCheckOutCommand.java 02.06.2006 00:05:51 + */ public class VssCheckOutCommand extends AbstractCheckOutCommand { Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommand.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommand.java?view=auto&rev=449398 ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommand.java (added) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommand.java Sun Sep 24 05:41:33 2006 @@ -0,0 +1,130 @@ +package org.apache.maven.scm.provider.vss.commands.edit; + +/* + * 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.changelog.ChangeLogCommand; +import org.apache.maven.scm.command.edit.AbstractEditCommand; +import org.apache.maven.scm.command.edit.EditScmResult; +import org.apache.maven.scm.provider.ScmProviderRepository; +import org.apache.maven.scm.provider.vss.commands.VssCommandLineUtils; +import org.apache.maven.scm.provider.vss.commands.VssConstants; +import org.apache.maven.scm.provider.vss.commands.changelog.VssHistoryCommand; +import org.apache.maven.scm.provider.vss.repository.VssScmProviderRepository; +import org.codehaus.plexus.util.cli.CommandLineUtils; +import org.codehaus.plexus.util.cli.Commandline; + +/** + * @author <a href="mailto:[EMAIL PROTECTED]">Thorsten Riek</a> + * @version $Id: VssCheckOutCommand.java 02.06.2006 00:05:51 + */ +public class VssEditCommand + extends AbstractEditCommand +{ + + protected ScmResult executeEditCommand( ScmProviderRepository repository, ScmFileSet fileSet ) + throws ScmException + { + getLogger().debug( "executing checkout command..." ); + + VssScmProviderRepository repo = (VssScmProviderRepository) repository; + + Commandline cl = buildCmdLine( repo, fileSet); + + VssEditConsumer consumer = new VssEditConsumer( repo, getLogger() ); + + // TODO handle deleted files from VSS + CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer(); + + int exitCode; + + getLogger().debug( "Executing: " + cl.getWorkingDirectory().getAbsolutePath() + ">>" + cl.toString() ); + + exitCode = VssCommandLineUtils.executeCommandline( cl, consumer, stderr, getLogger() ); + + if ( exitCode != 0 ) + { + String error = stderr.getOutput(); + getLogger().debug( "VSS returns error: [" + error + "] return code: [" + exitCode + "]" ); + if ( error.indexOf( "A writable copy of" ) < 0 ) + { + return new EditScmResult( cl.toString(), "The vss command failed.", error, false ); + } + // print out the writable copy for manual handling + getLogger().warn( error ); + } + + return new EditScmResult( cl.toString(), consumer.getUpdatedFiles() ); + } + + public Commandline buildCmdLine( VssScmProviderRepository repo, ScmFileSet fileSet ) + throws ScmException + { + + Commandline command = new Commandline(); + + command.setWorkingDirectory( fileSet.getBasedir().getAbsolutePath() ); + + try + { + command.addSystemEnvironment(); + } + catch ( Exception e ) + { + throw new ScmException( "Can't add system environment.", e ); + } + + command.addEnvironment( "SSDIR", repo.getVssdir() ); + + String ssDir = VssCommandLineUtils.getSsDir(); + + command.setExecutable( ssDir + VssConstants.SS_EXE ); + + command.createArgument().setValue( VssConstants.COMMAND_CHECKOUT ); + + command.createArgument().setValue( VssConstants.PROJECT_PREFIX + repo.getProject() ); + + //User identification to get access to vss repository + if ( repo.getUserPassword() != null ) + { + command.createArgument().setValue( VssConstants.FLAG_LOGIN + repo.getUserPassword() ); + } + + //Display the history of an entire project list + command.createArgument().setValue( VssConstants.FLAG_RECURSION ); + + //Ignore: Do not ask for input under any circumstances. + command.createArgument().setValue( VssConstants.FLAG_AUTORESPONSE_DEF ); + + return command; + } + + /** + * @see org.apache.maven.scm.command.checkout.AbstractCheckOutCommand#getChangeLogCommand() + */ + protected ChangeLogCommand getChangeLogCommand() + { + VssHistoryCommand command = new VssHistoryCommand(); + + command.setLogger( getLogger() ); + + return command; + } + +} Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommand.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommand.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditConsumer.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditConsumer.java?view=auto&rev=449398 ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditConsumer.java (added) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditConsumer.java Sun Sep 24 05:41:33 2006 @@ -0,0 +1,200 @@ +package org.apache.maven.scm.provider.vss.commands.edit; + +/* + * 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 java.util.ArrayList; +import java.util.List; + +import org.apache.maven.scm.ScmFile; +import org.apache.maven.scm.ScmFileStatus; +import org.apache.maven.scm.log.ScmLogger; +import org.apache.maven.scm.provider.vss.commands.VssConstants; +import org.apache.maven.scm.provider.vss.repository.VssScmProviderRepository; +import org.apache.maven.scm.util.AbstractConsumer; +import org.codehaus.plexus.util.cli.StreamConsumer; + +/** + * @author <a href="mailto:[EMAIL PROTECTED]">Thorsten Riek</a> + * @version $Id$ + */ +public class VssEditConsumer + extends AbstractConsumer + implements StreamConsumer +{ + + /** + * expecting file information + */ + private static final int GET_UNKNOWN = 0; + + /** + * expecting file information + */ + private static final int GET_FILE = 1; + + /** + * expecting file information + */ + private static final int CURRENTLY_CHECKED_OUT_FILE = 2; + + /** + * expecting file path information + */ + private static final int GET_FILE_PATH = 3; + + /** + * expecting writable copy + */ + private static final int IS_WRITABLE_COPY = 4; + + /** + * expecting working folder + */ + private static final int SET_WORKING_FOLDER = 5; + + /** + * Marks start of file data + */ + private static String START_FILE_PATH = "$/"; + + /** + * Marks getting a new File + */ + private static final String START_GETTING = "Getting"; + + /** + * Marks replacing a old File + */ + private static final String START_CURRENTLY_CHECKED_OUT = "You currently have file"; + + /** + * Marks a writable copy of a File / maybe a conflict + */ + private static final String START_WRITABLE_COPY = "A writable "; + + /** + * Marks "Set the default folder for project" question + */ + private static final String CONTAINS_SET_DEFAULT_WORKING_FOLDER = "as the default folder for project"; + + private String currentPath = ""; + + private List updatedFiles = new ArrayList(); + + private VssScmProviderRepository repo; + + public VssEditConsumer( VssScmProviderRepository repo, ScmLogger logger ) + { + super( logger ); + this.repo = repo; + } + + public void consumeLine( String line ) + { + getLogger().debug( line ); + + switch ( getLineStatus( line ) ) + { + case GET_FILE_PATH: + processGetFilePath( line ); + break; + case GET_FILE: + processGetFile( line ); + break; + case CURRENTLY_CHECKED_OUT_FILE: + processReplaceFile( line ); + break; + case IS_WRITABLE_COPY: + // will be overwritten and uses REPLACE_FILE + break; + case SET_WORKING_FOLDER: + // to trash + break; + default: + break; + } + } + + /** + * Process the current input line in the Get File state. + * + * @param line a line of text from the VSS log output + */ + private void processGetFile( String line ) + { + String[] fileLine = line.split( " " ); + updatedFiles.add( new ScmFile( currentPath + "/" + fileLine[1], ScmFileStatus.UPDATED ) ); + getLogger().info( fileLine[0] + ": " + currentPath + "/" + fileLine[1] ); + } + + /** + * Process the current input line in the Replace File state. + * + * @param line a line of text from the VSS log output + */ + private void processReplaceFile( String line ) + { +// updatedFiles.add( new ScmFile( currentPath + "/" + line.substring(START_CURRENTLY_CHECKED_OUT.length()), ScmFileStatus.UPDATED ) ); + getLogger().info( START_CURRENTLY_CHECKED_OUT + currentPath + "/" + line.substring(START_CURRENTLY_CHECKED_OUT.length()) ); + } + + /** + * Process the current input line in the Get File Path state. + * + * @param line a line of text from the VSS log output + */ + private void processGetFilePath( String line ) + { + currentPath = line.substring( (VssConstants.PROJECT_PREFIX + repo.getProject()).length() , + line.length() - 1 ); + } + + /** + * Identify the status of a vss get line + * + * @param line The line to process + * @return status + */ + private int getLineStatus( String line ) + { + int argument = GET_UNKNOWN; + if ( line.startsWith( START_FILE_PATH ) ) + { + argument = GET_FILE_PATH; + } + else if ( line.startsWith( START_CURRENTLY_CHECKED_OUT ) ) + { + argument = CURRENTLY_CHECKED_OUT_FILE; + } + else if ( line.startsWith( START_WRITABLE_COPY ) ) + { + argument = IS_WRITABLE_COPY; + } + else if ( line.indexOf( CONTAINS_SET_DEFAULT_WORKING_FOLDER ) != -1 ) + { + argument = SET_WORKING_FOLDER; + } + + return argument; + } + + public List getUpdatedFiles() + { + return updatedFiles; + } + +} Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditConsumer.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditConsumer.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/status/VssStatusCommand.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/status/VssStatusCommand.java?view=diff&rev=449398&r1=449397&r2=449398 ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/status/VssStatusCommand.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/status/VssStatusCommand.java Sun Sep 24 05:41:33 2006 @@ -29,6 +29,10 @@ import org.codehaus.plexus.util.cli.CommandLineUtils; import org.codehaus.plexus.util.cli.Commandline; +/** + * @author <a href="mailto:[EMAIL PROTECTED]">Thorsten Riek</a> + * @version $Id$ + */ public class VssStatusCommand extends AbstractStatusCommand { Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/status/VssStatusConsumer.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/status/VssStatusConsumer.java?view=diff&rev=449398&r1=449397&r2=449398 ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/status/VssStatusConsumer.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/status/VssStatusConsumer.java Sun Sep 24 05:41:33 2006 @@ -68,11 +68,6 @@ private static final int DIFF_START_DIFFING_LOCAL = 5; /** - * Marks start of file data - */ - private static String START_FILE_PATH = "$/"; - - /** * Marks Diffing remote project folder */ private static final String START_DIFFING_REMOTE = "Diffing:"; @@ -82,32 +77,20 @@ */ private static final String START_DIFFING_LOCAL = "Against:"; - // Diffing: $/com.fum/fum-utilities - // Against: D:\work\fum-utilities - /** * Marks Local files not in the current project */ private static final String LOCAL_FILES_NOT_IN_PROJECT = "Local files not in the current project:"; - // .classpath .project Diff.txt getVSS.xml out.txt - /** * Marks SourceSafe files different from local files */ private static final String VSS_FILES_DIFFERENT_FROM_LOCAL_FILES = "SourceSafe files different from local files:"; - // .classpath .project Diff.txt getVSS.xml out.txt - /** * Marks SourceSafe files not in the current folder */ private static final String VSS_FILES_NOT_IN_CURRENT_FOLDER = "SourceSafe files not in the current folder:"; - - /** - * Marks "Set the default folder for project" question - */ - private static final String CONTAINS_SET_DEFAULT_WORKING_FOLDER = "as the default folder for project"; private String remoteProjectFolder = ""; Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/update/VssUpdateCommand.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/update/VssUpdateCommand.java?view=diff&rev=449398&r1=449397&r2=449398 ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/update/VssUpdateCommand.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/commands/update/VssUpdateCommand.java Sun Sep 24 05:41:33 2006 @@ -29,6 +29,10 @@ import org.codehaus.plexus.util.cli.CommandLineUtils; import org.codehaus.plexus.util.cli.Commandline; +/** + * @author <a href="mailto:[EMAIL PROTECTED]">Thorsten Riek</a> + * @version $Id$ + */ public class VssUpdateCommand extends AbstractUpdateCommand { Modified: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/repository/VssScmProviderRepository.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/repository/VssScmProviderRepository.java?view=diff&rev=449398&r1=449397&r2=449398 ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/repository/VssScmProviderRepository.java (original) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/main/java/org/apache/maven/scm/provider/vss/repository/VssScmProviderRepository.java Sun Sep 24 05:41:33 2006 @@ -19,6 +19,10 @@ import org.apache.maven.scm.provider.ScmProviderRepository; import org.codehaus.plexus.util.StringUtils; +/** + * @author <a href="mailto:[EMAIL PROTECTED]">Thorsten Riek</a> + * @version $Id$ + */ public class VssScmProviderRepository extends ScmProviderRepository { Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/add/VssAddCommandTest.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/add/VssAddCommandTest.java?view=auto&rev=449398 ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/add/VssAddCommandTest.java (added) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/add/VssAddCommandTest.java Sun Sep 24 05:41:33 2006 @@ -0,0 +1,73 @@ +package org.apache.maven.scm.provider.vss.commands.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 java.io.File; + +import org.apache.maven.scm.ScmFileSet; +import org.apache.maven.scm.ScmTestCase; +import org.apache.maven.scm.manager.ScmManager; +import org.apache.maven.scm.provider.vss.commands.VssCommandLineUtils; +import org.apache.maven.scm.provider.vss.repository.VssScmProviderRepository; +import org.apache.maven.scm.repository.ScmRepository; +import org.codehaus.plexus.util.cli.Commandline; + +/** + * @author <a href="mailto:[EMAIL PROTECTED]">Emmanuel Venisse</a> + * @version $Id$ + */ +public class VssAddCommandTest + extends ScmTestCase +{ + private ScmManager scmManager; + + public void setUp() + throws Exception + { + super.setUp(); + + scmManager = getScmManager(); + } + + public void testBuildCmdLine() + throws Exception + { + ScmRepository repository = + scmManager.makeScmRepository( "scm:vss|username|[EMAIL PROTECTED]:/Program File/Visual Source Safe|D:/myProject" ); + ScmFileSet fileSet = new ScmFileSet( getTestFile( "target" ) ); + VssAddCommand command = new VssAddCommand(); + Commandline cl = command.buildCmdLine( (VssScmProviderRepository) repository.getProviderRepository(), fileSet); + String ssPath = VssCommandLineUtils.getSsDir().replace( '/', File.separatorChar ); + assertEquals( ssPath + "ss Add -Yusername,password -I-", + cl.toString() ); + } + + public void testBuildSetCurrentProjectCmdLine() + throws Exception +{ + ScmRepository repository = + scmManager.makeScmRepository( "scm:vss|username|[EMAIL PROTECTED]:/Program File/Visual Source Safe|D:/myProject" ); + VssAddCommand command = new VssAddCommand(); + Commandline cl = command.buildSetCurrentProjectCmdLine( (VssScmProviderRepository) repository.getProviderRepository()); + String ssPath = VssCommandLineUtils.getSsDir().replace( '/', File.separatorChar ); + assertEquals( ssPath + "ss CP $D:/myProject -Yusername,password -I-", + cl.toString() ); +} + + + +} Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/add/VssAddCommandTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/add/VssAddCommandTest.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.java URL: http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.java?view=auto&rev=449398 ============================================================================== --- maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.java (added) +++ maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.java Sun Sep 24 05:41:33 2006 @@ -0,0 +1,58 @@ +package org.apache.maven.scm.provider.vss.commands.edit; + +/* + * 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 java.io.File; + +import org.apache.maven.scm.ScmFileSet; +import org.apache.maven.scm.ScmTestCase; +import org.apache.maven.scm.manager.ScmManager; +import org.apache.maven.scm.provider.vss.commands.VssCommandLineUtils; +import org.apache.maven.scm.provider.vss.repository.VssScmProviderRepository; +import org.apache.maven.scm.repository.ScmRepository; +import org.codehaus.plexus.util.cli.Commandline; + +/** + * @author <a href="mailto:[EMAIL PROTECTED]">Emmanuel Venisse</a> + * @version $Id$ + */ +public class VssEditCommandTest + extends ScmTestCase +{ + private ScmManager scmManager; + + public void setUp() + throws Exception + { + super.setUp(); + + scmManager = getScmManager(); + } + + public void testCommandLine() + throws Exception + { + ScmRepository repository = + scmManager.makeScmRepository( "scm:vss|username|[EMAIL PROTECTED]:/Program File/Visual Source Safe|D:/myProject" ); + ScmFileSet fileSet = new ScmFileSet( getTestFile( "target" ) ); + VssEditCommand command = new VssEditCommand(); + Commandline cl = command.buildCmdLine( (VssScmProviderRepository) repository.getProviderRepository(), fileSet ); + String ssPath = VssCommandLineUtils.getSsDir().replace( '/', File.separatorChar ); + assertEquals( ssPath + "ss Checkout $D:/myProject -Yusername,password -R -I-", + cl.toString() ); + } +} Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/scm/trunk/maven-scm-providers/maven-scm-provider-vss/src/test/java/org/apache/maven/scm/provider/vss/commands/edit/VssEditCommandTest.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision"