Browse Source

SourceOffSite tasks submitted by Jesse Stockall <jesse@cryptocard.com>.

The sos.html file is slightly out of synch with the actual attributes - but Jesse will submit updated documentation soon.


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271021 13f79535-47bb-0310-9956-ffa450edef68
master
Erik Hatcher 23 years ago
parent
commit
8dc6be273c
11 changed files with 2796 additions and 0 deletions
  1. +531
    -0
      docs/manual/OptionalTasks/sos.html
  2. +1
    -0
      docs/manual/optionaltasklist.html
  3. +4
    -0
      src/main/org/apache/tools/ant/taskdefs/defaults.properties
  4. +488
    -0
      src/main/org/apache/tools/ant/taskdefs/optional/sos/SOS.java
  5. +257
    -0
      src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSCheckin.java
  6. +247
    -0
      src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSCheckout.java
  7. +93
    -0
      src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSCmd.java
  8. +268
    -0
      src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSGet.java
  9. +204
    -0
      src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSLabel.java
  10. +13
    -0
      src/main/org/apache/tools/ant/taskdefs/optional/sos/package.html
  11. +690
    -0
      src/testcases/org/apache/tools/ant/taskdefs/optional/sos/SOSTest.java

+ 531
- 0
docs/manual/OptionalTasks/sos.html View File

@@ -0,0 +1,531 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<title>Ant User Manual</title>
</head>
<body>
<div align="center">
<h1>SourceOffSite Tasks User Manual</h1>
<div align="left">by<br>
<br>
<ul>
<li><a href="mailto:jesse@cryptocard.com">Jesse Stockall</a> </li>
</ul>
Version 1.1 2002/01/23<br>
<br>
<hr width="100%" size="2">
<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>These tasks provide an interface to the <a href="http://msdn.microsoft.com/ssafe/default.asp" target="_top">
Microsoft Visual SourceSafe</a> SCM via <a href="http://www.sourcegear.com">
SourceGear's</a> <a href="http://sourcegear.com/sos/index.htm">SourceOffSite</a>
product. SourceOffSite is an add-on to Microsoft's VSS, that
allows remote development teams and tele-commuters that need
fast and secure read/write access to a centralized SourceSafe
database via any TCP/IP connection . SOS also provides Linux &amp; Solaris
clients. The <code> org.apache.tools.ant.taskdefs.optional.sos</code>
package consists of a simple framework to support SOS functionality as well
as some Ant tasks encapsulating frequently used SOS commands. Although it
is possible to use these commands on the desktop, they were primarily intended
to be used by automated build systems. These tasks have been tested with
SourceOffSite version 3.5.1 connecting to VisualSourceSafe 6.0. The tasks
have been tested with Linux, Solaris &amp; Windows2000</p>
<h2><a name="tasks">The Tasks</a> </h2>
<table border="0" cellspacing="0" cellpadding="3">
<tbody>
<tr>
<td><a href="#SOSGet">sosget</a> </td>
<td>Retrieves a read-only copy of the specified project or file.</td>
</tr>
<tr>
<td><a href="#SOSLabel"> soslabel</a> </td>
<td>Assigns a label to the specified project.</td>
</tr>
<tr>
<td><a href="#SOSCheckIn"> soscheckin</a> </td>
<td>Updates VSS with changes made to a checked out file or project,
and unlocks the VSS master copy.</td>
</tr>
<tr>
<td><a href="#SOSCheckOut"> soscheckout</a> </td>
<td>Retrieves a read-write copy of&nbsp;the specified project
or file, locking the&nbsp;VSS master copy</td>
</tr>
</tbody>
</table>
<br>
<hr width="100%" size="2">
<h2>Task Descriptions</h2>
<h2><a name="SOSGet"></a> SOSGet<br>
</h2>
<h3>Description</h3>
Task to perform GET commands from Microsoft Visual SourceSafe via SOS<br>
<h3>Parameters</h3>
</div>
</div>
<table border="1">
<tbody>
<tr>
<th>Attribute</th>
<th>Values</th>
<th>Required</th>
</tr>
<tr>
<td>soscmddir</td>
<td>Directory which contains soscmd(.exe) <br>
soscmd(.exe) must be in the path if this is not specified</td>
<td>No</td>
</tr>
<tr>
<td>vssserverpath</td>
<td>path to the srcsafe.ini - eg. \\server\vss\srcsafe.ini</td>
<td>Yes</td>
</tr>
<tr>
<td>sosserverpath</td>
<td>address &amp; port of the SOS server - eg. 192.168.0.1:8888</td>
<td>Yes</td>
</tr>
<tr>
<td>projectpath</td>
<td>SourceSafe project path without the "$"</td>
<td>Yes</td>
</tr>
<tr>
<td>file</td>
<td>Filename to act upon<br>
If no file is specified then act upon the project</td>
<td>No</td>
</tr>
<tr>
<td>username</td>
<td>SourceSafe username</td>
<td>Yes</td>
</tr>
<tr>
<td>password</td>
<td>SourceSafe 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>soshome</td>
<td>The path to the SourceOffSite home directory</td>
<td>No</td>
</tr>
<tr>
<td>nocompression</td>
<td>true or false - disable compression</td>
<td>No</td>
</tr>
<tr>
<td>recursive</td>
<td>true or false - Only works with the GetProject command</td>
<td>No</td>
</tr>
<tr>
<td>version</td>
<td>a version number to get - Only works with the GetFile command</td>
<td>No</td>
</tr>
<tr>
<td>label</td>
<td>a label version to get - Only works with the GetProject command</td>
<td>No</td>
</tr>
<tr>
<td>nocache</td>
<td>true or false - Only needed if SOSHOME is set as an enviroment variable</td>
<td>No</td>
</tr>
<tr>
<td>verbose</td>
<td>true or false - Status messages are displayed</td>
<td>No</td>
</tr>
</tbody>
</table>
<h3>Example</h3>
&nbsp;&nbsp;&nbsp; <small>&lt;sosget&nbsp;&nbsp;&nbsp; </small><small>
verbose="true"</small><br>
<small>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; recursive="true"</small><br>
<small>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; login="build"</small><br>
<small>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; pass="build"</small><br>
<small>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; localpath="tmp"</small><br>
<small>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; projectpath="/SourceRoot/project1"</small><small><br>
</small><small><small>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;<big>&nbsp; &nbsp;&nbsp;&nbsp; sosserverpath="192.168.10.6:8888"</big></small></small><br>
<small>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; vssserverpath="d:\vss\srcsafe.ini"/&gt;</small><br>
<small>&nbsp;&nbsp; <br>
Connects to a SourceOffsite server on </small><small>192.168.10.6:8888</small><small>
with build,build as the username &amp; password</small><small> . The
SourceSafe database resides on the same box as the SOS server &amp; the
VSS database is at "d:\vss\srcsafe.ini"</small><br>
<small>Does a recursive GetProject on $</small><small>/SourceRoot/project1</small><small>
, using tmp as the working directory.</small><br>
<br>
<hr width="100%" size="2">
<h2><a name="SOSLabel"></a> SOSLabel</h2>
<h3>Description</h3>
Task to perform Label commands from Microsoft Visual SourceSafe via SOS<br>
<h3>Parameters</h3>
<table border="1">
<tr>
<th>Attribute</th>
<th>Values</th>
<th>Required</th>
</tr>
<tr>
<td>soscmddir</td>
<td>Directory which contains soscmd(.exe) <br>
soscmd(.exe) must be in the path if this is not specified</td>
<td>No</td>
</tr>
<tr>
<td>vssserverpath</td>
<td>path to the srcsafe.ini - eg. \\server\vss\srcsafe.ini</td>
<td>Yes</td>
</tr>
<tr>
<td>sosserverpath</td>
<td>address and port of the SOS server - eg. 192.168.0.1:8888</td>
<td>Yes</td>
</tr>
<tr>
<td>projectpath</td>
<td>SourceSafe project path without the "$"</td>
<td>Yes</td>
</tr>
<tr>
<td>username</td>
<td>SourceSafe username</td>
<td>Yes</td>
</tr>
<tr>
<td>password</td>
<td>SourceSafe password</td>
<td>No</td>
</tr>
<tr>
<td>label</td>
<td>The label to apply to a project</td>
<td>Yes</td>
</tr>
<tr>
<td>comment</td>
<td>A comment to be applied to all files being labeled</td>
<td>No</td>
</tr>
<tr>
<td>verbose</td>
<td>true or false - Status messages are displayed</td>
<td>No</td>
</tr>
</tbody>
</table>
<h3>Example</h3>
&nbsp;<small>&nbsp;&nbsp; &lt;soslabel&nbsp;&nbsp;&nbsp; </small><small>
&nbsp; login="build"</small><small><br>
</small><small>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; pass="build"</small><small><br>
</small><small>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; label="test
label"</small><small><br>
</small><small>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; projectpath="</small><small>
/SourceRoot/project1</small><small> "</small><small><br>
</small><small>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; sosserverpath="192.168.10.6:8888"</small><small><br>
</small><small>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; vssserverpath="d:\vss\srcsafe.ini"/&gt;</small><small><br>
</small><br>
<small> Connects to a SourceOffsite server on </small><small>192.168.10.6:8888
</small><small>with build,build as the username &amp; password</small><small>
. </small><small> The SourceSafe database resides on the same box
as the SOS server &amp; the VSS database is at "d:\vss\srcsafe.ini"</small><br>
<small>Labels the $</small><small>/SourceRoot/project1 project with
</small><small> "test label".</small><br>
<br>
<hr width="100%" size="2"><br>
<h2><a name="SOSCheckIn"></a> SOSCheckIn</h2>
<h3>Description</h3>
Task to perform CheckIn commands from a Microsoft Visual Source Safe via SOS<br>
<h3>Parameters</h3>
<table border="1">
<tbody>
<tr>
<th>Attribute</th>
<th>Values</th>
<th>Required</th>
</tr>
<tr>
<td>soscmddir</td>
<td>Directory which contains soscmd(.exe) <br>
soscmd(.exe) must be in the path if this is not specified</td>
<td>No</td>
</tr>
<tr>
<td>vssserverpath</td>
<td>path to the srcsafe.ini - eg. \\server\vss\srcsafe.ini</td>
<td>Yes</td>
</tr>
<tr>
<td>sosserverpath</td>
<td>address and port of the SOS server - eg. 192.168.0.1:8888</td>
<td>Yes</td>
</tr>
<tr>
<td>projectpath</td>
<td>SourceSafe project path without the "$"</td>
<td>Yes</td>
</tr>
<tr>
<td>file</td>
<td>Filename to act upon<br> If no file is specified then act upon the project</td>
<td>No</td>
</tr>
<tr>
<td>username</td>
<td>SourceSafe username</td>
<td>Yes</td>
</tr>
<tr>
<td>password</td>
<td>SourceSafe 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>soshome</td>
<td>The path to the SourceOffSite home directory</td>
<td>No</td>
</tr>
<tr>
<td>nocompression</td>
<td>true or false - disable compression</td>
<td>No</td>
</tr>
<tr>
<td>recursive</td>
<td>true or false - Only works with the CheckOutProject command</td>
<td>No</td>
</tr>
<tr>
<td>nocache</td>
<td>true or false - Only needed if SOSHOME is set as an enviroment variable</td>
<td>No</td>
</tr>
<tr>
<td>verbose</td>
<td>true or false - Status messages are displayed</td>
<td>No</td>
</tr>
<td>comment</td>
<td>A comment to be applied to all files being checked in</td>
<td>No</td>
</tr>
</tbody>
</table>
<h3>Example</h3>
&nbsp;&nbsp;&nbsp; <small>&lt;soscheckin&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
</small><small>&nbsp;login="build"</small><small><br>
</small><small>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; pass="build"</small><small><br>
</small><small>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; </small><small>file="foobar.txt"<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; verbose="true"</small><br>
<small>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
</small><small>comment="comment abc"</small><small><br>
</small><small>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; projectpath="/SourceRoot/project1"</small><small><br>
</small><small>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; sosserverpath="server1:8888"</small><small><br>
</small><small>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; vssserverpath="\\server2\vss\srcsafe.ini"/&gt;</small><small><br>
</small><small><br>
Connects to a SourceOffsite server on </small><small>server1:8888</small><small>
with build,build as the username &amp; password</small><small> . </small><small>
The SourceSafe database resides on a different box (server2)&nbsp;
&amp; the VSS database is on a share called "vss"</small><br>
<small>Checks-in only the "foobar.txt" file adding a comment of "comment
abc"</small><small> . Extra status messages will be displayed on screen.</small><br>
<br>
<hr width="100%" size="2">
<h2><a name="SOSCheckOut"></a> SOSCheckOut</h2>
<h3>Description</h3>
Task to perform CheckOut commands from a Microsoft Visual Source Safe via SOS<br>
<h3>Parameters</h3>
<table border="1">
<tbody>
<tr>
<th>Attribute</th>
<th>Values</th>
<th>Required</th>
</tr>
<tr>
<td>soscmddir</td>
<td>Directory which contains soscmd(.exe) <br>
soscmd(.exe) must be in the path if this is not specified</td>
<td>No</td>
</tr>
<tr>
<td>vssserverpath</td>
<td>path to the srcsafe.ini - eg. \\server\vss\srcsafe.ini</td>
<td>Yes</td>
</tr>
<tr>
<td>sosserverpath</td>
<td>address and port of the SOS server - eg. 192.168.0.1:8888</td>
<td>Yes</td>
</tr>
<tr>
<td>projectpath</td>
<td>SourceSafe project path without the "$"</td>
<td>Yes</td>
</tr>
<tr>
<td>file</td>
<td>Filename to act upon<br> If no file is specified then act upon the project</td>
<td>No</td>
</tr>
<tr>
<td>username</td>
<td>SourceSafe username</td>
<td>Yes</td>
</tr>
<tr>
<td>password</td>
<td>SourceSafe 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>soshome</td>
<td>The path to the SourceOffSite home directory</td>
<td>No</td>
</tr>
<tr>
<td>nocompression</td>
<td>true or false - disable compression</td>
<td>No</td>
</tr>
<tr>
<td>recursive</td>
<td>true or false - Only works with the CheckOutProject command</td>
<td>No</td>
</tr>
<tr>
<td>nocache</td>
<td>true or false - Only needed if SOSHOME is set as an enviroment variable</td>
<td>No</td>
</tr>
<tr>
<td>verbose</td>
<td>true or false - Status messages are displayed</td>
<td>No</td>
</tr>
</tbody>
</table>
<br>
<h3>Example</h3>
&nbsp;&nbsp;&nbsp; <small>&lt;soscheckout </small><small>&nbsp; soscmddir="/usr/bin"</small><small><br>
</small><small>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
verbose="true"</small><small><br>
</small><small>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
login="build"</small><small><br>
</small><small>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
pass="build"</small><small><br>
</small><small>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
ProjectPath="</small><small> /SourceRoot/project1</small><small>"</small><small><br>
</small><small>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
sosserverpath="192.168.10.6:8888"</small><small><br>
</small><small>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
vssserverpath="\\server2\vss\srcsafe.ini"/&gt;<small><br>
</small></small><br>
<small>Connects to a SourceOffsite server on </small><small>server1:8888</small><small>
with build,build as the username &amp; password</small><small> . </small><small>
The SourceSafe database resides on a different box (server2)&nbsp;
&amp; the VSS database is on a share called "vss"</small><br>
<small>Checks-out "project1" </small><small>Only the "project1" directory
will be locked as the recursive option was not set. Extra status messages
will be displayed on screen.</small><small> The soscmd(.exe) file to be
used resides in /usr/bin</small><br>
<small><br>
</small>
<hr width="100%" size="2"><small><br>
</small><br>
<br>
<br>
<br>
<br>
</body>
</html>

