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>Martin Poeschl (<a href="mailto:mpoeschl@marmot.at">mpoeschl@marmot.at</a>)</li> | ||||
<li>Phillip Wells</li> | <li>Phillip Wells</li> | ||||
<li>Jon Skeet (<a href="mailto:jon.skeet@peramon.com">jon.skeet@peramon.com</a>)</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> | </ul> | ||||
<p>2001/04/29</p> | <p>2001/04/29</p> | ||||
<hr> | <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><a href="#vsscheckout">vsscheckout</a></td> | ||||
<td>Copies a file from the current project to the current folder, for the purpose of editing.</td> | <td>Copies a file from the current project to the current folder, for the purpose of editing.</td> | ||||
</tr> | </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> | </table> | ||||
<hr> | <hr> | ||||
@@ -536,7 +545,126 @@ label only one will be used in the order version, date, label.</p> | |||||
</p> | </p> | ||||
<hr> | <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> | Reserved.</p> | ||||
</body> | </body> | ||||
</html> | </html> |
@@ -72,7 +72,13 @@ ejbc=org.apache.tools.ant.taskdefs.optional.ejb.Ejbc | |||||
ddcreator=org.apache.tools.ant.taskdefs.optional.ejb.DDCreator | ddcreator=org.apache.tools.ant.taskdefs.optional.ejb.DDCreator | ||||
wlrun=org.apache.tools.ant.taskdefs.optional.ejb.WLRun | wlrun=org.apache.tools.ant.taskdefs.optional.ejb.WLRun | ||||
wlstop=org.apache.tools.ant.taskdefs.optional.ejb.WLStop | 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 | 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 | ejbjar=org.apache.tools.ant.taskdefs.optional.ejb.EjbJar | ||||
mparse=org.apache.tools.ant.taskdefs.optional.metamata.MParse | mparse=org.apache.tools.ant.taskdefs.optional.metamata.MParse | ||||
mmetrics=org.apache.tools.ant.taskdefs.optional.metamata.MMetrics | 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 = "$"; | 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 | * 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 | |||||
} | |||||
} |