<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You 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.
-->
<html>
<head>
<link rel="stylesheet" type="text/css" href="../stylesheets/style.css">
<title>Microsoft Visual SourceSafe(VSS) Tasks</title>
</head>
<body>
<h1>Microsoft Visual SourceSafe Tasks User Manual</h1>
<p>by</p>
<ul>
    <li>Craig Cottingham</li>
    <li>Andrew Everitt</li>
    <li>Balazs Fejes 2</li>
    <li><a href="mailto:Glenn_Twiggs@bmc.com">Glenn_Twiggs@bmc.com</a></li>
    <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>
    <li>Gary S. Weaver</li>
    <li>Jesse Stockall</li>
 </ul>
<hr>
<h2>Contents</h2>
<ul>
    <li><a href="#intro">Introduction</a></li>
    <li><a href="#tasks">The Tasks</a></li>
</ul>
<br>
<h2><a name="intro">Introduction</a></h2>
<p>This antlib provides an interface to the
<a href="http://msdn.microsoft.com/ssafe/default.asp" target="_top">Microsoft Visual SourceSafe</a> SCM.
The original tasks (<code>org.apache.tools.ant.taskdefs.optional.vss</code>) have been expanded upon in this antlib.
Some fixes to issues in the original tasks have also been incorporated.</p>
<p>
If you get a CreateProcesss IOError=2 when running these, it means
that ss.exe was not found. Check to see if you can run it from the
command line -you may need to alter your path, or set the <tt>ssdir</tt>
property.</p>
<p>
To use this antlib in your build file, you must first declare it eg:
<blockquote>
<pre>
&lt;project name="myproject" basedir="." 
         default="test" xmlns:vss="antlib:org.apache.ant.vss"&gt;
</pre>
</blockquote>

<h2><a name="tasks">The Tasks</a></h2>

<table border="0" cellspacing="0" cellpadding="3">
    <tr>
        <td><a href="#vss:get">vss:get</a></td>
        <td>Retrieves a copy of the specified VSS file(s).</td>
    </tr>
    <tr>
        <td><a href="#vss:label">vss:label</a></td>
        <td>Assigns a label to the specified version or current version of a file or project.</td>
    </tr>
    <tr>
        <td><a href="#vss:history">vss:history</a></td>
        <td>Shows the history of a file or project in VSS.</td>
    </tr>
    <tr>
        <td><a href="#vss:checkin">vss:checkin</a></td>
        <td>Updates VSS with changes made to a checked out file, and unlocks the VSS master copy.</td>
    </tr>
    <tr>
        <td><a href="#vss:checkout">vss:checkout</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="#vss:add">vss:add</a></td>
        <td>Adds a new file into the VSS Archive</td>
    </tr>
    <tr>
        <td><a href="#vss:cp">vss:cp</a></td>
        <td>Change the current project being used in VSS</td>
    </tr>
    <tr>
        <td><a href="#vss:create">vss:create</a></td>
        <td>Creates a project in VSS.</td>
    </tr>
    <tr>
        <td><a href="#vss:destroy">vss:destroy</a></td>
        <td>Permanently remove a file or project from VSS.</td>
    </tr>
    <tr>
        <td><a href="#vss:move">vss:move</a></td>
        <td>Relocates a subproject from one parent project to another.</td>
    </tr>
    <tr>
        <td><a href="#vss:cloak">vss:cloak</a></td>
        <td>Hides a project from recursive Get, Check Out, Check In, Undo Check Out, and Project Differences commands.</td>
    </tr>
    <tr>
        <td><a href="#vss:decloak">vss:decloak</a></td>
        <td>Removes the cloaked attribute from a project.</td>
    </tr>
    <tr>
        <td><a href="#vss:delete">vss:delete</a></td>
        <td>Removes files and projects from VSS Explorer, and marks them as deleted; the items still exist, however, and can be recovered using the Recover command.</td>
    </tr>
    <tr>
        <td><a href="#vss:recover">vss:recover</a></td>
        <td>Recovers files and projects that have been deleted.</td>
    </tr>
    <tr>
        <td><a href="#vss:locate">vss:locate</a></td>
        <td>Searches through VSS projects for file or project names.</td>
    </tr>
    <tr>
        <td><a href="#vss:status">vss:status</a></td>
        <td>Shows check out information on files.</td>
    </tr>