+ 1
- 0
docs/manual/optionaltasklist.html View File

@@ -43,6 +43,7 @@
<a href="OptionalTasks/rpm.html">Rpm</a><br>
<a href="OptionalTasks/script.html">Script</a><br>
<a href="OptionalTasks/sound.html">Sound</a><br>
<a href="OptionalTasks/sos.html">SourceOffSite</a><br>
<a href="OptionalTasks/starteam.html">Starteam Tasks</a><br>
<a href="OptionalTasks/stylebook.html">Stylebook</a><br>
<a href="OptionalTasks/telnet.html">Telnet</a><br>


+ 4
- 0
src/main/org/apache/tools/ant/taskdefs/defaults.properties View File

@@ -135,6 +135,10 @@ p4add=org.apache.tools.ant.taskdefs.optional.perforce.P4Add
jspc=org.apache.tools.ant.taskdefs.optional.jsp.JspC
replaceregexp=org.apache.tools.ant.taskdefs.optional.ReplaceRegExp
translate=org.apache.tools.ant.taskdefs.optional.i18n.Translate
sosget=org.apache.tools.ant.taskdefs.optional.sos.SOSGet
soscheckin=org.apache.tools.ant.taskdefs.optional.sos.SOSCheckin
soscheckout=org.apache.tools.ant.taskdefs.optional.sos.SOSCheckout
soslabel=org.apache.tools.ant.taskdefs.optional.sos.SOSLabel

# deprecated ant tasks (kept for back compatibility)
starteam=org.apache.tools.ant.taskdefs.optional.scm.AntStarTeamCheckOut


+ 488
- 0
src/main/org/apache/tools/ant/taskdefs/optional/sos/SOS.java View File

@@ -0,0 +1,488 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2000 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.sos;

import java.io.File;
import org.apache.tools.ant.*;
import org.apache.tools.ant.taskdefs.Execute;
import org.apache.tools.ant.taskdefs.LogStreamHandler;
import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.Path;

/**
* A base class for creating tasks for executing commands on SourceOffSite
* <p>
* The class extends the 'exec' task as it operates by executing the soscmd(.exe) program
* supplied with SOS. By default the task expects soscmd(.exe) to be in the path,
* you can override this be specifying the sosdir attribute.
* </p>
* <p>
* This class provides set and get methods for the following attributes
* <br> 'vssserverpath'
* <br> 'sosserverpath'
* <br> 'vsspath'
* <br> 'projectpath'
* <br> 'username'
* <br> 'password'
* <br> 'soscmddir'
* <br> 'file'
* <br> 'soshome'
* <br> 'localpath"
* <br> 'comment'
* <br> 'label'
* <br> 'version'
* <br> 'recursive'
* <br> 'verbose'
* <br> 'nocache'
* <br> 'nocompression'
* <br>
* It also contains constants for the flags that can be passed to SOS.
* <p>
* These tasks were inspired by the VSS tasks
*
* @author <a href="mailto:jesse@cryptocard.com">Jesse Stockall</a>
*/

