not really tested, but they look the same as all the other vss tasks that went in untested 8-) PR: 7153 Submitted by: Nigel Magnay <Nigel.Magnay@Parsec.co.uk> git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271930 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -13,6 +13,7 @@ | |||
| <li>Martin Poeschl (<a href="mailto:mpoeschl@marmot.at">mpoeschl@marmot.at</a>)</li> | |||
| <li>Phillip Wells</li> | |||
| <li>Jon Skeet (<a href="mailto:jon.skeet@peramon.com">jon.skeet@peramon.com</a>)</li> | |||
| <li>Nigel Magnay (<a href="mailto:nigel.magnay@parsec.co.uk">nigel.magnay@parsec.co.uk</a>)</li> | |||
| </ul> | |||
| <p>2001/04/29</p> | |||
| <hr> | |||
| @@ -53,6 +54,14 @@ they were primarily intended to be used by automated build systems.</p> | |||
| <td><a href="#vsscheckout">vsscheckout</a></td> | |||
| <td>Copies a file from the current project to the current folder, for the purpose of editing.</td> | |||
| </tr> | |||
| <tr> | |||
| <td><a href="#vssadd">vssadd</a></td> | |||
| <td>Adds a new file into the VSS Archive</td> | |||
| </tr> | |||
| <tr> | |||
| <td><a href="#vsscp">vsscp</a></td> | |||
| <td>Change the current project being used in VSS</td> | |||
| </tr> | |||
| </table> | |||
| <hr> | |||
| @@ -536,7 +545,126 @@ label only one will be used in the order version, date, label.</p> | |||
| </p> | |||
| <hr> | |||
| <p align="center">Copyright © 2001 Apache Software Foundation. All rights | |||
| <!-- VSSADD --> | |||
| <h2><a name="vssadd">VssAdd</a></h2> | |||
| <h3>Description</h3> | |||
| Task to perform ADD commands to Microsoft Visual SourceSafe. | |||
| <h3>Parameters</h3> | |||
| <table border="1" cellpadding="2" cellspacing="0"> | |||
| <tr> | |||
| <th>Attribute</th> | |||
| <th>Values</th> | |||
| <th>Required</th> | |||
| </tr> | |||
| <tr> | |||
| <td>localpath</td> | |||
| <td>Specify the local file(s) to add to VSS</td> | |||
| <td>Yes</td> | |||
| </tr> | |||
| <tr> | |||
| <td>login</td> | |||
| <td>username[,password] - The username and password needed to get access | |||
| to VSS. Note that you may need to specify both (if you have a password) - | |||
| Ant/VSS will hang if you leave the password out and VSS does not accept | |||
| login without a password. </td> | |||
| <td>No</td> | |||
| </tr> | |||
| <tr> | |||
| <td>ssdir</td> | |||
| <td>directory where <code>ss.exe</code> resides. By default the | |||
| task expects it to be in the PATH.</td> | |||
| <td>No</td> | |||
| </tr> | |||
| <tr> | |||
| <td>serverPath</td> | |||
| <td>directory where <code>srssafe.ini</code> resides.</td> | |||
| <td>No</td> | |||
| </tr> | |||
| <tr> | |||
| <td>writable</td> | |||
| <td>true or false</td> | |||
| <td>No</td> | |||
| </tr> | |||
| <tr> | |||
| <td>recursive</td> | |||
| <td>true or false</td> | |||
| <td>No</td> | |||
| </tr> | |||
| <tr> | |||
| <td>comment</td> | |||
| <td>Comment to use for the files that where checked in.</td> | |||
| <td>No</td> | |||
| </tr> | |||
| <tr> | |||
| <td>autoresponse</td> | |||
| <td>'Y', 'N' or empty. Specify how to reply to questions from VSS.</td> | |||
| <td>No</td> | |||
| </tr> | |||
| </table> | |||
| <h3>Examples</h3> | |||
| <blockquote> | |||
| <pre> | |||
| <vssadd localpath="D:\build\build.00012.zip" | |||
| comment="Added by automatic build"/> | |||
| </pre> | |||
| </blockquote> | |||
| <p>Add the file named build.00012.zip into the project current working | |||
| directory (see vsscp).</p> | |||
| <hr> | |||
| <!-- VSSCP --> | |||
| <h2><a name="vsscp">VssCp</a></h2> | |||
| <h3>Description</h3> | |||
| <p>Task to perform CP (Change Project) commands to Microsoft Visual SourceSafe.</p> | |||
| <p>This task is typically used before a VssAdd in order to set the target project</p> | |||
| <h3>Parameters</h3> | |||
| <table border="1" cellpadding="2" cellspacing="0"> | |||
| <tr> | |||
| <th>Attribute</th> | |||
| <th>Values</th> | |||
| <th>Required</th> | |||
| </tr> | |||
| <tr> | |||
| <td>vsspath</td> | |||
| <td>SourceSafe path which specifies the project you wish to | |||
| make the current project. You should not specify the leading dollar-sign - | |||
| it is prepended by Ant automatically.</td> | |||
| <td>Yes</td> | |||
| </tr> | |||
| <tr> | |||
| <td>login</td> | |||
| <td>username[,password] - The username and password needed to get access | |||
| to VSS. Note that you may need to specify both (if you have a password) - | |||
| Ant/VSS will hang if you leave the password out and VSS does not accept | |||
| login without a password. </td> | |||
| <td>No</td> | |||
| </tr> | |||
| <tr> | |||
| <td>ssdir</td> | |||
| <td>directory where <code>ss.exe</code> resides. By default the | |||
| task expects it to be in the PATH.</td> | |||
| <td>No</td> | |||
| </tr> | |||
| <tr> | |||
| <td>serverPath</td> | |||
| <td>directory where <code>srssafe.ini</code> resides.</td> | |||
| <td>No</td> | |||
| </tr> | |||
| </table> | |||
| <h3>Examples</h3> | |||
| <blockquote> | |||
| <pre> | |||
| <vsscp vsspath="/Projects/ant"/> | |||
| </pre> | |||
| </blockquote> | |||
| <p>Sets the current VSS project to <i>$/Projects/ant</i>.</p> | |||
| <hr> | |||
| <p align="center">Copyright © 2001-2002 Apache Software Foundation. All rights | |||
| Reserved.</p> | |||
| </body> | |||
| </html> | |||
| @@ -72,7 +72,13 @@ ejbc=org.apache.tools.ant.taskdefs.optional.ejb.Ejbc | |||
| ddcreator=org.apache.tools.ant.taskdefs.optional.ejb.DDCreator | |||
| wlrun=org.apache.tools.ant.taskdefs.optional.ejb.WLRun | |||
| wlstop=org.apache.tools.ant.taskdefs.optional.ejb.WLStop | |||
| vssadd=org.apache.tools.ant.taskdefs.optional.vss.MSVSSADD | |||
| vsscheckin=org.apache.tools.ant.taskdefs.optional.vss.MSVSSCHECKIN | |||
| vsscheckout=org.apache.tools.ant.taskdefs.optional.vss.MSVSSCHECKOUT | |||
| vsscp=org.apache.tools.ant.taskdefs.optional.vss.MSVSSCP | |||
| vssget=org.apache.tools.ant.taskdefs.optional.vss.MSVSSGET | |||
| vsshistory=org.apache.tools.ant.taskdefs.optional.vss.MSVSSHISTORY | |||
| vsslabel=org.apache.tools.ant.taskdefs.optional.vss.MSVSSLABEL | |||
| ejbjar=org.apache.tools.ant.taskdefs.optional.ejb.EjbJar | |||
| mparse=org.apache.tools.ant.taskdefs.optional.metamata.MParse | |||
| mmetrics=org.apache.tools.ant.taskdefs.optional.metamata.MMetrics | |||
| @@ -199,6 +199,14 @@ public abstract class MSVSS extends Task { | |||
| /** */ | |||
| public final static String PROJECT_PREFIX = "$"; | |||
| /** | |||
| * The 'CP' command | |||
| */ | |||
| public final static String COMMAND_CP = "CP"; | |||
| /** | |||
| * The 'Add' command | |||
| */ | |||
| public final static String COMMAND_ADD = "Add"; | |||
| /** | |||
| * The 'Get' command | |||
| */ | |||
| @@ -0,0 +1,218 @@ | |||
| /* | |||
| * The Apache Software License, Version 1.1 | |||
| * | |||
| * Copyright (c) 2002 The Apache Software Foundation. All rights | |||
| * reserved. | |||
| * | |||
| * Redistribution and use in source and binary forms, with or without | |||
| * modification, are permitted provided that the following conditions | |||
| * are met: | |||
| * | |||
| * 1. Redistributions of source code must retain the above copyright | |||
| * notice, this list of conditions and the following disclaimer. | |||
| * | |||
| * 2. Redistributions in binary form must reproduce the above copyright | |||
| * notice, this list of conditions and the following disclaimer in | |||
| * the documentation and/or other materials provided with the | |||
| * distribution. | |||
| * | |||
| * 3. The end-user documentation included with the redistribution, if | |||
| * any, must include the following acknowlegement: | |||
| * "This product includes software developed by the | |||
| * Apache Software Foundation (http://www.apache.org/)." | |||
| * Alternately, this acknowlegement may appear in the software itself, | |||
| * if and wherever such third-party acknowlegements normally appear. | |||
| * | |||
| * 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
| * Foundation" must not be used to endorse or promote products derived | |||
| * from this software without prior written permission. For written | |||
| * permission, please contact apache@apache.org. | |||
| * | |||
| * 5. Products derived from this software may not be called "Apache" | |||
| * nor may "Apache" appear in their names without prior written | |||
| * permission of the Apache Group. | |||
| * | |||
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
| * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
| * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
| * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
| * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
| * SUCH DAMAGE. | |||
| * ==================================================================== | |||
| * | |||
| * This software consists of voluntary contributions made by many | |||
| * individuals on behalf of the Apache Software Foundation. For more | |||
| * information on the Apache Software Foundation, please see | |||
| * <http://www.apache.org/>. | |||
| */ | |||
| package org.apache.tools.ant.taskdefs.optional.vss; | |||
| import org.apache.tools.ant.BuildException; | |||
| import org.apache.tools.ant.types.Commandline; | |||
| import org.apache.tools.ant.types.Path; | |||
| import java.io.File; | |||
| /** | |||
| * Task to perform Add commands to Microsoft Visual Source Safe. | |||
| * Based on the VSS Checkin code by Martin Poeschl | |||
| * | |||
| * @author Nigel Magnay | |||
| */ | |||
| public class MSVSSADD extends MSVSS { | |||
| private String m_LocalPath = null; | |||
| private boolean m_Recursive = false; | |||
| private boolean m_Writable = false; | |||
| private String m_AutoResponse = null; | |||
| private String m_Comment = "-"; | |||
| /** | |||
| * Executes the task. | |||
| * <p> | |||
| * Builds a command line to execute ss and then calls Exec's run method | |||
| * to execute the command line. | |||
| */ | |||
| public void execute() throws BuildException { | |||
| Commandline commandLine = new Commandline(); | |||
| int result = 0; | |||
| // first off, make sure that we've got a command and a localPath ... | |||
| if (getLocalPath() == null) { | |||
| String msg = "localPath attribute must be set!"; | |||
| throw new BuildException(msg, location); | |||
| } | |||
| // now look for illegal combinations of things ... | |||
| // build the command line from what we got the format is | |||
| // ss Add VSS items [-B] [-C] [-D-] [-H] [-I-] [-K] [-N] [-O] [-R] [-W] [-Y] [-?] | |||
| // as specified in the SS.EXE help | |||
| commandLine.setExecutable(getSSCommand()); | |||
| commandLine.createArgument().setValue(COMMAND_ADD); | |||
| // VSS items | |||
| commandLine.createArgument().setValue(getLocalPath()); | |||
| // -I- or -I-Y or -I-N | |||
| getAutoresponse(commandLine); | |||
| // -R | |||
| getRecursiveCommand(commandLine); | |||
| // -W | |||
| getWritableCommand(commandLine); | |||
| // -Y | |||
| getLoginCommand(commandLine); | |||
| // -C | |||
| commandLine.createArgument().setValue("-C"+getComment()); | |||
| result = run(commandLine); | |||
| if ( result != 0 ) { | |||
| String msg = "Failed executing: " + commandLine.toString(); | |||
| throw new BuildException(msg, location); | |||
| } | |||
| } | |||
| /** | |||
| * Set behaviour recursive or non-recursive | |||
| */ | |||
| public void setRecursive(boolean recursive) { | |||
| m_Recursive = recursive; | |||
| } | |||
| /** | |||
| * @return the 'recursive' command if the attribute was 'true', otherwise an empty string | |||
| */ | |||
| public void getRecursiveCommand(Commandline cmd) { | |||
| if ( !m_Recursive ) { | |||
| return; | |||
| } else { | |||
| cmd.createArgument().setValue(FLAG_RECURSION); | |||
| } | |||
| } | |||
| /** | |||
| * Set behaviour, used in get command to make files that are 'got' writable | |||
| */ | |||
| public final void setWritable(boolean argWritable) { | |||
| m_Writable = argWritable; | |||
| } | |||
| /** | |||
| * @return the 'make writable' command if the attribute was 'true', otherwise an empty string | |||
| */ | |||
| public void getWritableCommand(Commandline cmd) { | |||
| if ( !m_Writable ) { | |||
| return; | |||
| } else { | |||
| cmd.createArgument().setValue(FLAG_WRITABLE); | |||
| } | |||
| } | |||
| public void setAutoresponse(String response){ | |||
| if ( response.equals("") || response.equals("null") ) { | |||
| m_AutoResponse = null; | |||
| } else { | |||
| m_AutoResponse = response; | |||
| } | |||
| } | |||
| /** | |||
| * Checks the value set for the autoResponse. | |||
| * if it equals "Y" then we return -I-Y | |||
| * if it equals "N" then we return -I-N | |||
| * otherwise we return -I | |||
| */ | |||
| public void getAutoresponse(Commandline cmd) { | |||
| if ( m_AutoResponse == null) { | |||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF); | |||
| } else if ( m_AutoResponse.equalsIgnoreCase("Y")) { | |||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_YES); | |||
| } else if ( m_AutoResponse.equalsIgnoreCase("N")) { | |||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_NO); | |||
| }else { | |||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF); | |||
| } // end of else | |||
| } | |||
| /** | |||
| * Set the comment to apply in SourceSafe | |||
| * <p> | |||
| * If this is null or empty, it will be replaced with "-" which | |||
| * is what SourceSafe uses for an empty comment. | |||
| */ | |||
| public void setComment(String comment) { | |||
| if ( comment.equals("") || comment.equals("null") ) { | |||
| m_Comment = "-"; | |||
| } else { | |||
| m_Comment = comment; | |||
| } | |||
| } | |||
| /** | |||
| * Gets the comment to be applied. | |||
| * @return the comment to be applied. | |||
| */ | |||
| public String getComment() { | |||
| return m_Comment; | |||
| } | |||
| /** | |||
| * Set the local path. | |||
| */ | |||
| public void setLocalpath(Path localPath) { | |||
| m_LocalPath = localPath.toString(); | |||
| } | |||
| public String getLocalPath() { | |||
| return m_LocalPath; | |||
| } | |||
| } | |||
| @@ -0,0 +1,141 @@ | |||
| /* | |||
| * The Apache Software License, Version 1.1 | |||
| * | |||
| * Copyright (c) 2002 The Apache Software Foundation. All rights | |||
| * reserved. | |||
| * | |||
| * Redistribution and use in source and binary forms, with or without | |||
| * modification, are permitted provided that the following conditions | |||
| * are met: | |||
| * | |||
| * 1. Redistributions of source code must retain the above copyright | |||
| * notice, this list of conditions and the following disclaimer. | |||
| * | |||
| * 2. Redistributions in binary form must reproduce the above copyright | |||
| * notice, this list of conditions and the following disclaimer in | |||
| * the documentation and/or other materials provided with the | |||
| * distribution. | |||
| * | |||
| * 3. The end-user documentation included with the redistribution, if | |||
| * any, must include the following acknowlegement: | |||
| * "This product includes software developed by the | |||
| * Apache Software Foundation (http://www.apache.org/)." | |||
| * Alternately, this acknowlegement may appear in the software itself, | |||
| * if and wherever such third-party acknowlegements normally appear. | |||
| * | |||
| * 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
| * Foundation" must not be used to endorse or promote products derived | |||
| * from this software without prior written permission. For written | |||
| * permission, please contact apache@apache.org. | |||
| * | |||
| * 5. Products derived from this software may not be called "Apache" | |||
| * nor may "Apache" appear in their names without prior written | |||
| * permission of the Apache Group. | |||
| * | |||
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
| * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
| * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
| * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
| * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
| * SUCH DAMAGE. | |||
| * ==================================================================== | |||
| * | |||
| * This software consists of voluntary contributions made by many | |||
| * individuals on behalf of the Apache Software Foundation. For more | |||
| * information on the Apache Software Foundation, please see | |||
| * <http://www.apache.org/>. | |||
| */ | |||
| package org.apache.tools.ant.taskdefs.optional.vss; | |||
| import org.apache.tools.ant.BuildException; | |||
| import org.apache.tools.ant.types.Commandline; | |||
| import org.apache.tools.ant.types.Path; | |||
| import java.io.File; | |||
| /** | |||
| * Task to perform CP (Change Project) commands to Microsoft Visual Source Safe. | |||
| * Based on the VSS Checkin code by Martin Poeschl | |||
| * | |||
| * @author Nigel Magnay | |||
| * | |||
| * @ant.task name="vsscp" category="scm" | |||
| */ | |||
| public class MSVSSCP extends MSVSS { | |||
| private String m_AutoResponse = null; | |||
| /** | |||
| * Executes the task. | |||
| * <p> | |||
| * Builds a command line to execute ss and then calls Exec's run method | |||
| * to execute the command line. | |||
| */ | |||
| public void execute() throws BuildException { | |||
| Commandline commandLine = new Commandline(); | |||
| int result = 0; | |||
| // first off, make sure that we've got a command and a vssdir ... | |||
| if (getVsspath() == null) { | |||
| String msg = "vsspath attribute must be set!"; | |||
| throw new BuildException(msg, location); | |||
| } | |||
| // now look for illegal combinations of things ... | |||
| // build the command line from what we got the format is | |||
| // ss CP VSS items [-H] [-I-] [-Y] [-?] | |||
| // as specified in the SS.EXE help | |||
| commandLine.setExecutable(getSSCommand()); | |||
| commandLine.createArgument().setValue(COMMAND_CP); | |||
| // VSS items | |||
| commandLine.createArgument().setValue(getVsspath()); | |||
| // -I- or -I-Y or -I-N | |||
| getAutoresponse(commandLine); | |||
| // -Y | |||
| getLoginCommand(commandLine); | |||
| result = run(commandLine); | |||
| if ( result != 0 ) { | |||
| String msg = "Failed executing: " + commandLine.toString(); | |||
| throw new BuildException(msg, location); | |||
| } | |||
| } | |||
| public void setAutoresponse(String response) { | |||
| if ( response.equals("") || response.equals("null") ) { | |||
| m_AutoResponse = null; | |||
| } else { | |||
| m_AutoResponse = response; | |||
| } | |||
| } | |||
| /** | |||
| * Checks the value set for the autoResponse. | |||
| * if it equals "Y" then we return -I-Y | |||
| * if it equals "N" then we return -I-N | |||
| * otherwise we return -I | |||
| */ | |||
| public void getAutoresponse(Commandline cmd) { | |||
| if ( m_AutoResponse == null) { | |||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF); | |||
| } else if ( m_AutoResponse.equalsIgnoreCase("Y")) { | |||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_YES); | |||
| } else if ( m_AutoResponse.equalsIgnoreCase("N")) { | |||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_NO); | |||
| }else { | |||
| cmd.createArgument().setValue(FLAG_AUTORESPONSE_DEF); | |||
| } // end of else | |||
| } | |||
| } | |||