</table>

<hr>
<h2>Task Descriptions</h2>

<!-- VSSGET -->

<h2><a name="vss:get">vss:get</a></h2>
<h3>Description</h3>
Task to perform GET commands to Microsoft Visual SourceSafe.
<p>If you specify two or more attributes from version, date and
label only one will be used in the order version, date, label.</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/file(s) you wish to
         perform the action on.</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>localpath</td>
     <td>Override the working directory and get to the specified path</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>srcsafe.ini</code> resides.</td>
     <td>No</td>
  </tr>
  <tr>
     <td>writable</td>
     <td>true or false; default false</td>
     <td>No</td>
  </tr>
  <tr>
     <td>recursive</td>
     <td>true or false; default false. Note however that in the SourceSafe UI
     , there is a setting accessed via Tools/Options/GeneralTab called
     &quot;Act on projects recursively&quot;.  If this setting is checked,
     then the recursive attribute is effectively ignored, and the get
     will always be done recursively
     </td>
     <td>No</td>
  </tr>
  <tr>
     <td>version</td>
     <td>a version number to get</td>
     <td rowspan="3">No, only one of these allowed</td>
  </tr>
  <tr>
     <td>date</td>
     <td>a date stamp to get at</td>
  </tr>
  <tr>
     <td>label</td>
     <td>a label to get for</td>
  </tr>
  <tr>
     <td>quiet</td>
     <td>suppress output (off by default)</td>
     <td>No</td>
  </tr>
  <tr>
     <td>autoresponse</td>
     <td>What to respond with (sets the -I option). By default, -I- is
     used; values of Y or N will be appended to this.</td>
     <td>No</td>
  </tr>
  <tr>
    <td>writablefiles</td>
    <td>Behavior when local files are writable. Valid options are: <code>replace</code>, 
        <code>skip</code> and <code>fail</code>; Defaults to <code>fail</code>
        <br><code>skip</code> implies <code>failonerror=false</code></td>
    <td>No</td>
  </tr>
  <tr>
    <td>failonerror</td>
    <td>Stop the buildprocess if ss.exe exits with a returncode of 100. Defaults to true</td>
    <td>No</td>
  </tr>
  <tr>
    <td>filetimestamp</td>
    <td>Set the behavior for timestamps of local files. Valid options are <code>current</code>, 
        <code>modified</code>, or <code>updated</code>. Defaults to <code>current</code>.</td> 
    <td>No</td>
  </tr>
</table>
<p>Note that only one of version, date or label should be specified</p>
<h3>Examples</h3>
<blockquote>
<pre>
&lt;vss:get localPath=&quot;C:\mysrc\myproject&quot;
        recursive=&quot;true&quot;
        label=&quot;Release1&quot;
        login=&quot;me,mypassword&quot;
        vsspath=&quot;$/source/aProject&quot;
        writable=&quot;true&quot;/&gt;
</pre>
</blockquote>
<p>Does a get on the VSS-Project <i>$/source/myproject</i> using the username
<i>me</i> and the password <i>mypassword</i>. It will recursively get the files
which are labeled <i>Release1</i> and write them to the local directory
<i>C:\mysrc\myproject</i>. The local files will be writable.</p>
<hr>

<!-- VSSLABEL -->

<h2><a name="vss:label">vss:label</a></h2>
<h3>Description</h3>
Task to perform LABEL commands to Microsoft Visual SourceSafe.
<p>Assigns a label to the specified version or current version of a file or
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/file(s) you wish to
         perform the action on.</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>srcsafe.ini</code> resides.</td>
     <td>No</td>
  </tr>
   <tr>
      <td>label</td>
      <td>A label to apply to the hierarchy</td>
      <td>Yes</td>
   </tr>
   <tr>
      <td>version</td>
      <td>An existing file or project version to label. By default the current
      version is labeled.</td>
      <td>No</td>
   </tr>
   <tr>
      <td>comment</td>
      <td>The comment to use for this label. Empty or '-' for no comment.</td>
      <td>No</td>
   </tr>
  <tr>
     <td>autoresponse</td>
     <td>What to respond with (sets the -I option). By default, -I- is
     used; values of Y or N will be appended to this.</td>
     <td>No</td>
  </tr>
  <tr>
    <td>failonerror</td>
    <td>Stop the buildprocess if ss.exe exits with a returncode of 100. Defaults to true</td>
    <td>No</td>
  </tr>
