diff --git a/docs/manual/OptionalTasks/vss.html b/docs/manual/OptionalTasks/vss.html index 2d0cbeadd..f66c0482b 100644 --- a/docs/manual/OptionalTasks/vss.html +++ b/docs/manual/OptionalTasks/vss.html @@ -13,6 +13,7 @@
  • Martin Poeschl (mpoeschl@marmot.at)
  • Phillip Wells
  • Jon Skeet (jon.skeet@peramon.com)
  • +
  • Nigel Magnay (nigel.magnay@parsec.co.uk)
  • 2001/04/29


    @@ -53,6 +54,14 @@ they were primarily intended to be used by automated build systems.

    vsscheckout Copies a file from the current project to the current folder, for the purpose of editing. + + vssadd + Adds a new file into the VSS Archive + + + vsscp + Change the current project being used in VSS +
    @@ -536,7 +545,126 @@ label only one will be used in the order version, date, label.


    -

    Copyright © 2001 Apache Software Foundation. All rights + + +

    VssAdd

    +

    Description

    +Task to perform ADD commands to Microsoft Visual SourceSafe. +

    Parameters

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    AttributeValuesRequired
    localpathSpecify the local file(s) to add to VSSYes
    loginusername[,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. No
    ssdirdirectory where ss.exe resides. By default the + task expects it to be in the PATH.No
    serverPathdirectory where srssafe.ini resides.No
    writabletrue or falseNo
    recursivetrue or falseNo
    commentComment to use for the files that where checked in.No
    autoresponse'Y', 'N' or empty. Specify how to reply to questions from VSS.No
    + +

    Examples

    +
    +
    +<vssadd localpath="D:\build\build.00012.zip"
    +            comment="Added by automatic build"/>
    +
    +
    +

    Add the file named build.00012.zip into the project current working +directory (see vsscp).

    +
    + + + +

    VssCp

    +

    Description

    +

    Task to perform CP (Change Project) commands to Microsoft Visual SourceSafe.

    +

    This task is typically used before a VssAdd in order to set the target project

    +

    Parameters

    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    AttributeValuesRequired
    vsspathSourceSafe 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.Yes
    loginusername[,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. No
    ssdirdirectory where ss.exe resides. By default the + task expects it to be in the PATH.No
    serverPathdirectory where srssafe.ini resides.No
    + +

    Examples

    +
    +
    +<vsscp vsspath="/Projects/ant"/>
    +
    +
    +

    Sets the current VSS project to $/Projects/ant.

    +
    + +

    Copyright © 2001-2002 Apache Software Foundation. All rights Reserved.

    diff --git a/src/main/org/apache/tools/ant/taskdefs/defaults.properties b/src/main/org/apache/tools/ant/taskdefs/defaults.properties index 157676153..99dd5b71f 100644 --- a/src/main/org/apache/tools/ant/taskdefs/defaults.properties +++ b/src/main/org/apache/tools/ant/taskdefs/defaults.properties @@ -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 diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSS.java b/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSS.java index dfdda426c..d5999be1c 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSS.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSS.java @@ -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 */ diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSADD.java b/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSADD.java new file mode 100644 index 000000000..07ad9ce59 --- /dev/null +++ b/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSADD.java @@ -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 + * . + */ + +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. + *

    + * 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 + *

    + * 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; + } +} diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSCP.java b/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSCP.java new file mode 100644 index 000000000..b8af7584e --- /dev/null +++ b/src/main/org/apache/tools/ant/taskdefs/optional/vss/MSVSSCP.java @@ -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 + * . + */ + +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. + *

    + * 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 + + } +}