public abstract class SOS extends Task {

private String sosCmdDir = null;
private String sosUsername = null;
private String sosPassword = "";
private String projectPath = null;
private String vssServerPath = null;
private String sosServerPath = null;
private String sosHome = null;
private String localPath = null;
private String version = null;
private String label = null;
private String comment = null;
private String filename = null;

private boolean noCompress = false;
private boolean noCache = false;
private boolean recursive = false;
private boolean verbose = false;


/**
* Disable the cache
*
* @param nocache The new noCache value
*/
public void setNoCache(boolean nocache) {
noCache = nocache;
}


/**
* Disable compression
*
* @param nocompress The new noCompress value
*/
public void setNoCompress(boolean nocompress) {
noCompress = nocompress;
}


/**
* Set the directory where soscmd(.exe) is located
*
* @param dir The new sosCmd value
*/
public final void setSosCmd(String dir) {
sosCmdDir = project.translatePath(dir);
}


/**
* Set the username to use to access SOS.
*
* @param username The new username value
*/
public final void setUsername(String username) {
sosUsername = username;
}


/**
* Set the password to use to access SOS.
*
* @param password The new password value
*/
public final void setPassword(String password) {
sosPassword = password;
}


/**
* Set the path to the item in SOS to operate on
* <p>
* To avoid the "$$" in th build file we add it here
*
* @param projectpath The new projectPath value
*/
public final void setProjectPath(String projectpath) {
projectPath = SOSCmd.PROJECT_PREFIX + projectpath;
}


/**
* Set the path to the location of the ss.ini
*
* @param vssServerPath The new vssServerPath value
*/
public final void setVssServerPath(String vssServerPath) {
this.vssServerPath = vssServerPath;
}


/**
* Set the path of soshome
*
* @param sosHome The new sosHome value
*/
public final void setSosHome(String sosHome) {
this.sosHome = sosHome;
}


/**
* Set the address & port of SourceOffSite Server
*
* @param sosServerPath The new sosServerPath value
*/
public final void setSosServerPath(String sosServerPath) {
this.sosServerPath = sosServerPath;
}


/**
* Set the local path.
*
* @param path The new localPath value
*/
public void setLocalPath(Path path) {
localPath = path.toString();
}


/**
* Set the filename to get from SOS
*
* @param filename The new file value
*/
public final void setFile(String filename) {
this.filename = filename;
}


/**
* Set behaviour verbose or quiet
*
* @param verbose The new verbose value
*/
public void setVerbose(boolean verbose) {
this.verbose = verbose;
}


/**
* Set behaviour recursive or non-recursive
*
* @param recursive The new recursive value
*/
public void setRecursive(boolean recursive) {
this.recursive = recursive;
}


/**
* Set the stored version string
*
* @param version The new version value
*/
public void setVersion(String version) {
this.version = version;
}


/**
* Set the labeled version to operate on in SourceSafe
*
* @param label The new label value
*/
public void setLabel(String label) {
this.label = label;
}


/**
* Set the comment to get
*
* @param comment The new comment value
*/
public void setComment(String comment) {
this.comment = comment;
}


/**
* Get the executable to run. Add the path if it was specifed in the build file
*
* @return String the executable to run
*/
public String getSosCommand() {
if (sosCmdDir == null) {
return SOSCmd.COMMAND_SOS_EXE;
} else {
return sosCmdDir + File.separator + SOSCmd.COMMAND_SOS_EXE;
}
}

/**
* Get the comment
* @return String if it was set, null if not
*/
public String getComment() {
return comment;
}


/**
* Get the version
* @return String if it was set, null if not
*/
public String getVersion() {
return version;
}


/**
* Get the label
* @return String if it was set, null if not
*/
public String getLabel() {
return label;
}


/**
* Get the username
* @return String if it was set, null if not
*/
public String getUsername() {
return sosUsername;
}


/**
* Get the password
* @return String empty string if it wans't set
*/
public String getPassword() {
return sosPassword;
}


/**
* Get the project path
* @return String if it was set, null if not
*/
public String getProjectPath() {
return projectPath;
}


/**
* Get the VSS server path
* @return String if it was set, null if not
*/
public String getVssServerPath() {
return vssServerPath;
}


/**
* Get the SOS home directory
* @return String if it was set, null if not
*/
public String getSosHome() {
return sosHome;
}


/**
* Get the SOS serve path
* @return String if it was set, null if not
*/
public String getSosServerPath() {
return sosServerPath;
}


/**
* Get the filename to be acted upon
* @return String if it was set, null if not
*/
public String getFilename() {
return filename;
}


/**
* Get the NoCompress flag
*
* @return String the 'nocompress' Flag if the attribute was 'true', otherwise an empty string
*/
public String getNoCompress() {
if (!noCompress) {
return "";
} else {
return SOSCmd.FLAG_NO_COMPRESSION;
}
}


/**
* Get the NoCache flag
*
* @return String the 'nocache' Flag if the attribute was 'true', otherwise an empty string
*/
public String getNoCache() {
if (!noCache) {
return "";
} else {
return SOSCmd.FLAG_NO_CACHE;
}
}


/**
* Get the 'verbose' Flag
*
* @return String the 'verbose' Flag if the attribute was 'true', otherwise an empty string
*/
public String getVerbose() {
if (!verbose) {
return "";
} else {
return SOSCmd.FLAG_VERBOSE;
}
}


/**
* Get the 'recursive' Flag
*
* @return String the 'recursive' Flag if the attribute was 'true', otherwise an empty string
*/
public String getRecursive() {
if (!recursive) {
return "";
} else {
return SOSCmd.FLAG_RECURSION;
}
}


/**
* Builds and returns the working directory
* <p>
* The localpath is created if it didn't exist
*
* @return String the absolute path of the working directory
*/
public String getLocalPath() {
if (localPath == null) {
return project.getBaseDir().getAbsolutePath();
} else {
// make sure localDir exists, create it if it doesn't
File dir = project.resolveFile(localPath);
if (!dir.exists()) {
boolean done = dir.mkdirs();
if (!done) {
String msg = "Directory " + localPath + " creation was not " +
"successful for an unknown reason";
throw new BuildException(msg, location);
}
project.log("Created dir: " + dir.getAbsolutePath());
}
return dir.getAbsolutePath();
}
}


/**
* Execute the created command line
*
* @param cmd Description of Parameter
* @return int the exit code
* @throws BuildException
*/
protected int run(Commandline cmd) {
try {
Execute exe = new Execute(new LogStreamHandler(this,
Project.MSG_INFO,
Project.MSG_WARN));

exe.setAntRun(project);
exe.setWorkingDirectory(project.getBaseDir());
exe.setCommandline(cmd.getCommandline());
return exe.execute();
} catch (java.io.IOException e) {
throw new BuildException(e, location);
}
}
}


+ 257
- 0
src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSCheckin.java View File

@@ -0,0 +1,257 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2000 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.sos;

import org.apache.tools.ant.*;
import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.Path;

/**
* Task to commit and unlock file(s) in Visual Source Safe via a SourceOffSite server.
* <p>
* The following attributes are interpretted:
* <table border="1">
* <tr>
* <th>Attribute</th>
* <th>Values</th>
* <th>Required</th>
* </tr>
* <tr>
* <td>soscmddir</td>
* <td>Directory which contains soscmd(.exe) <br>
* soscmd(.exe) must be in the path if this is not specified</td>
* <td>No</td>
* </tr>
* <tr>
* <td>vssserverpath</td>
* <td>path to the srcsafe.ini - eg. \\server\vss\srcsafe.ini</td>
* <td>Yes</td>
* </tr>
* <tr>
* <td>sosserverpath</td>
* <td>address and port of the SOS server - eg. 192.168.0.1:8888</td>
* <td>Yes</td>
* </tr>
* <tr>
* <td>projectpath</td>
* <td>SourceSafe project path without the "$"</td>
* <td>Yes</td>
* </tr>
* <tr>
* <td>file</td>
* <td>Filename to act upon<br> If no file is specified then act upon the project</td>
* <td>No</td>
* </tr>
* <tr>
* <td>username</td>
* <td>SourceSafe username</td>
* <td>Yes</td>
* </tr>
* <tr>
* <td>password</td>
* <td>SourceSafe 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>soshome</td>
* <td>The path to the SourceOffSite home directory</td>
* <td>No</td>
* </tr>
* <tr>
* <td>nocompression</td>
* <td>true or false - disable compression</td>
* <td>No</td>
* </tr>
* <tr>
* <td>recursive</td>
* <td>true or false - Only works with the CheckOutProject command</td>
* <td>No</td>
* </tr>
* <tr>
* <td>nocache</td>
* <td>true or false - Only needed if SOSHOME is set as an enviroment variable</td>
* <td>No</td>
* </tr>
* <tr>
* <td>verbose</td>
* <td>true or false - Status messages are displayed</td>
* <td>No</td>
* </tr>
* <td>comment</td>
* <td>A comment to be applied to all files being checked in</td>
* <td>No</td>
* </tr>
* </table>
*
* @author <a href="mailto:jesse@cryptocard.com">Jesse Stockall</a>
*/