</table>
<h3>Examples</h3>
<blockquote>
<pre>
&lt;vss:label vsspath=&quot;$/source/aProject&quot;
          login=&quot;me,mypassword&quot;
          label=&quot;Release1&quot;/&gt;
</pre>
</blockquote>
<p>Labels the current version of the VSS project <i>$/source/aProject</i> with
the label <i>Release1</i> using the username <i>me</i> and the password
<i>mypassword</i>.
</p>
<blockquote>
<pre>
&lt;vss:label vsspath=&quot;$/source/aProject/myfile.txt&quot;
          version=&quot;4&quot;
          label=&quot;1.03.004&quot;/&gt;
</pre>
</blockquote>
<p>Labels version 4 of the VSS file <i>$/source/aProject/myfile.txt</i> with the
label <i>1.03.004</i>. If this version already has a label, the operation (and
the build) will fail.
</p>
<hr>

<!-- VSSHISTORY -->

<h2><a name="vss:history">vss:history</a></h2>
<h3>Description</h3>
Task to perform HISTORY 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>vsspath</td>
     <td>SourceSafe path which specifies the project/file(s) you wish to
         perform the action on.</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>srcsafe.ini</code> resides.</td>
     <td>No</td>
  </tr>
  <tr>
    <td>fromDate</td>
    <td>Start date for comparison</td>
    <td>See below</td>
  </tr>
  <tr>
    <td>toDate</td>
    <td>End date for comparison</td>
    <td>See below</td>
  </tr>
  <tr>
    <td>dateFormat</td>
    <td>Format of dates in fromDate and toDate. Used when calculating dates with
      the numdays attribute. This string uses the formatting rules of SimpleDateFormat.
      Defaults to DateFormat.SHORT.</td>
    <td>No</td>
  </tr>
  <tr>
    <td>fromLabel</td>
    <td>Start label for comparison</td>
    <td>No</td>
  </tr>
  <tr>
    <td>toLabel</td>
    <td>Start label for comparison</td>
    <td>No</td>
  </tr>
  <tr>
    <td>numdays</td>
    <td>The number of days for comparison.</td>
    <td>See below</td>
  </tr>
  <tr>
    <td>output</td>
    <td>File to write the diff.</td>
    <td>No</td>
  </tr>
  <tr>
    <td>recursive</td>
    <td>true or false</td>
    <td>No</td>
  </tr>
  <tr>
    <td>style</td>
    <td>brief, codediff, default or nofile. The default is default.</td>
    <td>No</td>
  </tr>
  <tr>
    <td>user</td>
    <td>Name the user whose changes we would like to see</td>
    <td>No</td>
  </tr>
  <tr>
    <td>failonerror</td>
    <td>Stop the buildprocess if ss.exe exits with a returncode of 100. Defaults to true</td>
    <td>No</td>
  </tr>
</table>

<h4>Specifying the time-frame</h4>
<p>There are different ways to specify what time-frame you wish to evaluate:</p>
<ul>
  <li>Changes between two dates: Specify both <code>fromDate</code> and <code>toDate</code> </li>
  <li>Changes before a date: Specify <code>toDate</code></li>
  <li>Changes after a date: Specify <code>fromDate</code></li>
  <li>Changes X Days before a date: Specify <code>toDate</code> and (negative!) <code>numDays</code></li>
  <li>Changes X Days after a date: Specify <code>fromDate</code> and <code>numDays</code></li>
</ul>


<h3>Examples</h3>
<blockquote>
  <pre>
&lt;vss:history vsspath=&quot;$/myProject&quot; recursive=&quot;true&quot;
            fromLabel=&quot;Release1&quot;
            toLabel=&quot;Release2&quot;/&gt;
</pre>
</blockquote>
<p>Shows all changes between &quot;Release1&quot; and &quot;Release2&quot;.</p>

<blockquote>
  <pre>
&lt;vss:history vsspath=&quot;$/myProject&quot; recursive=&quot;true&quot;
            fromDate=&quot;01.01.2001&quot;
            toDate=&quot;31.03.2001&quot;/&gt;
