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