public class SOSCheckin extends SOS {
Commandline commandLine;


/**
* Executes the task.
* <br>
* Builds a command line to execute soscmd and then calls Exec's run method
* to execute the command line.
*
* @exception BuildException Description of Exception
*/
public void execute() throws BuildException {
int result = 0;
buildCmdLine();
result = run(commandLine);
if (result == 255) {
// This is the exit status
String msg = "Failed executing: " + commandLine.toString();
throw new BuildException(msg, location);
}
}


/**
* Build the command line <br>
*
* CheckInFile required parameters: -server -name -password -database -project -file<br>
* CheckInFile optional parameters: -workdir -log -verbose -nocache
* -nocompression -soshome<br>
*
* CheckInProject required parameters: -server -name -password -database -project<br>
* CheckInProject optional parameters: workdir -recursive -log -verbose -nocache
* -nocompression -soshome<br>
*
* @return Commandline the generated command to be executed
*/
protected Commandline buildCmdLine() {
commandLine = new Commandline();
// Get the path to the soscmd(.exe)
commandLine.setExecutable(getSosCommand());
// If we find a "file" attribute then act on a file otherwise act on a project
if (getFilename() != null) {
// add -command CheckInFile to the commandline
commandLine.createArgument().setValue(SOSCmd.FLAG_COMMAND);
commandLine.createArgument().setValue(SOSCmd.COMMAND_CHECKIN_FILE);
// add -file xxxxx to the commandline
commandLine.createArgument().setValue(SOSCmd.FLAG_FILE);
commandLine.createArgument().setValue(getFilename());
} else {
// add -command CheckInProject to the commandline
commandLine.createArgument().setValue(SOSCmd.FLAG_COMMAND);
commandLine.createArgument().setValue(SOSCmd.COMMAND_CHECKIN_PROJECT);
// look for a recursive option
commandLine.createArgument().setValue(getRecursive());
}
// SOS server address is required
if (getSosServerPath() == null) {
throw new BuildException("sosserverpath attribute must be set!", location);
}
commandLine.createArgument().setValue(SOSCmd.FLAG_SOS_SERVER);
commandLine.createArgument().setValue(getSosServerPath());
// Login info is required
if (getUsername() == null) {
throw new BuildException("username attribute must be set!", location);
}
commandLine.createArgument().setValue(SOSCmd.FLAG_USERNAME);
commandLine.createArgument().setValue(getUsername());
// The SOS class knows that the SOS server needs the password flag,
// even if there is no password ,so we send a " "
commandLine.createArgument().setValue(SOSCmd.FLAG_PASSWORD);
commandLine.createArgument().setValue(getPassword());
// VSS Info is required
if (getVssServerPath() == null) {
throw new BuildException("vssserverpath attribute must be set!", location);
}
commandLine.createArgument().setValue(SOSCmd.FLAG_VSS_SERVER);
commandLine.createArgument().setValue(getVssServerPath());
// VSS project is required
if (getProjectPath() == null) {
throw new BuildException("projectpath attribute must be set!", location);
}
commandLine.createArgument().setValue(SOSCmd.FLAG_PROJECT);
commandLine.createArgument().setValue(getProjectPath());

// The following options are optional.

// -verbose
commandLine.createArgument().setValue(getVerbose());
// Disable Compression
commandLine.createArgument().setValue(getNoCompress());
// Path to the SourceOffSite home directory /home/user/.sos
if (getSosHome() == null) {
// If -soshome was not specified then we can look for nocache
commandLine.createArgument().setValue(getNoCache());
} else {
commandLine.createArgument().setValue(SOSCmd.FLAG_SOS_HOME);
commandLine.createArgument().setValue(getSosHome());
}
// If a working directory was specified then add it to the command line
if (getLocalPath() != null) {
commandLine.createArgument().setValue(SOSCmd.FLAG_WORKING_DIR);
commandLine.createArgument().setValue(getLocalPath());
}
// Look for a comment
if (getComment() != null) {
commandLine.createArgument().setValue(SOSCmd.FLAG_COMMENT);
commandLine.createArgument().setValue(getComment());
}
return commandLine;
}
}


+ 247
- 0
src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSCheckout.java View File

@@ -0,0 +1,247 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2000 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.sos;

import org.apache.tools.ant.*;
import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.Path;

/**
* Task to retreive and lock file(s) in Visual Source Safe via a SourceOffSite server.
* <p>
* The following attributes are interpretted:
* <table border="1">
* <tr>
* <th>Attribute</th>
* <th>Values</th>
* <th>Required</th>
* </tr>
* <tr>
* <td>soscmddir</td>
* <td>Directory which contains soscmd(.exe) <br>
* soscmd(.exe) must be in the path if this is not specified</td>
* <td>No</td>
* </tr>
* <tr>
* <td>vssserverpath</td>
* <td>path to the srcsafe.ini - eg. \\server\vss\srcsafe.ini</td>
* <td>Yes</td>
* </tr>
* <tr>
* <td>sosserverpath</td>
* <td>address and port of the SOS server - eg. 192.168.0.1:8888</td>
* <td>Yes</td>
* </tr>
* <tr>
* <td>projectpath</td>
* <td>SourceSafe project path without the "$"</td>
* <td>Yes</td>
* </tr>
* <tr>
* <td>file</td>
* <td>Filename to act upon<br> If no file is specified then act upon the project</td>
* <td>No</td>
* </tr>
* <tr>
* <td>username</td>
* <td>SourceSafe username</td>
* <td>Yes</td>
* </tr>
* <tr>
* <td>password</td>
* <td>SourceSafe 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>soshome</td>
* <td>The path to the SourceOffSite home directory</td>
* <td>No</td>
* </tr>
* <tr>
* <td>nocompression</td>
* <td>true or false - disable compression</td>
* <td>No</td>
* </tr>
* <tr>
* <td>recursive</td>
* <td>true or false - Only works with the CheckOutProject command</td>
* <td>No</td>
* </tr>
* <tr>
* <td>nocache</td>
* <td>true or false - Only needed if SOSHOME is set as an enviroment variable</td>
* <td>No</td>
* </tr>
* <tr>
* <td>verbose</td>
* <td>true or false - Status messages are displayed</td>
* <td>No</td>
* </tr>
* </table>
*
* @author <a href="mailto:jesse@cryptocard.com">Jesse Stockall</a>
*/

public class SOSCheckout extends SOS {
Commandline commandLine;


/**
* Executes the task.
* <br>
* Builds a command line to execute soscmd and then calls Exec's run method
* to execute the command line.
*
* @exception BuildException Description of Exception
*/
public void execute() throws BuildException {
int result = 0;
buildCmdLine();
result = run(commandLine);
if (result == 255) {
// This is the exit status
String msg = "Failed executing: " + commandLine.toString();
throw new BuildException(msg, location);
}
}


/**
* Build the command line <br>
*
* CheckOutFile required parameters: -server -name -password -database -project -file<br>
* CheckOutFile optional parameters: -workdir -verbose -nocache -nocompression -soshome<br>
*
* CheckOutProject required parameters: -server -name -password -database -project<br>
* CheckOutProject optional parameters:-workdir -recursive -verbose -nocache
* -nocompression -soshome<br>
*
* @return Commandline the generated command to be executed
*/
protected Commandline buildCmdLine() {
commandLine = new Commandline();
// Get the path to the soscmd(.exe)
commandLine.setExecutable(getSosCommand());
// If we find a "file" attribute then act on a file otherwise act on a project
if (getFilename() != null) {
// add -command CheckOutFile to the commandline
commandLine.createArgument().setValue(SOSCmd.FLAG_COMMAND);
commandLine.createArgument().setValue(SOSCmd.COMMAND_CHECKOUT_FILE);
// add -file xxxxx to the commandline
commandLine.createArgument().setValue(SOSCmd.FLAG_FILE);
commandLine.createArgument().setValue(getFilename());
} else {
// add -command CheckOutProject to the commandline
commandLine.createArgument().setValue(SOSCmd.FLAG_COMMAND);
commandLine.createArgument().setValue(SOSCmd.COMMAND_CHECKOUT_PROJECT);
// look for a recursive option
commandLine.createArgument().setValue(getRecursive());
}
// SOS server address is required
if (getSosServerPath() == null) {
throw new BuildException("sosserverpath attribute must be set!", location);
}
commandLine.createArgument().setValue(SOSCmd.FLAG_SOS_SERVER);
commandLine.createArgument().setValue(getSosServerPath());
// Login info is required
if (getUsername() == null) {
throw new BuildException("username attribute must be set!", location);
}
commandLine.createArgument().setValue(SOSCmd.FLAG_USERNAME);
commandLine.createArgument().setValue(getUsername());
// The SOS class knows that the SOS server needs the password flag,
// even if there is no password ,so we send a " "
commandLine.createArgument().setValue(SOSCmd.FLAG_PASSWORD);
commandLine.createArgument().setValue(getPassword());
// VSS Info is required
if (getVssServerPath() == null) {
throw new BuildException("vssserverpath attribute must be set!", location);
}
commandLine.createArgument().setValue(SOSCmd.FLAG_VSS_SERVER);
commandLine.createArgument().setValue(getVssServerPath());
// VSS project is required
if (getProjectPath() == null) {
throw new BuildException("projectpath attribute must be set!", location);
}
commandLine.createArgument().setValue(SOSCmd.FLAG_PROJECT);
commandLine.createArgument().setValue(getProjectPath());

// The following options are optional.

// -verbose
commandLine.createArgument().setValue(getVerbose());
// Disable Compression
commandLine.createArgument().setValue(getNoCompress());
// Path to the SourceOffSite home directory /home/user/.sos
if (getSosHome() == null) {
// If -soshome was not specified then we can look for nocache
commandLine.createArgument().setValue(getNoCache());
} else {
commandLine.createArgument().setValue(SOSCmd.FLAG_SOS_HOME);
commandLine.createArgument().setValue(getSosHome());
}
// If a working directory was specified then add it to the command line
if (getLocalPath() != null) {
commandLine.createArgument().setValue(SOSCmd.FLAG_WORKING_DIR);
commandLine.createArgument().setValue(getLocalPath());
}
return commandLine;
}
}