</pre>
</blockquote>
<p>Shows all changes between January 1st 2001 and March 31st 2001 (in Germany, date must be specified according to your locale).</p>

<blockquote>
  <pre>
&lt;tstamp&gt;
  &lt;format property=&quot;to.tstamp&quot; pattern=&quot;M-d-yy;h:mma&quot;/&gt;
&lt;/tstamp&gt;

&lt;vss:history vsspath=&quot;$/myProject&quot; recursive=&quot;true&quot;
            numDays=&quot;-14&quot;
            dateFormat=&quot;M-d-yy;h:mma&quot;
            toDate=&quot;${to.tstamp}&quot;/&gt;
</pre>
</blockquote>
<p>Shows all changes in the 14 days before today.</p>
<hr>

<!-- VSSCHECKIN -->

<h2><a name="vss:checkin">vss:checkin</a></h2>
<h3>Description</h3>
Task to perform CHECKIN 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>vsspath</td>
     <td>SourceSafe path which specifies the project/file(s) you wish to
         perform the action on.</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>localpath</td>
     <td>Override the working directory and get to the specified path</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>srcsafe.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>
  <tr>
    <td>failonerror</td>
    <td>Stop the buildprocess if ss.exe exits with a returncode of 100. Defaults to true</td>
    <td>No</td>
  </tr>
</table>

<h3>Examples</h3>
<blockquote>
<pre>
&lt;vss:checkin vsspath=&quot;$/test/test*&quot;
            localpath=&quot;D:\build\&quot;
            comment=&quot;Modified by automatic build&quot;/&gt;
</pre>
</blockquote>
<p>Checks in the file(s) named <i>test*</i> in the project <i>$/test</i> using
the local directory <i>D:\build</i>.</p>
<hr>

<!-- VSSCHECKOUT -->

<h2><a name="vss:checkout">vss:checkout</a></h2>
<h3>Description</h3>
Task to perform CHECKOUT commands to Microsoft Visual SourceSafe.
<p>If you specify two or more attributes from version, date and
label only one will be used in the order version, date, label.</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/file(s) you wish to
         perform the action on.</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>localpath</td>
     <td>Override the working directory and get to the specified path</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>srcsafe.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>version</td>
     <td>a version number to get</td>
     <td rowspan="3">No, only one of these allowed</td>
  </tr>
  <tr>
     <td>date</td>
     <td>a date stamp to get at</td>
  </tr>
  <tr>
     <td>label</td>
     <td>a label to get for</td>
  </tr>
  <tr>
    <td>writablefiles</td>
    <td>Behavior when local files are writable. Valid options are: <code>replace</code>, 
        <code>skip</code> and <code>fail</code>; Defaults to <code>fail</code>
        <br><code>skip</code> implies <code>failonerror=false</code></td>
    <td>No</td>
  </tr>
  <tr>
    <td>failonerror</td>
    <td>Stop the buildprocess if ss.exe exits with a returncode of 100. Defaults to true</td>
    <td>No</td>
  </tr>
  <tr>
    <td>filetimestamp</td>
    <td>Set the behavior for timestamps of local files. Valid options are <code>current</code>, 
        <code>modified</code>, or <code>updated</code>. Defaults to <code>current</code>.</td> 
    <td>No</td>
  </tr>
  <tr>
    <td>getlocalcopy</td>
    <td>Set the behavior to retrieve local copies of the files. Defaults to true.</td> 
    <td>No</td>
  </tr>
</table>

<h3>Examples</h3>
<blockquote>
<pre>
&lt;vss:checkout vsspath=&quot;$/test&quot;
             localpath=&quot;D:\build&quot;
             recursive=&quot;true&quot;
             login=&quot;me,mypass&quot;/&gt;
</pre>
</blockquote>
<p>Does a recursive checkout of the project <i>$/test</i> to the directory D:\build.
</p>
<hr>

<!-- VSSADD -->

<h2><a name="vss:add">vss:add</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>srcsafe.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>
  <tr>
    <td>failonerror</td>
    <td>Stop the buildprocess if ss.exe exits with a returncode of 100. Defaults to true</td>
    <td>No</td>
  </tr>
</table>

<h3>Examples</h3>
<blockquote>
<pre>
&lt;vss:add localpath=&quot;D:\build\build.00012.zip&quot;
            comment=&quot;Added by automatic build&quot;/&gt;