+ 93
- 0
src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSCmd.java View File

@@ -0,0 +1,93 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2000 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.sos;

/**
* Interface to hold constants used by the SOS tasks
*
* @author <a href="mailto:jesse@cryptocard.com">Jesse Stockall</a>
*/
public interface SOSCmd {
// soscmd Command options
public final static String COMMAND_SOS_EXE = "soscmd";
public final static String COMMAND_GET_FILE = "GetFile";
public final static String COMMAND_GET_PROJECT = "GetProject";
public final static String COMMAND_CHECKOUT_FILE = "CheckOutFile";
public final static String COMMAND_CHECKOUT_PROJECT = "CheckOutProject";
public final static String COMMAND_CHECKIN_FILE = "CheckInFile";
public final static String COMMAND_CHECKIN_PROJECT = "CheckInProject";
public final static String COMMAND_HISTORY = "GetFileHistory";
public final static String COMMAND_LABEL = "AddLabel";
public final static String PROJECT_PREFIX = "$";
// soscmd Option flags
public final static String FLAG_COMMAND = "-command";
public final static String FLAG_VSS_SERVER = "-database";
public final static String FLAG_USERNAME = "-name";
public final static String FLAG_PASSWORD = "-password";
public final static String FLAG_COMMENT = "-log";
public final static String FLAG_WORKING_DIR = "-workdir";
public final static String FLAG_RECURSION = "-recursive";
public final static String FLAG_VERSION = "-revision";
public final static String FLAG_LABEL = "-label";
public final static String FLAG_NO_COMPRESSION = "-nocompress";
public final static String FLAG_NO_CACHE = "-nocache";
public final static String FLAG_SOS_SERVER = "-server";
public final static String FLAG_SOS_HOME = "-soshome";
public final static String FLAG_PROJECT = "-project";
public final static String FLAG_FILE = "-file";
public final static String FLAG_VERBOSE = "-verbose";
}


+ 268
- 0
src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSGet.java View File

@@ -0,0 +1,268 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2000 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.sos;

import org.apache.tools.ant.*;
import org.apache.tools.ant.types.Commandline;

/**
* Task to retreive file(s) from Visual Source Safe via a SourceOffSite server.
* <p>
* The following attributes are interpretted:
* <table border="1">
* <tbody>
* <tr>
* <th>Attribute</th>
* <th>Values</th>
* <th>Required</th>
* </tr>
* <tr>
* <td>soscmddir</td>
* <td>Directory which contains soscmd(.exe) <br>
* soscmd(.exe) must be in the path if this is not specified</td>
* <td>No</td>
* </tr>
* <tr>
* <td>vssserverpath</td>
* <td>path to the srcsafe.ini - eg. \\server\vss\srcsafe.ini</td>
* <td>Yes</td>
* </tr>
* <tr>
* <td>sosserverpath</td>
* <td>address and port of the SOS server - eg. 192.168.0.1:8888</td>
* <td>Yes</td>
* </tr>
* <tr>
* <td>projectpath</td>
* <td>SourceSafe project path without the "$"</td>
* <td>Yes</td>
* </tr>
* <tr>
* <td>file</td>
* <td>Filename to act upon<br>
* If no file is specified then act upon the project</td>
* <td>No</td>
* </tr>
* <tr>
* <td>username</td>
* <td>SourceSafe username</td>
* <td>Yes</td>
* </tr>
* <tr>
* <td>password</td>
* <td>SourceSafe 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>soshome</td>
* <td>The path to the SourceOffSite home directory</td>
* <td>No</td>
* </tr>
* <tr>
* <td>nocompression</td>
* <td>true or false - disable compression</td>
* <td>No</td>
* </tr>
* <tr>
* <td>recursive</td>
* <td>true or false - Only works with the GetProject command</td>
* <td>No</td>
* </tr>
* <tr>
* <td>version</td>
* <td>a version number to get - Only works with the GetFile command</td>
* <td>No</td>
* </tr>
* <tr>
* <td>label</td>
* <td>a label version to get - Only works with the GetProject command</td>
* <td>No</td>
* </tr>
* <tr>
* <td>nocache</td>
* <td>true or false - Only needed if SOSHOME is set as an enviroment variable</td>
* <td>No</td>
* </tr>
* <tr>
* <td>verbose</td>
* <td>true or false - Status messages are displayed</td>
* <td>No</td>
* </tr>
*
* @author <a href="mailto:jesse@cryptocard.com">Jesse Stockall</a>
*/

public class SOSGet extends SOS {
Commandline commandLine;


/**
* Executes the task.
* <br>
* Builds a command line to execute soscmd and then calls Exec's run method
* to execute the command line.
*
* @exception BuildException Description of Exception
*/
public void execute() throws BuildException {
int result = 0;
buildCmdLine();
result = run(commandLine);
if (result == 255) {
// This is the exit status
String msg = "Failed executing: " + commandLine.toString();
throw new BuildException(msg, location);
}
}


/**
* Build the command line <br>
*
* GetFile required parameters: -server -name -password -database -project -file<br>
* GetFile optional parameters: -workdir -revision -verbose -nocache -nocompression -soshome<br>
*
* GetProject required parameters: -server -name -password -database -project<br>
* GetProject optional parameters: -label -workdir -recursive -verbose -nocache
* -nocompression -soshome<br>
*
* @return Commandline the generated command to be executed
*/
protected Commandline buildCmdLine() {
commandLine = new Commandline();
// Get the path to the soscmd(.exe)
commandLine.setExecutable(getSosCommand());
// If we find a "file" attribute then act on a file otherwise act on a project
if (getFilename() != null) {
// add -command GetFile to the commandline
commandLine.createArgument().setValue(SOSCmd.FLAG_COMMAND);
commandLine.createArgument().setValue(SOSCmd.COMMAND_GET_FILE);
// add -file xxxxx to the commandline
commandLine.createArgument().setValue(SOSCmd.FLAG_FILE);
commandLine.createArgument().setValue(getFilename());
// look for a version attribute
if (getVersion() != null) {
//add -revision xxxxx to the commandline
commandLine.createArgument().setValue(SOSCmd.FLAG_VERSION);
commandLine.createArgument().setValue(getVersion());
}
} else {
// add -command GetProject to the commandline
commandLine.createArgument().setValue(SOSCmd.FLAG_COMMAND);
commandLine.createArgument().setValue(SOSCmd.COMMAND_GET_PROJECT);
// look for a recursive option
commandLine.createArgument().setValue(getRecursive());
// look for a label option
if (getLabel() != null) {
commandLine.createArgument().setValue(SOSCmd.FLAG_LABEL);
commandLine.createArgument().setValue(getLabel());
}
}
// SOS server address is required
if (getSosServerPath() == null) {
throw new BuildException("sosserverpath attribute must be set!", location);
}
commandLine.createArgument().setValue(SOSCmd.FLAG_SOS_SERVER);
commandLine.createArgument().setValue(getSosServerPath());
// Login info is required
if (getUsername() == null) {
throw new BuildException("username attribute must be set!", location);
}
commandLine.createArgument().setValue(SOSCmd.FLAG_USERNAME);
commandLine.createArgument().setValue(getUsername());
// The SOS class knows that the SOS server needs the password flag,
// even if there is no password ,so we send a " "
commandLine.createArgument().setValue(SOSCmd.FLAG_PASSWORD);
commandLine.createArgument().setValue(getPassword());
// VSS Info is required
if (getVssServerPath() == null) {
throw new BuildException("vssserverpath attribute must be set!", location);
}
commandLine.createArgument().setValue(SOSCmd.FLAG_VSS_SERVER);
commandLine.createArgument().setValue(getVssServerPath());
// SS project path is required
if (getProjectPath() == null) {
throw new BuildException("projectpath attribute must be set!", location);
}
commandLine.createArgument().setValue(SOSCmd.FLAG_PROJECT);
commandLine.createArgument().setValue(getProjectPath());

// The following options are optional.

// -verbose
commandLine.createArgument().setValue(getVerbose());
// Disable Compression
commandLine.createArgument().setValue(getNoCompress());
// Path to the SourceOffSite home directory /home/user/.sos
if (getSosHome() == null) {
// If -soshome was not specified then we can look for nocache
commandLine.createArgument().setValue(getNoCache());
} else {
commandLine.createArgument().setValue(SOSCmd.FLAG_SOS_HOME);
commandLine.createArgument().setValue(getSosHome());
}
//If a working directory was specified then add it to the command line
if (getLocalPath() != null) {
commandLine.createArgument().setValue(SOSCmd.FLAG_WORKING_DIR);
commandLine.createArgument().setValue(getLocalPath());
}
return commandLine;
}
}