</pre>
</blockquote>
<p>Add the file named build.00012.zip into the project current working
directory (see vsscp).</p>
<hr>

<!-- VSSCP -->

<h2><a name="vss:cp">vss:cp</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.</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>srcsafe.ini</code> resides.</td>
     <td>No</td>
  </tr>
  <tr>
    <td>failonerror</td>
    <td>Stop the buildprocess if ss.exe exits with a returncode of 100. Defaults to true</td>
    <td>No</td>
  </tr>
</table>

<h3>Examples</h3>
<blockquote>
<pre>
&lt;vss:cp vsspath=&quot;$/Projects/ant&quot;/&gt;
</pre>
</blockquote>
<p>Sets the current VSS project to <i>$/Projects/ant</i>.</p>
<hr>

<!-- VSSCREATE -->

 <h2><a name="vss:create">vss:create</a></h2>
 <h3>Description</h3>
 Task to perform CREATE commands to Microsoft Visual Source Safe.
 <p>Creates a new project in VSS.</p>
<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
  <tr>
    <th>Attribute</th>
    <th>Values</th>
    <th>Required</th>
  </tr>
  <tr>
    <td>login</td>
    <td>username,password</td>
    <td>No</td>
  </tr>
  <tr>
    <td>vsspath</td>
    <td>SourceSafe path of project to be created</td>
    <td>Yes</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>quiet</td>
    <td>suppress output (off by default)</td>
    <td>No</td>
   </tr>
  <tr>
    <td>failOnError</td>
    <td>fail if there is an error creating the project (true by default)</td>
    <td>No</td>
  </tr>
  <tr>
    <td>autoresponse</td>
    <td>What to respond with (sets the -I option). By default, -I- is used; values of Y or N will be appended to this.</td>
    <td>No</td>
  </tr>
  <tr>
    <td>comment</td>
    <td>The comment to use for this label. Empty or '-' for no comment.</td>
    <td>No</td>
  </tr>
</table>
<h3>Examples</h3>
<blockquote>
<pre>
&lt;vss:create vsspath=&quot;$/existingProject/newProject&quot;/&gt;
</pre>
</blockquote>
<p>Creates the VSS-Project <i>$/existingProject/newProject</i>.</p>
<!-- vss:destroy -->
 <h2><a name="vss:destroy">vss:destroy</a></h2>
 <h3>Description</h3>
 Task to perform DESTROY commands to Microsoft Visual Source Safe.
 <p>Permanently removes a project or file in VSS.</p>
<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
  <tr>
    <th>Attribute</th>
    <th>Values</th>
    <th>Required</th>
  </tr>
  <tr>
    <td>login</td>
    <td>username,password</td>
    <td>No</td>
  </tr>
  <tr>
    <td>vsspath</td>
    <td>SourceSafe path of project to be removed</td>
    <td>Yes</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>quiet</td>
    <td>suppress output (off by default)</td>
    <td>No</td>
   </tr>
  <tr>
    <td>failOnError</td>
    <td>fail if there is an error creating the project (true by default)</td>
    <td>No</td>
  </tr>
  <tr>
    <td>autoresponse</td>
    <td>What to respond with (sets the -I option). By default, -I- is used; values of Y or N will be appended to this.</td>
    <td>No</td>
  </tr>
</table>
<h3>Examples</h3>
<blockquote>
<pre>
&lt;vss:destroy vsspath=&quot;$/existingProject/oldProject&quot;/&gt;
</pre>
</blockquote>
<p>Permanently removes the VSS-Project <i>$/existingProject/oldProject</i>.</p>

<!-- vss:move -->
 <h2><a name="vss:move">vss:move</a></h2>
 <h3>Description</h3>
 Task to perform MOVE commands to Microsoft Visual Source Safe.
 <p>Moves a project or file in VSS.</p>
<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
  <tr>
    <th>Attribute</th>
    <th>Values</th>
    <th>Required</th>
  </tr>
  <tr>
    <td>login</td>
    <td>username,password</td>
    <td>No</td>
  </tr>
  <tr>
    <td>vsspath</td>
    <td>SourceSafe path of project to be moved</td>
    <td>Yes</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>quiet</td>
    <td>suppress output (off by default)</td>
    <td>No</td>
   </tr>
  <tr>
    <td>failOnError</td>
    <td>fail if there is an error creating the project (true by default)</td>
    <td>No</td>
  </tr>
  <tr>
    <td>autoresponse</td>
    <td>What to respond with (sets the -I option). By default, -I- is used; values of Y or N will be appended to this.</td>
    <td>No</td>
  </tr>
  <tr>
    <td>destination</td>
    <td>location in VSS to move project specified by vsspath to.</td>
    <td>Yes</td>
  </tr>
</table>
<h3>Examples</h3>
<blockquote>
<pre>
 &lt;vss:move
  	  vsspath="$/${vss-project}/sub2"
	  destination="$/${vss-project}/sub1"
  	  login="Guest,"
  	/&gt;
</pre>
</blockquote>
<p>Moves the VSS-Project <i>$/${vss-project}/sub2</i> to <i>$/${vss-project}/sub1/sub2</i>.</p>

<!-- vss:cloak -->
 <h2><a name="vss:cloak">vss:cloak</a></h2>
 <h3>Description</h3>
 Task to perform CLOAK commands to Microsoft Visual Source Safe.
 <p>Hides a project from recursive Get, Check Out, Check In, Undo Check Out, and Project Differences commands.</p>
<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
  <tr>
    <th>Attribute</th>
    <th>Values</th>
    <th>Required</th>
  </tr>
  <tr>
    <td>login</td>
    <td>username,password</td>
    <td>No</td>
  </tr>
  <tr>
    <td>vsspath</td>
    <td>SourceSafe path of project to be cloaked</td>
    <td>Yes</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>quiet</td>
    <td>suppress output (off by default)</td>
    <td>No</td>
   </tr>
</table>
<h3>Examples</h3>
<blockquote>
<pre>
 &lt;vss:cloak
  	  vsspath="$/${vss-project}"
  	  login="Guest,"
  	/&gt;
</pre>
</blockquote>
<p>Cloaks the VSS-Project <i>$/${vss-project}</i>.</p>

<!-- vss:decloak -->
 <h2><a name="vss:decloak">vss:decloak</a></h2>
 <h3>Description</h3>
 Task to perform DECLOAK commands to Microsoft Visual Source Safe.
 <p>Removes the cloaked attribute from a 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>login</td>
    <td>username,password</td>
    <td>No</td>
  </tr>
  <tr>
    <td>vsspath</td>
    <td>SourceSafe path of project to be decloaked</td>
    <td>Yes</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>quiet</td>
    <td>suppress output (off by default)</td>
    <td>No</td>
   </tr>
</table>
<h3>Examples</h3>
<blockquote>
<pre>
 &lt;vss:decloak
  	  vsspath="$/${vss-project}"
  	  login="Guest,"
  	/&gt;
</pre>
</blockquote>
<p>Decloaks the VSS-Project <i>$/${vss-project}</i>.</p>

<!-- vss:delete -->
 <h2><a name="vss:delete">vss:delete</a></h2>
 <h3>Description</h3>
 Task to perform DELETE commands to Microsoft Visual Source Safe.
 <p>Removes files and projects from VSS Explorer, and marks them as deleted; the items still exist, however, and can be recovered using the Recover command.</p>
<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
  <tr>
    <th>Attribute</th>
    <th>Values</th>
    <th>Required</th>
  </tr>
  <tr>
    <td>login</td>
    <td>username,password</td>
    <td>No</td>
  </tr>
  <tr>
    <td>vsspath</td>
    <td>SourceSafe path of project or file to be deleted</td>
    <td>Yes</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>quiet</td>
    <td>suppress output (off by default)</td>
    <td>No</td>
  </tr>
  <tr>
    <td>failOnError</td>
    <td>fail if there is an error creating the project (true by default)</td>
    <td>No</td>
  </tr>
  <tr>
    <td>autoresponse</td>
    <td>What to respond with (sets the -I option). By default, -I- is used; values of Y or N will be appended to this.</td>
    <td>No</td>
  </tr>
</table>
<h3>Examples</h3>
<blockquote>
<pre>
 &lt;vss:delete
  	  vsspath="$/${vss-project}"
  	  login="Guest,"
  	/&gt;
</pre>
</blockquote>
<p>Deletes the VSS-Project <i>$/${vss-project}</i>.</p>