+ 204
- 0
src/main/org/apache/tools/ant/taskdefs/optional/sos/SOSLabel.java View File

@@ -0,0 +1,204 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2000 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.sos;

import org.apache.tools.ant.*;
import org.apache.tools.ant.types.Commandline;

/**
* Task to label a Visual Source Safe via a SourceOffSite server.
* <p>
* The following attributes are interpretted:
* <table border="1">
* <tr>
* <th>Attribute</th>
* <th>Values</th>
* <th>Required</th>
* </tr>
* <tr>
* <td>soscmddir</td>
* <td>Directory which contains soscmd(.exe) <br>
* soscmd(.exe) must be in the path if this is not specified</td>
* <td>No</td>
* </tr>
* <tr>
* <td>vssserverpath</td>
* <td>path to the srcsafe.ini - eg. \\server\vss\srcsafe.ini</td>
* <td>Yes</td>
* </tr>
* <tr>
* <td>sosserverpath</td>
* <td>address and port of the SOS server - eg. 192.168.0.1:8888</td>
* <td>Yes</td>
* </tr>
* <tr>
* <td>projectpath</td>
* <td>SourceSafe project path without the "$"</td>
* <td>Yes</td>
* </tr>
* <tr>
* <td>username</td>
* <td>SourceSafe username</td>
* <td>Yes</td>
* </tr>
* <tr>
* <td>password</td>
* <td>SourceSafe password</td>
* <td>No</td>
* </tr>
* <tr>
* <td>label</td>
* <td>The label to apply to a project</td>
* <td>Yes</td>
* </tr>
* <tr>
* <td>comment</td>
* <td>A comment to be applied to all files being labeled</td>
* <td>No</td>
* </tr>
* <tr>
* <td>verbose</td>
* <td>true or false - Status messages are displayed</td>
* <td>No</td>
* </tr>
* </table>
*
* @author <a href="mailto:jesse@cryptocard.com">Jesse Stockall</a>
*/

public class SOSLabel extends SOS {
Commandline commandLine;


/**
* Executes the task. <br>
* Builds a command line to execute soscmd and then calls Exec's run method
* to execute the command line.
*
* @exception BuildException Description of Exception
*/
public void execute() throws BuildException {
int result = 0;
buildCmdLine();
result = run(commandLine);
if (result == 255) {
// This is the exit status
String msg = "Failed executing: " + commandLine.toString();
throw new BuildException(msg, location);
}
}


/**
* Build the command line <br>
* AddLabel required parameters: -server -name -password -database -project -label<br>
* AddLabel optional parameters: -verbose -comment<br>
*
* @return Commandline the generated command to be executed
*/
protected Commandline buildCmdLine() {
commandLine = new Commandline();
// Get the path to the soscmd(.exe)
commandLine.setExecutable(getSosCommand());
// add -command AddLabel to the commandline
commandLine.createArgument().setValue(SOSCmd.FLAG_COMMAND);
commandLine.createArgument().setValue(SOSCmd.COMMAND_LABEL);
// SOS server address is required
if (getSosServerPath() == null) {
throw new BuildException("sosserverpath attribute must be set!", location);
}
commandLine.createArgument().setValue(SOSCmd.FLAG_SOS_SERVER);
commandLine.createArgument().setValue(getSosServerPath());
// Login info is required
if (getUsername() == null) {
throw new BuildException("username attribute must be set!", location);
}
commandLine.createArgument().setValue(SOSCmd.FLAG_USERNAME);
commandLine.createArgument().setValue(getUsername());
// The SOS class knows that the SOS server needs the password flag,
// even if there is no password ,so we send a " "
commandLine.createArgument().setValue(SOSCmd.FLAG_PASSWORD);
commandLine.createArgument().setValue(getPassword());
// VSS Info is required
if (getVssServerPath() == null) {
throw new BuildException("vssserverpath attribute must be set!", location);
}
commandLine.createArgument().setValue(SOSCmd.FLAG_VSS_SERVER);
commandLine.createArgument().setValue(getVssServerPath());
// SS project path is required
if (getProjectPath() == null) {
throw new BuildException("projectpath attribute must be set!", location);
}
commandLine.createArgument().setValue(SOSCmd.FLAG_PROJECT);
commandLine.createArgument().setValue(getProjectPath());
// a label is required
if (getLabel() == null) {
throw new BuildException("label attribute must be set!", location);
}
commandLine.createArgument().setValue(SOSCmd.FLAG_LABEL);
commandLine.createArgument().setValue(getLabel());

// The following options are optional.

// -verbose
commandLine.createArgument().setValue(getVerbose());
// Look for a comment
if (getComment() != null) {
commandLine.createArgument().setValue(SOSCmd.FLAG_COMMENT);
commandLine.createArgument().setValue(getComment());
}
return commandLine;
}
}


+ 13
- 0
src/main/org/apache/tools/ant/taskdefs/optional/sos/package.html View File

@@ -0,0 +1,13 @@
<html>
<body>
<p>
Ant tasks for working with a SourceOffSite source control system
</p>
<p>
The &lt;SOSGet&gt; Retreives file(s) from a SOS database<br>
The &lt;SOSCheckin&gt; Commits and unlocks file(s) in a SOS database<br>
The &lt;SOSCheckout&gt; Retreives and lock file(s) in a SOS database<br>
The &lt;SOSLabel&gt; Label a SOS database<br>
</p>
</body>
</html>

+ 690
- 0
src/testcases/org/apache/tools/ant/taskdefs/optional/sos/SOSTest.java View File

@@ -0,0 +1,690 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 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.sos;

import junit.framework.TestCase;
import junit.framework.AssertionFailedError;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.util.FileUtils;
import org.apache.tools.ant.taskdefs.optional.sos.*;

/**
* Basic testcase to ensure that command line generation is ok
* @author <a href="mailto:jesse@cryptocard.com">Jesse Stockall</a>
*/
public class SOSTest extends TestCase {

private SOSGet sosGet;
private SOSCheckin sosCheckin;
private SOSCheckout sosCheckout;
private SOSLabel sosLabel;
private Project project;
private Commandline commandline;
private FileUtils fileUtils;
private static final String VSS_SERVER_PATH = "\\\\server\\vss\\srcsafe.ini";
private static final String VSS_PROJECT_PATH = "/SourceRoot/Project";
private static final String SOS_SERVER_PATH = "192.168.0.1:8888";
private static final String SOS_USERNAME = "ant";
private static final String SOS_PASSWORD = "rocks";
private static final String LOCAL_PATH = "/home/jesse/source/dir";
private static final String SRC_FILE = "Class1.java";
private static final String SRC_LABEL = "label1";
private static final String SRC_COMMENT = "I fixed a bug";
private static final String SOS_HOME = "/home/user/.sos";
private static final String VERSION = "007";

public SOSTest(String s) {
super(s);
}

protected void setUp() throws Exception {
sosGet = new SOSGet();
sosCheckin = new SOSCheckin();
sosCheckout = new SOSCheckout();
sosLabel = new SOSLabel();
project = new Project();
project.setBasedir(".");
fileUtils = FileUtils.newFileUtils();
}

/**
* Test SOSGetFile flags & commandline generation
*/
public void testGetFileFlags() {
String[] sTestCmdLine = { "soscmd", "-command", "GetFile", "-file",
SRC_FILE, "-revision", "007", "-server", SOS_SERVER_PATH, "-name",
SOS_USERNAME, "-password", SOS_PASSWORD, "-database", VSS_SERVER_PATH,
"-project", "$"+VSS_PROJECT_PATH, "-verbose", "-nocompress",
"-nocache", "-workdir", fileUtils.normalize(LOCAL_PATH).getAbsolutePath() };

Path path = new Path(project, LOCAL_PATH);

// Set up a SOSGet task
sosGet.setProject(project);
sosGet.setVssServerPath(VSS_SERVER_PATH);
sosGet.setSosServerPath(SOS_SERVER_PATH);
sosGet.setProjectPath(VSS_PROJECT_PATH);
sosGet.setFile(SRC_FILE);
sosGet.setUsername(SOS_USERNAME);
sosGet.setPassword(SOS_PASSWORD);
sosGet.setVersion(VERSION);
sosGet.setLocalPath(path);
sosGet.setNoCache(true);
sosGet.setNoCompress(true);
sosGet.setVerbose(true);
sosGet.setRecursive(true);

commandline = sosGet.buildCmdLine();
String[] sGeneratedCmdLine = commandline.getCommandline();
int i = 0;
while (i < sTestCmdLine.length) {
try {
assertEquals("GetFile arg # " + String.valueOf(i),
sTestCmdLine[i],
sGeneratedCmdLine[i]);
i++;
} catch (ArrayIndexOutOfBoundsException aioob) {
fail("GetFile missing arg");
}

}
if (sGeneratedCmdLine.length > sTestCmdLine.length) {
// We have extra elements
fail("GetFile extra args");
}
}

/**
* Test SOSGetProject flags & commandline generation
*/
public void testGetProjectFlags() {
String[] sTestCmdLine = { "soscmd", "-command", "GetProject", "-recursive",
"-label", SRC_LABEL, "-server", SOS_SERVER_PATH, "-name", SOS_USERNAME,
"-password", "", "-database", VSS_SERVER_PATH , "-project",
"$"+VSS_PROJECT_PATH, "", "", "-soshome", SOS_HOME, "-workdir",
project.getBaseDir().getAbsolutePath() };
// Set up a SOSGet task
sosGet.setProject(project);
sosGet.setVssServerPath(VSS_SERVER_PATH);
sosGet.setSosServerPath(SOS_SERVER_PATH);
sosGet.setProjectPath(VSS_PROJECT_PATH);
sosGet.setLabel(SRC_LABEL);
sosGet.setUsername(SOS_USERNAME);
sosGet.setSosHome(SOS_HOME);
sosGet.setNoCache(true);
sosGet.setNoCompress(false);
sosGet.setVerbose(false);
sosGet.setRecursive(true);

commandline = sosGet.buildCmdLine();
String[] sGeneratedCmdLine = commandline.getCommandline();

int i = 0;
while (i < sTestCmdLine.length) {
try {
assertEquals("GetProject arg # " + String.valueOf(i),
sTestCmdLine[i],
sGeneratedCmdLine[i]);
i++;
} catch (ArrayIndexOutOfBoundsException aioob) {
fail("GetProject missing arg");
}

}
if (sGeneratedCmdLine.length > sTestCmdLine.length) {
// We have extra elements
fail("GetProject extra args");
}
}

/**
* Test SOSGet required attributes 1 by 1
*/
public void testGetExceptions() {
boolean buildEx = false;

// Set up a SOSGet task
sosGet.setProject(project);
// No options set - SosServerPath should fail
try {
commandline = sosGet.buildCmdLine();
} catch (BuildException be) {
if (be.getMessage().compareTo("sosserverpath attribute must be set!") == 0) {
buildEx = true;
}
}
assertTrue("GetException SosServerPath", buildEx);
buildEx = false;

// Set SosServerPath - Username should fail
sosGet.setSosServerPath(SOS_SERVER_PATH);
try {
commandline = sosGet.buildCmdLine();
} catch (BuildException be) {
if (be.getMessage().compareTo("username attribute must be set!") == 0) {
buildEx = true;
}
}
assertTrue("GetException Username", buildEx);
buildEx = false;

// Set Username - VssServerPath should fail
sosGet.setUsername(SOS_USERNAME);
try {
commandline = sosGet.buildCmdLine();
} catch (BuildException be) {
if (be.getMessage().compareTo("vssserverpath attribute must be set!") == 0) {
buildEx = true;
}
}
assertTrue("GetException VssServerPath", buildEx);
buildEx = false;

// Set VssServerPath - ProjectPath should fail
sosGet.setVssServerPath(VSS_SERVER_PATH);
try {
commandline = sosGet.buildCmdLine();
} catch (BuildException be) {
if (be.getMessage().compareTo("projectpath attribute must be set!") == 0) {
buildEx = true;
}
}
assertTrue("GetException ProjectPath", buildEx);

// Set ProjectPath - All required options set
sosGet.setProjectPath(VSS_PROJECT_PATH);
try {
commandline = sosGet.buildCmdLine();
buildEx = true;
} catch (BuildException be) {
buildEx = false;
}
assertTrue("GetException All required options set", buildEx);
}

/**
* Test CheckInFile option flags
*/
public void testCheckinFileFlags() {
String[] sTestCmdLine = { "soscmd", "-command", "CheckInFile", "-file",
SRC_FILE, "-server", SOS_SERVER_PATH, "-name", SOS_USERNAME,
"-password", SOS_PASSWORD, "-database", VSS_SERVER_PATH, "-project",
"$"+VSS_PROJECT_PATH, "-verbose", "-nocompress", "-nocache",
"-workdir", fileUtils.normalize(LOCAL_PATH).getAbsolutePath(), "-log", SRC_COMMENT };

Path path = new Path(project, LOCAL_PATH);

// Set up a SOSCheckin task
sosCheckin.setProject(project);
sosCheckin.setVssServerPath(VSS_SERVER_PATH);
sosCheckin.setSosServerPath(SOS_SERVER_PATH);
sosCheckin.setProjectPath(VSS_PROJECT_PATH);
sosCheckin.setFile(SRC_FILE);
sosCheckin.setComment(SRC_COMMENT);
sosCheckin.setUsername(SOS_USERNAME);
sosCheckin.setPassword(SOS_PASSWORD);
sosCheckin.setLocalPath(path);
sosCheckin.setNoCache(true);
sosCheckin.setNoCompress(true);
sosCheckin.setVerbose(true);
sosCheckin.setRecursive(true);

commandline = sosCheckin.buildCmdLine();
String[] sGeneratedCmdLine = commandline.getCommandline();

int i = 0;
while (i < sTestCmdLine.length) {
try {
assertEquals("CheckInFile arg # " + String.valueOf(i),
sTestCmdLine[i],
sGeneratedCmdLine[i]);
i++;
} catch (ArrayIndexOutOfBoundsException aioob) {
fail("CheckInFile missing arg");
}

}
if (sGeneratedCmdLine.length > sTestCmdLine.length) {
// We have extra elements
fail("CheckInFile extra args");
}
}

/**
* Test CheckInProject option flags
*/
public void testCheckinProjectFlags() {
String[] sTestCmdLine = { "soscmd", "-command", "CheckInProject",
"-recursive", "-server", SOS_SERVER_PATH, "-name", SOS_USERNAME,
"-password", "", "-database", VSS_SERVER_PATH , "-project",
"$"+VSS_PROJECT_PATH, "", "", "-soshome", SOS_HOME, "-workdir",
project.getBaseDir().getAbsolutePath(), "-log", SRC_COMMENT, };

// Set up a SOSCheckin task
sosCheckin.setProject(project);
sosCheckin.setVssServerPath(VSS_SERVER_PATH);
sosCheckin.setSosServerPath(SOS_SERVER_PATH);
sosCheckin.setProjectPath(VSS_PROJECT_PATH);
sosCheckin.setComment(SRC_COMMENT);
sosCheckin.setUsername(SOS_USERNAME);
sosCheckin.setSosHome(SOS_HOME);
sosCheckin.setNoCache(true);
sosCheckin.setNoCompress(false);
sosCheckin.setVerbose(false);
sosCheckin.setRecursive(true);

commandline = sosCheckin.buildCmdLine();
String[] sGeneratedCmdLine = commandline.getCommandline();

int i = 0;
while (i < sTestCmdLine.length) {
try {
assertEquals("CheckInProject arg # " + String.valueOf(i),
sTestCmdLine[i],
sGeneratedCmdLine[i]);
i++;
} catch (ArrayIndexOutOfBoundsException aioob) {
fail("CheckInProject missing arg");
}

}
if (sGeneratedCmdLine.length > sTestCmdLine.length) {
// We have extra elements
fail("CheckInProject extra args");
}
}

/**
* Test SOSCheckIn required attributes 1 by 1
*/
public void testCheckinExceptions() {
boolean buildEx = false;

// Set up a sosCheckin task
sosCheckin.setProject(project);
// No options set - SosServerPath should fail
try {
commandline = sosCheckin.buildCmdLine();
} catch (BuildException be) {
if (be.getMessage().compareTo("sosserverpath attribute must be set!") == 0) {
buildEx = true;
}
}
assertTrue("CheckinException SosServerPath", buildEx);
buildEx = false;

// Set SosServerPath - Username should fail
sosCheckin.setSosServerPath(SOS_SERVER_PATH);
try {
commandline = sosCheckin.buildCmdLine();
} catch (BuildException be) {
if (be.getMessage().compareTo("username attribute must be set!") == 0) {
buildEx = true;
}
}
assertTrue("CheckinException Username", buildEx);
buildEx = false;

// Set Username - VssServerPath should fail
sosCheckin.setUsername(SOS_USERNAME);
try {
commandline = sosCheckin.buildCmdLine();
} catch (BuildException be) {
if (be.getMessage().compareTo("vssserverpath attribute must be set!") == 0) {
buildEx = true;
}
}
assertTrue("CheckinException VssServerPath", buildEx);
buildEx = false;

// Set VssServerPath - ProjectPath should fail
sosCheckin.setVssServerPath(VSS_SERVER_PATH);
try {
commandline = sosCheckin.buildCmdLine();
} catch (BuildException be) {
if (be.getMessage().compareTo("projectpath attribute must be set!") == 0) {
buildEx = true;
}
}
assertTrue("CheckinException ProjectPath", buildEx);

// Set ProjectPath - All required options set
sosCheckin.setProjectPath(VSS_PROJECT_PATH);
try {
commandline = sosCheckin.buildCmdLine();
buildEx = true;
} catch (BuildException be) {
buildEx = false;
}
assertTrue("CheckinException All required options set", buildEx);
}

/**
* Test CheckOutFile option flags
*/
public void testCheckoutFileFlags() {
String[] sTestCmdLine = { "soscmd", "-command", "CheckOutFile", "-file",
SRC_FILE, "-server", SOS_SERVER_PATH, "-name", SOS_USERNAME,
"-password", SOS_PASSWORD, "-database", VSS_SERVER_PATH, "-project",
"$"+VSS_PROJECT_PATH, "-verbose", "-nocompress", "-nocache",
"-workdir", fileUtils.normalize(LOCAL_PATH).getAbsolutePath() };

Path path = new Path(project, LOCAL_PATH);

// Set up a SOSCheckout task
sosCheckout.setProject(project);
sosCheckout.setVssServerPath(VSS_SERVER_PATH);
sosCheckout.setSosServerPath(SOS_SERVER_PATH);
sosCheckout.setProjectPath(VSS_PROJECT_PATH);
sosCheckout.setFile(SRC_FILE);
sosCheckout.setUsername(SOS_USERNAME);
sosCheckout.setPassword(SOS_PASSWORD);
sosCheckout.setLocalPath(path);
sosCheckout.setNoCache(true);
sosCheckout.setNoCompress(true);
sosCheckout.setVerbose(true);
sosCheckout.setRecursive(true);

commandline = sosCheckout.buildCmdLine();
String[] sGeneratedCmdLine = commandline.getCommandline();

int i = 0;
while (i < sTestCmdLine.length) {
try {
assertEquals("CheckOutFile arg # " + String.valueOf(i),
sTestCmdLine[i],
sGeneratedCmdLine[i]);
i++;
} catch (ArrayIndexOutOfBoundsException aioob) {
fail("CheckOutFile missing arg");
}

}
if (sGeneratedCmdLine.length > sTestCmdLine.length) {
// We have extra elements
fail("CheckOutFile extra args");
}
}

/**
* Test CheckOutProject option flags
*/
public void testCheckoutProjectFlags() {
String[] sTestCmdLine = { "soscmd", "-command", "CheckOutProject",
"-recursive", "-server", SOS_SERVER_PATH, "-name", SOS_USERNAME,
"-password", "", "-database", VSS_SERVER_PATH , "-project",
"$"+VSS_PROJECT_PATH, "", "", "-soshome", SOS_HOME, "-workdir",
project.getBaseDir().getAbsolutePath() };

// Set up a sosCheckout task
sosCheckout.setProject(project);
sosCheckout.setVssServerPath(VSS_SERVER_PATH);
sosCheckout.setSosServerPath(SOS_SERVER_PATH);
sosCheckout.setProjectPath(VSS_PROJECT_PATH);
sosCheckout.setUsername(SOS_USERNAME);
sosCheckout.setSosHome(SOS_HOME);
sosCheckout.setNoCache(true);
sosCheckout.setNoCompress(false);
sosCheckout.setVerbose(false);
sosCheckout.setRecursive(true);

commandline = sosCheckout.buildCmdLine();
String[] sGeneratedCmdLine = commandline.getCommandline();

int i = 0;
while (i < sTestCmdLine.length) {
try {
assertEquals("CheckOutProject arg # " + String.valueOf(i),
sTestCmdLine[i],
sGeneratedCmdLine[i]);
i++;
} catch (ArrayIndexOutOfBoundsException aioob) {
fail("CheckOutProject missing arg");
}

}
if (sGeneratedCmdLine.length > sTestCmdLine.length) {
// We have extra elements
fail("CheckOutProject extra args");
}
}

/**
* Test SOSCheckout required attributes 1 by 1
*/
public void testCheckoutExceptions() {
boolean buildEx = false;

// Set up a sosCheckout task
sosCheckout.setProject(project);
// No options set - SosServerPath should fail
try {
commandline = sosCheckout.buildCmdLine();
} catch (BuildException be) {
if (be.getMessage().compareTo("sosserverpath attribute must be set!") == 0) {
buildEx = true;
}
}
assertTrue("CheckoutException SosServerPath", buildEx);
buildEx = false;

// Set SosServerPath - Username should fail
sosCheckout.setSosServerPath(SOS_SERVER_PATH);
try {
commandline = sosCheckout.buildCmdLine();
} catch (BuildException be) {
if (be.getMessage().compareTo("username attribute must be set!") == 0) {
buildEx = true;
}
}
assertTrue("CheckoutException Username", buildEx);
buildEx = false;

// Set Username - VssServerPath should fail
sosCheckout.setUsername(SOS_USERNAME);
try {
commandline = sosCheckout.buildCmdLine();
} catch (BuildException be) {
if (be.getMessage().compareTo("vssserverpath attribute must be set!") == 0) {
buildEx = true;
}
}
assertTrue("CheckoutException VssServerPath", buildEx);
buildEx = false;

// Set VssServerPath - ProjectPath should fail
sosCheckout.setVssServerPath(VSS_SERVER_PATH);
try {
commandline = sosCheckout.buildCmdLine();
} catch (BuildException be) {
if (be.getMessage().compareTo("projectpath attribute must be set!") == 0) {
buildEx = true;
}
}
assertTrue("CheckoutException ProjectPath", buildEx);

// Set ProjectPath - All required options set
sosCheckout.setProjectPath(VSS_PROJECT_PATH);
try {
commandline = sosCheckout.buildCmdLine();
buildEx = true;
} catch (BuildException be) {
buildEx = false;
}
assertTrue("CheckoutException All required options set", buildEx);
}

/**
* Test Label option flags
*/
public void testLabelFlags() {
String[] sTestCmdLine = { "soscmd", "-command", "AddLabel", "-server",
SOS_SERVER_PATH, "-name", SOS_USERNAME, "-password", "", "-database",
VSS_SERVER_PATH , "-project", "$"+VSS_PROJECT_PATH, "-label",
SRC_LABEL, "-verbose", "-log", SRC_COMMENT };

// Set up a sosCheckout task
sosLabel.setVssServerPath(VSS_SERVER_PATH);
sosLabel.setSosServerPath(SOS_SERVER_PATH);
sosLabel.setProjectPath(VSS_PROJECT_PATH);
sosLabel.setUsername(SOS_USERNAME);
sosLabel.setSosHome(SOS_HOME);
sosLabel.setComment(SRC_COMMENT);
sosLabel.setLabel(SRC_LABEL);
sosLabel.setNoCache(true);
sosLabel.setNoCompress(false);
sosLabel.setVerbose(true);

commandline = sosLabel.buildCmdLine();
String[] sGeneratedCmdLine = commandline.getCommandline();

int i = 0;
while (i < sTestCmdLine.length) {
try {
assertEquals("AddLabel arg # " + String.valueOf(i),
sTestCmdLine[i],
sGeneratedCmdLine[i]);
i++;
} catch (ArrayIndexOutOfBoundsException aioob) {
fail("AddLabel missing arg");
}

}
if (sGeneratedCmdLine.length > sTestCmdLine.length) {
// We have extra elements
fail("AddLabel extra args");
}
}

/**
* Test SOSLabel required attributes 1 by 1
*/
public void testLabelExceptions() {
boolean buildEx = false;

// Set up a sosLabel task
sosLabel.setProject(project);
// No options set - SosServerPath should fail
try {
commandline = sosLabel.buildCmdLine();
} catch (BuildException be) {
if (be.getMessage().compareTo("sosserverpath attribute must be set!") == 0) {
buildEx = true;
}
}
assertTrue("LabelException SosServerPath", buildEx);
buildEx = false;

// Set SosServerPath - Username should fail
sosLabel.setSosServerPath(SOS_SERVER_PATH);
try {
commandline = sosLabel.buildCmdLine();
} catch (BuildException be) {
if (be.getMessage().compareTo("username attribute must be set!") == 0) {
buildEx = true;
}
}
assertTrue("LabelException Username", buildEx);
buildEx = false;

// Set Username - VssServerPath should fail
sosLabel.setUsername(SOS_USERNAME);
try {
commandline = sosLabel.buildCmdLine();
} catch (BuildException be) {
if (be.getMessage().compareTo("vssserverpath attribute must be set!") == 0) {
buildEx = true;
}
}
assertTrue("LabelException VssServerPath", buildEx);
buildEx = false;

// Set VssServerPath - ProjectPath should fail
sosLabel.setVssServerPath(VSS_SERVER_PATH);
try {
commandline = sosLabel.buildCmdLine();
} catch (BuildException be) {
if (be.getMessage().compareTo("projectpath attribute must be set!") == 0) {
buildEx = true;
}
}
assertTrue("LabelException ProjectPath", buildEx);

// Set ProjectPath - Label should fail
sosLabel.setProjectPath(VSS_PROJECT_PATH);
try {
commandline = sosLabel.buildCmdLine();
} catch (BuildException be) {
if (be.getMessage().compareTo("label attribute must be set!") == 0) {
buildEx = true;
}
}
assertTrue("LabelException Label", buildEx);

// Set Label - All required options set
sosLabel.setLabel(SRC_LABEL);
try {
commandline = sosLabel.buildCmdLine();
buildEx = true;
} catch (BuildException be) {
buildEx = false;
}
assertTrue("LabelException All required options set", buildEx);
}

}

Loading…
Cancel
Save