<!-- vss:recover -->
 <h2><a name="vss:recover">vss:recover</a></h2>
 <h3>Description</h3>
 Task to perform RECOVER commands to Microsoft Visual Source Safe.
 <p>Recovers files and projects that have been deleted.</p>
<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
  <tr>
    <th>Attribute</th>
    <th>Values</th>
    <th>Required</th>
  </tr>
  <tr>
    <td>login</td>
    <td>username,password</td>
    <td>No</td>
  </tr>
  <tr>
    <td>vsspath</td>
    <td>SourceSafe path of project or file to be recovered</td>
    <td>Yes</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>quiet</td>
    <td>suppress output (off by default)</td>
    <td>No</td>
  </tr>
  <tr>
    <td>failOnError</td>
    <td>fail if there is an error creating the project (true by default)</td>
    <td>No</td>
  </tr>
  <tr>
    <td>autoresponse</td>
    <td>What to respond with (sets the -I option). By default, -I- is used; values of Y or N will be appended to this.</td>
    <td>No</td>
  </tr>
</table>
<h3>Examples</h3>
<blockquote>
<pre>
 &lt;vss:recover
  	  vsspath="$/${vss-project}"
  	  login="Guest,"
  	/&gt;
</pre>
</blockquote>
<p>Recovers the VSS-Project <i>$/${vss-project}</i>.</p>

<!-- vss:locate -->
 <h2><a name="vss:locate">vss:locate</a></h2>
 <h3>Description</h3>
 Task to perform LOCATE commands to Microsoft Visual Source Safe.
 <p>Locates files and projects in VSS.</p>
<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
  <tr>
    <th>Attribute</th>
    <th>Values</th>
    <th>Required</th>
  </tr>
  <tr>
    <td>login</td>
    <td>username,password</td>
    <td>No</td>
  </tr>
  <tr>
    <td>vsspath</td>
    <td>SourceSafe path of project or file to be recovered</td>
    <td>Yes</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>quiet</td>
    <td>suppress output (off by default)</td>
    <td>No</td>
  </tr>
  <tr>
    <td>failOnError</td>
    <td>fail if there is an error creating the project (true by default)</td>
    <td>No</td>
  </tr>
  <tr>
    <td>autoresponse</td>
    <td>What to respond with (sets the -I option). By default, -I- is used; values of Y or N will be appended to this.</td>
    <td>No</td>
  </tr>
</table>
<h3>Examples</h3>
<blockquote>
<pre>
 &lt;vss:locate
  	  vsspath="$/${vss-project}"
  	  login="Guest,"
  	/&gt;
</pre>
</blockquote>
<p>Locates the VSS-Project <i>$/${vss-project}</i>.</p>

<!-- vss:status -->
 <h2><a name="vss:status">vss:status</a></h2>
 <h3>Description</h3>
 Task to perform STATUS commands to Microsoft Visual Source Safe.
 <p>Shows check out information on files VSS.</p>
<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
  <tr>
    <th>Attribute</th>
    <th>Values</th>
    <th>Required</th>
  </tr>
  <tr>
    <td>login</td>
    <td>username,password</td>
    <td>No</td>
  </tr>
  <tr>
    <td>user</td>
    <td>The user to search for files for.</td>
    <td>No</td>
  </tr>
  <tr>
    <td>vsspath</td>
    <td>SourceSafe path of project or file to be recovered</td>
    <td>Yes</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>quiet</td>
    <td>suppress output (off by default)</td>
    <td>No</td>
  </tr>
  <tr>
    <td>failOnError</td>
    <td>fail if there is an error creating the project (true by default)</td>
    <td>No</td>
  </tr>
  <tr>
    <td>autoresponse</td>
    <td>What to respond with (sets the -I option). By default, -I- is used; values of Y or N will be appended to this.</td>
    <td>No</td>
  </tr>
</table>
<h3>Examples</h3>
<blockquote>
<pre>
 &lt;vss:status
	  vsspath=&quot;$/${vss-project}&quot;
	  login=&quot;Guest,&quot;
      user=&quot;Guest&quot;
	/&gt;
</pre>
</blockquote>
<p>Locates the VSS-Project <i>$/${vss-project}</i>.</p>
<hr>

<!-- Footer -->
</body>
</html>
