This is based on the original submission from the CruiseControl project. Original <starteam> task has been deprecated Starteam tasks now resides in the starteam package rather than scm. Submitted by: stevec@ignitesports.com (Steve Cohen) git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270254 13f79535-47bb-0310-9956-ffa450edef68master
@@ -4,8 +4,25 @@ | |||
<title>Apache Ant User Manual</title> | |||
</head> | |||
<body> | |||
<h1>StarTeam Support</h1> | |||
<ul> | |||
<!-- <li><a href="#stcheckin">STCheckin</a></li>--> | |||
<li><a href="#stcheckout">STCheckout</a></li> | |||
<li><a href="#stlabel">STLabel</a></li> | |||
<li><a href="#starteam"><i>StarTeam (deprecated) </i></a></li> | |||
</ul> | |||
<h2>Starteam</h2> | |||
<p> | |||
These tasks make use of functions from the StarTeam API. As a result | |||
they are only available to licensed users of StarTeam. You must have | |||
<CODE>starteam-sdk.jar</CODE> in your classpath to run these tasks. | |||
For more information about the StarTeam API and how to license it, see | |||
the <a href="http://www.starbase.com">StarBase</a> web site.</p> | |||
<hr></hr> | |||
<a name="stcheckout"> | |||
<h2>STCheckout</h2></a> | |||
<h3>Description</h3> | |||
@@ -13,43 +30,273 @@ Checks out files from a StarTeam project. | |||
<p> | |||
The <i>includes</i> and <i>excludes</i> attributes function differently from | |||
other tasks in Ant. Multiple patterns must be separated by spaces, not | |||
commas. See the examples for more information.</p> | |||
<p> | |||
This program makes use of functions from the StarTeam API. As a result | |||
this task is only available to licensed users of StarTeam. You must have | |||
<CODE>starteam-sdk.jar</CODE> in your classpath to run this task. | |||
For more information about the StarTeam API and how to license it, see | |||
the <a href="http://www.starbase.com">StarBase</a> web site.</p> | |||
other tasks in Ant. Inclusion/exclusion by folder is NOT supported. | |||
</p> | |||
<h3>Parameters</h3> | |||
<table border="1" cellpadding="2" cellspacing="0"> | |||
<tr> | |||
<td valign="top"><b>Attribute</b></td> | |||
<td valign="top"><b>Description</b></td> | |||
<td align="center" valign="top"><b>Required</b></td> | |||
<td valign="top">username</td> | |||
<td valign="top">The username of the account used to log in to the StarTeam server.</td> | |||
<td align="center" valign="top">yes</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">password</td> | |||
<td valign="top">The password of the account used to log in to the StarTeam server.</td> | |||
<td align="center" valign="top">yes</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">URL</td> | |||
<td valign="top">A string of the form <code>"servername:portnum/project/view</code> | |||
which enables user to set all of these elements in one string. </td> | |||
<td align="center" valign="top">yes*</td> | |||
</tr> <tr> | |||
<td valign="top">servername</td> | |||
<td valign="top">The name of the StarTeam server.</td> | |||
<td align="center" valign="top">yes</td> | |||
<td align="center" valign="top">yes*</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">serverport</td> | |||
<td valign="top">The port number of the StarTeam server.</td> | |||
<td align="center" valign="top">yes</td> | |||
<td align="center" valign="top">yes*</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">projectname</td> | |||
<td valign="top">The name of the StarTeam project.</td> | |||
<td align="center" valign="top">yes*</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">viewname</td> | |||
<td valign="top">The name of the view in the StarTeam project.</td> | |||
<td align="center" valign="top">yes*</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">rootstarteamfolder</td> | |||
<td valign="top">The root of the subtree in the StarTeam repository from which to | |||
check out files. Defaults to the root folder of the view ('/'). </td> | |||
<td align="center" valign="top">no</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">rootlocalfolder</td> | |||
<td valign="top">The local folder which will be the root of the tree to which files are checked out. If this is not supplied, then the StarTeam "default folder" associated with <i>rootstarteamfolder</i> is used.</td> | |||
<td align="center" valign="top">no</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">createworkingdirs</td> | |||
<td valign="top">creates local folders even when the corresponding StarTeam folder is empty. Defaults to "true".</td> | |||
<td align="center" valign="top">no</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">deleteuncontrolled</td> | |||
<td valign="top">if true, any files NOT in StarTeam will be deleted. Defaults to "true".</td> | |||
<td align="center" valign="top">no</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">includes</td> | |||
<td valign="top">Only check out files that match at least one of the patterns in this list. Patterns must be separated by <i>commas</i>. Patterns in <i>excludes</i> take precedence over patterns in <i>includes</i>.</td> | |||
<td align="center" valign="top">no</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">excludes</td> | |||
<td valign="top">Do not check out files that match at least one of the patterns in this list. Patterns must be separated by <i>commas</i>. Patterns in <i>excludes</i> take precedence over patterns in <i>includes</i>.</td> | |||
<td align="center" valign="top">no</td> | |||
</tr> | |||
</table> | |||
* Either the URL attribute or <b>all four</b> of the servername, serverport, projectname and viewname attributes must be defined. <br/> | |||
<h3>Examples</h3> | |||
<pre> | |||
<stcheckout servername="STARTEAM" | |||
serverport="49201" | |||
projectname="AProject" | |||
viewname="AView" | |||
username="auser" | |||
password="secret" | |||
rootlocalfolder="C:\dev\buildtest\co" | |||
/> | |||
</pre> | |||
The minimum necessary to check out files out from a StarTeam server. This will | |||
check out all files in the <i>AView</i> view of the <i>AProject</i> project to | |||
<code>C:\dev\buildtest\co</code>. Empty folders in StarTeam will have local folders | |||
created for them and any non-StarTeam files found in the tree will be deleted. | |||
Or more simply: | |||
<pre> | |||
<stcheckout URL="STARTEAM:49201/Aproject/AView" | |||
username="auser" | |||
password="secret" | |||
rootlocalfolder="C:\dev\buildtest\co" | |||
/> | |||
</pre> | |||
<br></br> | |||
<pre> | |||
<stcheckout URL="STARTEAM:49201/Aproject/AView" | |||
username="auser" | |||
password="secret" | |||
rootlocalfolder="C:\dev\buildtest\co" | |||
rootstarteamfolder="\Dev" | |||
excludes="*.bak *.old" | |||
/> | |||
</pre> | |||
This will checkout all files from the <i>Dev</i> folder and below that do not | |||
end in <i>.bak</i> or <i>.old</i>. | |||
<pre> | |||
<stcheckout URL="STARTEAM:49201/Aproject/AView" | |||
username="auser" | |||
password="secret" | |||
rootlocalfolder="C:\dev\buildtest\co" | |||
includes="*.htm,*.html" | |||
excludes="index.*" | |||
/> | |||
</pre> | |||
This is an example of overlapping <i>includes</i> and <i>excludes</i> attributes. Because | |||
<i>excludes</i> takes precedence over <i>includes</i>, files named <code>index.html</code> will | |||
not be checked out by this command. | |||
<pre> | |||
<stcheckout URL="STARTEAM:49201/Aproject/AView" | |||
username="auser" | |||
password="secret" | |||
rootstarteamfolder="src/java" | |||
rootlocalfolder="C:\dev\buildtest\co" | |||
/> | |||
</pre> | |||
<br></br> | |||
<pre> | |||
<stcheckout URL="STARTEAM:49201/Aproject/AView" | |||
username="auser" | |||
password="secret" | |||
rootstarteamfolder="src/java" | |||
/> | |||
</pre> | |||
<br></br> | |||
<pre> | |||
<stcheckout URL="STARTEAM:49201/Aproject/AView" | |||
username="auser" | |||
password="secret" | |||
rootstarteamfolder="src/java" | |||
rootlocalfolder="C:\dev\buildtest\co\src\java" | |||
/> | |||
</pre> | |||
In the preceding three examples, assuming that the AProject project has a default folder of | |||
"AProject", the first example will check the files located in starteam under src/java out to a tree rooted at C:\dev\buildtest\co, | |||
the second to a tree rooted at C:\dev\buildtest\co\AProject\src\java and the third to a tree rooted at C:\dev\buildtest\co\src\java. | |||
<a name="stlabel"> | |||
<h2>STLabel</h2></a> | |||
<h3>Description</h3> | |||
Creates a view label in StarTeam at the specified view. The label will be classified by StarTeam as a "build label". This task will fail if there already exexists in <i>viewname</i> a label with the same name as the <i>label</i> parameter. | |||
<h3>Parameters</h3> | |||
<table border="1" cellpadding="2" cellspacing="0"> | |||
<tr> | |||
<td valign="top">username</td> | |||
<td valign="top">The username of the account used to log in to the StarTeam server.</td> | |||
<td align="center" valign="top">yes</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">password</td> | |||
<td valign="top">The password of the account used to log in to the StarTeam server.</td> | |||
<td align="center" valign="top">yes</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">URL</td> | |||
<td valign="top">A string of the form <code>"servername:portnum/project/view"</code> | |||
which enables user to set all of these elements in one string. </td> | |||
<td align="center" valign="top">yes*</td> | |||
</tr> <tr> | |||
<td valign="top">servername</td> | |||
<td valign="top">The name of the StarTeam server.</td> | |||
<td align="center" valign="top">yes*</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">serverport</td> | |||
<td valign="top">The port number of the StarTeam server.</td> | |||
<td align="center" valign="top">yes*</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">projectname</td> | |||
<td valign="top">The name of the StarTeam project.</td> | |||
<td align="center" valign="top">yes*</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">viewname</td> | |||
<td valign="top">The name of the view in the StarTeam project.</td> | |||
<td align="center" valign="top">yes*</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">label</td> | |||
<td valign="top">The name to be given to the label</td> | |||
<td align="center" valign="top">yes</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">lastbuild</td> | |||
<td valign="top">The timestamp of the build that will be stored with the label. Must be formatted <code>yyyyMMddHHmmss</code></td> | |||
<td align="center" valign="top">yes</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">description</td> | |||
<td valign="top">A description of the view to be stored in the StarTeam project.</td> | |||
<td align="center" valign="top">no</td> | |||
</tr> | |||
</table> | |||
* Either the URL attribute or <b>all four</b> of the servername, serverport, projectname and viewname attributes must be defined. <br/> | |||
<h3>Examples</h3> | |||
This example shows the use of this tag. It will create a label named <i>Version 6.2</i> with | |||
<i>"Thorough description"</i> as its description. | |||
<pre> | |||
<tstamp> | |||
<format property="nowstamp" pattern="yyyyMMddHHmmss" locale="en"/> | |||
</tstamp> | |||
<starteamlabel URL="STARTEAM:49201/Aproject/AView" | |||
username="auser" | |||
password="secret" | |||
label="Version 6.2" | |||
lastbuild="${nowstamp}" | |||
description-"Thorough description" | |||
/> | |||
</pre> | |||
<hr></hr> | |||
<a name="starteam"> | |||
<h2>Starteam</h2></a> | |||
<h3><i>Deprecated</i></h3> | |||
<p><i>This task has been deprecated. Use the <a href=#stcheckout">STCheckout</a> task instead.</i></p> | |||
<h3>Description</h3> | |||
Checks out files from a StarTeam project. | |||
<p> | |||
The <i>includes</i> and <i>excludes</i> attributes function differently from | |||
other tasks in Ant. Multiple patterns must be separated by spaces, not | |||
commas. See the examples for more information.</p> | |||
<h3>Parameters</h3> | |||
<table border="1" cellpadding="2" cellspacing="0"> | |||
<tr> | |||
<td valign="top"><b>Attribute</b></td> | |||
<td valign="top"><b>Description</b></td> | |||
<td align="center" valign="top"><b>Required</b></td> | |||
</tr> | |||
<tr> | |||
<td valign="top">username</td> | |||
<td valign="top">The username of the account used to log in to the StarTeam server.</td> | |||
@@ -59,7 +306,28 @@ the <a href="http://www.starbase.com">StarBase</a> web site.</p> | |||
<td valign="top">password</td> | |||
<td valign="top">The password of the account used to log in to the StarTeam server.</td> | |||
<td align="center" valign="top">yes</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">servername</td> | |||
<td valign="top">The name of the StarTeam server.</td> | |||
<td align="center" valign="top">yes</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">serverport</td> | |||
<td valign="top">The port number of the StarTeam server.</td> | |||
<td align="center" valign="top">yes</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">projectname</td> | |||
<td valign="top">The name of the StarTeam project.</td> | |||
<td align="center" valign="top">yes</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">viewname</td> | |||
<td valign="top">The name of the view in the StarTeam project.</td> | |||
<td align="center" valign="top">yes</td> | |||
</tr> | |||
<tr> | |||
<td valign="top">targetfolder</td> | |||
<td valign="top">The folder to which files are checked out. What this precisely means is determined by the <i>targetFolderAbsolute</i> param.</td> | |||
@@ -43,7 +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/starteam.html">Starteam</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> | |||
<a href="OptionalTasks/test.html">Test</a><br> | |||
@@ -79,7 +79,8 @@ ftp=org.apache.tools.ant.taskdefs.optional.net.FTP | |||
icontract=org.apache.tools.ant.taskdefs.optional.IContract | |||
javacc=org.apache.tools.ant.taskdefs.optional.javacc.JavaCC | |||
jjtree=org.apache.tools.ant.taskdefs.optional.javacc.JJTree | |||
starteam=org.apache.tools.ant.taskdefs.optional.scm.AntStarTeamCheckOut | |||
stcheckout=org.apache.tools.ant.taskdefs.optional.starteam.StartTeamCheckout | |||
stlabel=org.apache.tools.ant.taskdefs.optional.starteam.StartTeamLabel | |||
wljspc=org.apache.tools.ant.taskdefs.optional.jsp.WLJspc | |||
jlink=org.apache.tools.ant.taskdefs.optional.jlink.JlinkTask | |||
native2ascii=org.apache.tools.ant.taskdefs.optional.Native2Ascii | |||
@@ -133,6 +134,7 @@ replaceregexp=org.apache.tools.ant.taskdefs.optional.ReplaceRegExp | |||
translate=org.apache.tools.ant.taskdefs.optional.i18n.Translate | |||
# deprecated ant tasks (kept for back compatibility) | |||
starteam=org.apache.tools.ant.taskdefs.optional.scm.AntStarTeamCheckOut | |||
javadoc2=org.apache.tools.ant.taskdefs.Javadoc | |||
#compileTask=org.apache.tools.ant.taskdefs.CompileTask | |||
copydir=org.apache.tools.ant.taskdefs.Copydir | |||
@@ -285,6 +285,9 @@ public class AntStarTeamCheckOut extends org.apache.tools.ant.Task | |||
*/ | |||
public void execute() throws BuildException | |||
{ | |||
log("DEPRECATED - The starteam task is deprecated. Use stcheckout instead.", | |||
Project.MSG_WARN); | |||
// Connect to the StarTeam server, and log on. | |||
Server s = getServer(); | |||
@@ -0,0 +1,264 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 1999 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.starteam; | |||
import java.io.FileNotFoundException; | |||
import java.io.IOException; | |||
import java.util.Enumeration; | |||
import java.util.Hashtable; | |||
import com.starbase.starteam.File; | |||
import com.starbase.starteam.Folder; | |||
import com.starbase.starteam.Item; | |||
import com.starbase.starteam.Status; | |||
import org.apache.tools.ant.Project; | |||
import org.apache.tools.ant.BuildException; | |||
/** | |||
* This class logs into StarTeam checks out any changes that have occurred since | |||
* the last successful build. It also creates all working directories on the | |||
* local directory if appropriate. Ant Usage: <taskdef name="starteamcheckout" | |||
* classname="org.apache.tools.ant.taskdefs.StarTeamCheckout"/> | |||
* <starteamcheckout username="BuildMaster" password="ant" starteamFolder="Source" | |||
* starteamurl="servername:portnum/project/view" | |||
* createworkingdirectories="true"/> | |||
* | |||
* @author Christopher Charlier, ThoughtWorks, Inc. 2001 | |||
* @author <a href="mailto:jcyip@thoughtworks.com">Jason Yip</a> | |||
* @author Jason Pettiss | |||
* @version 1.1 | |||
* @author <a href="mailto:stevec@ignitesports.com">Steve Cohen</a> | |||
* @see <A HREF="http://www.starbase.com/">StarBase Web Site</A> | |||
*/ | |||
public class StarTeamCheckout extends TreeBasedTask { | |||
private boolean createDirs = true; | |||
private boolean deleteUncontrolled = true; | |||
/** | |||
* Set the attribute that tells ant if we want to create all directories | |||
* that are in the Starteam repository regardless if they are empty. | |||
*/ | |||
public void setCreateWorkingDirs(boolean value) { | |||
this.createDirs = value; | |||
} | |||
/** | |||
* Sets the attribute that tells ant whether or not to remove local files | |||
* that are NOT found in the Starteam repository. | |||
*/ | |||
public void setDeleteUncontrolled(boolean value) { | |||
this.deleteUncontrolled = value; | |||
} | |||
/** | |||
* Implements base-class abstract function to perform the checkout operation | |||
* on the files in each folder of the tree. | |||
* | |||
* @param starteamFolder the StarTeam folder from which files to be | |||
* checked out | |||
* @param targetFolder the local mapping of rootStarteamFolder | |||
*/ | |||
protected void visit(Folder starteamFolder, java.io.File targetFolder ) | |||
throws BuildException | |||
{ | |||
try { | |||
Hashtable localFiles = getLocalFiles(targetFolder); | |||
// If we have been told to create the working folders | |||
if (createDirs) { | |||
// Create if it doesn't exist | |||
if (!targetFolder.exists()) { | |||
targetFolder.mkdir(); | |||
} | |||
} | |||
// For all Files in this folder, we need to check | |||
// if there have been modifications. | |||
Item[] files = starteamFolder.getItems("File"); | |||
for (int i = 0; i < files.length; i++) { | |||
File eachFile = (File) files[i]; | |||
String filename = eachFile.getName(); | |||
java.io.File localFile = new java.io.File(targetFolder, filename); | |||
localFiles.remove(localFile.toString()); | |||
int fileStatus = (eachFile.getStatus()); | |||
// We try to update the status once to give StarTeam another chance. | |||
if (fileStatus == Status.MERGE || fileStatus == Status.UNKNOWN) { | |||
eachFile.updateStatus(true, true); | |||
} | |||
// If the file is current then skip it. | |||
// If the file doesn't pass the include/exclude tests, skip it. | |||
if (fileStatus == Status.CURRENT || !shouldProcess(filename)) { | |||
continue; | |||
} | |||
// Check out anything else. | |||
// Just a note: StarTeam has a status for NEW which implies that there | |||
// is an item on your local machine that is not in the repository. | |||
// These are the items that show up as NOT IN VIEW in the Starteam GUI. | |||
// One would think that we would want to perhaps checkin the NEW items | |||
// (not in all cases! - Steve Cohen 15 Dec 2001) | |||
// Unfortunately, the sdk doesn't really work, and we can't actually see | |||
// anything with a status of NEW. That is why we can just check out | |||
// everything here without worrying about losing anything. | |||
log("Checking Out: " + (localFile.toString()), Project.MSG_INFO); | |||
eachFile.checkoutTo(localFile, Item.LockType. | |||
UNCHANGED, true, true, true); | |||
} | |||
// Now we recursively call this method on all sub folders in this folder. | |||
Folder[] subFolders = starteamFolder.getSubFolders(); | |||
for (int i = 0; i < subFolders.length; i++) { | |||
localFiles.remove(subFolders[i].getPath()); | |||
visit(subFolders[i], | |||
new java.io.File(targetFolder, subFolders[i].getName())); | |||
} | |||
// Delete all folders or files that are not in Starteam. | |||
if (this.deleteUncontrolled && !localFiles.isEmpty()) { | |||
delete(localFiles); | |||
} | |||
} catch (IOException e) { | |||
throw new BuildException(e); | |||
} | |||
} | |||
/** | |||
* Deletes everything on the local machine that is not in Starteam. | |||
* | |||
* @param files | |||
*/ | |||
/** | |||
* Deletes everything on the local machine that is not in Starteam. | |||
* | |||
* @param files an "identity" <code>Hashtable</code> which we use only because | |||
* of ant's requirement to be JDK 1.1 compatible. Otherwise, we | |||
* could use a set. We are only interested in the keys, | |||
* not the associated values in this Hashtable. Each of its keys | |||
* represents the name of a local file to be deleted. | |||
*/ | |||
private void delete(Hashtable files) { | |||
try { | |||
Enumeration e = files.keys(); | |||
while (e.hasMoreElements()) { | |||
java.io.File file = new java.io.File(e.nextElement().toString()); | |||
delete(file); | |||
} | |||
} catch (SecurityException e) { | |||
log("Error deleting file: " + e, Project.MSG_ERR); | |||
} | |||
} | |||
/** | |||
* Deletes the file from the local drive. | |||
* @param file the file or directory to delete. | |||
* @return true if the file was successfully deleted otherwise false. | |||
*/ | |||
private boolean delete(java.io.File file) { | |||
// If the current file is a Directory, we need to delete all its children as well. | |||
if (file.isDirectory()) { | |||
java.io.File[] children = file.listFiles(); | |||
for (int i = 0; i < children.length; i++) { | |||
delete(children[i]); | |||
} | |||
} | |||
log("Deleting: " + file.getAbsolutePath(), Project.MSG_INFO); | |||
return file.delete(); | |||
} | |||
/** | |||
* Gets the collection of the local file names in the current directory We | |||
* need to check this collection against what we find in Starteam to | |||
* understand what we need to delete in order to synch with the repos. | |||
* | |||
* @param folder | |||
* @return | |||
*/ | |||
private static Hashtable getLocalFiles(java.io.File localFolder) { | |||
// we can't use java 2 collections so we will use an identity Hashtable to | |||
// hold the file names. We only care about the keys, not the values | |||
// (which will all be ""). | |||
Hashtable results = new Hashtable(); | |||
if (localFolder.exists()) { | |||
String[] localFiles = localFolder.list(); | |||
for (int i = 0; i < localFiles.length; i++) { | |||
results.put( localFolder.toString() + | |||
java.io.File.separatorChar + localFiles[i], ""); | |||
} | |||
} | |||
return results; | |||
} | |||
} | |||
@@ -0,0 +1,143 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 1999 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.starteam; | |||
import java.text.ParseException; | |||
import java.text.SimpleDateFormat; | |||
import java.util.Date; | |||
import com.starbase.starteam.Label; | |||
import com.starbase.starteam.ServerException; | |||
import com.starbase.starteam.StarTeamFinder; | |||
import com.starbase.starteam.View; | |||
import com.starbase.starteam.ViewConfiguration; | |||
import com.starbase.starteam.vts.comm.CommandException; | |||
import com.starbase.util.OLEDate; | |||
import org.apache.tools.ant.BuildException; | |||
/** | |||
* This class logs into StarTeam and creates a label for the repository at the | |||
* time of the last successful build. | |||
* Ant Usage: | |||
* <taskdef name="stlabel" | |||
* classname="org.apache.tools.ant.taskdefs.optional.starteam.StarTeamLabel"/> | |||
* <stlabel | |||
* label="1.0" lastbuild="20011514100000" description="Successful Build" | |||
* username="BuildMaster" password="ant" | |||
* starteamurl="server:port/project/view"/> | |||
* | |||
* @author Christopher Charlier, ThoughtWorks, Inc. 2001 | |||
* @author <a href="mailto:jcyip@thoughtworks.com">Jason Yip</a> | |||
* @see <A HREF="http://www.starbase.com/">StarBase Web Site</A> | |||
*/ | |||
public class StarTeamLabel extends StarTeamTask { | |||
/** | |||
* The name of the label to be set in Starteam. | |||
*/ | |||
private String labelName; | |||
/** | |||
* The label description to be set in Starteam. | |||
*/ | |||
private String description; | |||
/** | |||
* The time of the last successful. The new label will be a snapshot of the | |||
* repository at this time. String should be formatted as "yyyyMMddHHmmss" | |||
*/ | |||
private Date lastBuildTime; | |||
private static final SimpleDateFormat DATE_FORMAT = | |||
new SimpleDateFormat("yyyyMMddHHmmss"); | |||
public void setLabel(String label) { | |||
this.labelName = label; | |||
} | |||
public void setDescription(String description) { | |||
this.description = description; | |||
} | |||
public void setLastBuild(String lastbuild) throws BuildException { | |||
try { | |||
lastBuildTime = DATE_FORMAT.parse(lastbuild); | |||
} catch (ParseException e) { | |||
throw new BuildException("Unable to parse the date '" + lastbuild + "'", e); | |||
} | |||
} | |||
/** | |||
* This method does the work of creating the new view and checking it into | |||
* Starteam. | |||
* | |||
*/ | |||
public void execute() throws BuildException { | |||
OLEDate buildDate = new OLEDate(lastBuildTime); | |||
// Get view as of the last successful build time. | |||
View view = StarTeamFinder.openView(getUserName() + ":" + getPassword() | |||
+ "@" + getURL()); | |||
View snapshot = new View(view, ViewConfiguration.createFromTime(buildDate)); | |||
// Create the new label and update the repository | |||
new Label(snapshot, labelName, description, buildDate, true).update(); | |||
log("Created Label " + labelName); | |||
} | |||
} | |||
@@ -0,0 +1,297 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 1999 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.starteam; | |||
import com.starbase.starteam.ServerException; | |||
import com.starbase.starteam.vts.comm.CommandException; | |||
import org.apache.tools.ant.BuildException; | |||
import org.apache.tools.ant.Task; | |||
import java.io.FileNotFoundException; | |||
import java.util.StringTokenizer; | |||
/** | |||
* Common super class for all StarTeam tasks. | |||
* At this level of the hierarchy we are concerned only with obtaining a | |||
* connection to the StarTeam server. The subclass <code>TreeBasedTask</code>, | |||
* also abstract defines the tree-walking behavior common to many subtasks. | |||
* | |||
* @see TreeBasedTask | |||
* @author <a href="mailto:jcyip@thoughtworks.com">Jason Yip</a> | |||
* @version 1.1 | |||
* @author <a href="mailto:stevec@ignitesports.com">Steve Cohen</a> | |||
*/ | |||
public abstract class StarTeamTask extends Task { | |||
// ATTRIBUTES | |||
/** | |||
* The username of the connection | |||
*/ | |||
private String userName; | |||
/** | |||
* The username of the connection | |||
*/ | |||
private String password; | |||
/** | |||
* name of Starteam server to connect to | |||
*/ | |||
private String servername; | |||
/** | |||
* port of Starteam server to connect to | |||
*/ | |||
private String serverport; | |||
/** | |||
* name of Starteam project to connect to | |||
*/ | |||
private String projectname; | |||
/** | |||
* name of Starteam view to connect to | |||
*/ | |||
private String viewname; | |||
///////////////////////////////////////////////////////// | |||
// GET/SET methods. | |||
// Setters, of course are where ant user passes in values. | |||
///////////////////////////////////////////////////////// | |||
/** | |||
* Set the name of StarTeamServer | |||
* | |||
* @param servername a <code>String</code> value | |||
* @see setURL() | |||
*/ | |||
public void setServername(String servername) { | |||
this.servername = servername; | |||
} | |||
/** | |||
* returns the name of the StarTeamServer | |||
* | |||
* @return the name of the StarTeam server | |||
* @see getURL() | |||
*/ | |||
public String getServername() { | |||
return this.servername; | |||
} | |||
/** | |||
* set the port number of the StarTeam connection | |||
* | |||
* @param serverport port number to be set | |||
* @see setURL() | |||
*/ | |||
public void setServerport(String serverport) { | |||
this.serverport = serverport; | |||
} | |||
/** | |||
* returns the port number of the StarTeam connection | |||
* | |||
* @return the port number of the StarTeam connection | |||
* @see getURL() | |||
*/ | |||
public String getServerport() { | |||
return this.serverport; | |||
} | |||
/** | |||
* set the name of the StarTeam project to be acted on | |||
* | |||
* @param projectname the name of the StarTeam project to be acted on | |||
* @see setURL() | |||
*/ | |||
public void setProjectname(String projectname) { | |||
this.projectname = projectname; | |||
} | |||
/** | |||
* returns the name of the StarTeam project to be acted on | |||
* | |||
* @return the name of the StarTeam project to be acted on | |||
* @see getURL() | |||
*/ | |||
public String getProjectname() { | |||
return this.projectname; | |||
} | |||
/** | |||
* set the name of the StarTeam view to be acted on | |||
* | |||
* @param projectname the name of the StarTeam view to be acted on | |||
* @see setURL() | |||
*/ | |||
public void setViewname(String viewname) { | |||
this.viewname = viewname; | |||
} | |||
/** | |||
* returns the name of the StarTeam view to be acted on | |||
* | |||
* @return the name of the StarTeam view to be acted on | |||
* @see getURL() | |||
*/ public String getViewname() { | |||
return this.viewname; | |||
} | |||
/** | |||
* This is a convenience method for setting the server name, server port, | |||
* project name and project folder at one shot. | |||
* | |||
* @param url a <code>String</code> of the form | |||
* "servername:portnum/project/view" | |||
* @see setServerame() | |||
* @see setServerport() | |||
* @see setProjectname() | |||
* @see setViewname() | |||
*/ | |||
public void setURL(String url) { | |||
StringTokenizer t = new StringTokenizer(url,"/"); | |||
if (t.hasMoreTokens()) { | |||
String unpw = t.nextToken(); | |||
int pos = unpw.indexOf(":"); | |||
if (pos > 0) { | |||
this.servername = unpw.substring(0,pos); | |||
this.serverport = unpw.substring(pos+1); | |||
if (t.hasMoreTokens()) { | |||
this.projectname=t.nextToken(); | |||
if (t.hasMoreTokens()) { | |||
this.viewname = t.nextToken(); | |||
} | |||
} | |||
} | |||
} | |||
} | |||
/** | |||
* convenience method returns whole URL at once | |||
* returns | |||
* as a single string | |||
*/ | |||
/** | |||
* a convenience method which returns the whole StarTeam | |||
* connection information as a single URL string of | |||
* | |||
* @return a <code>String</code> of the form | |||
* "servername:portnum/project/view" | |||
* @see getServername() | |||
* @see getServerport() | |||
* @see getProjectname() | |||
* @see getViewname() | |||
*/ | |||
public String getURL() { | |||
return | |||
this.servername + ":" + | |||
this.serverport + "/" + | |||
this.projectname + "/" + | |||
((null==this.viewname)?"":this.viewname); | |||
} | |||
/** | |||
* set the name of the StarTeam user, needed for the connection | |||
* | |||
* @param userName name of the user to be logged in | |||
*/ | |||
public void setUserName(String userName) { | |||
this.userName = userName; | |||
} | |||
/** | |||
* returns the name of the StarTeam user | |||
* | |||
* @return the name of the StarTeam user | |||
*/ | |||
public String getUserName() { | |||
return this.userName; | |||
} | |||
/** | |||
* set the password to be used for login. | |||
* | |||
* @param password the password to be used for login | |||
*/ | |||
public void setPassword(String password) { | |||
this.password = password; | |||
} | |||
/** | |||
* returns the password used for login | |||
* | |||
* @return the password used for login | |||
*/ | |||
public String getPassword() { | |||
return this.password; | |||
} | |||
} | |||
@@ -0,0 +1,341 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 1999 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.starteam; | |||
import org.apache.tools.ant.DirectoryScanner; | |||
import org.apache.tools.ant.BuildException; | |||
import java.util.StringTokenizer; | |||
import java.io.IOException; | |||
import com.starbase.starteam.File; | |||
import com.starbase.starteam.Folder; | |||
import com.starbase.starteam.View; | |||
import com.starbase.starteam.ViewConfiguration; | |||
import com.starbase.util.OLEDate; | |||
import com.starbase.starteam.StarTeamFinder; | |||
/** | |||
* FileBasedTask.java | |||
* This abstract class is the base for any tasks that are tree-based, that | |||
* is, for tasks which iterate over a tree of folders in StarTeam which | |||
* is reflected in a tree of folder the local machine. | |||
* | |||
* This class provides the tree-iteration functionality. Derived classes | |||
* will implement their specific task functionality by the visitor pattern, | |||
* specifically by implementing the method | |||
* <code>visit(Folder rootStarteamFolder, java.io.File rootLocalFolder)</code> | |||
* | |||
* Created: Sat Dec 15 16:55:19 2001 | |||
* | |||
* @author <a href="mailto:stevec@ignitesports.com">Steve Cohen</a> | |||
* @version 1.0 | |||
* @see <A HREF="http://www.starbase.com/">StarBase Web Site</A> | |||
*/ | |||
public abstract class TreeBasedTask extends StarTeamTask { | |||
/////////////////////////////////////////////////////////////// | |||
// default values for attributes. | |||
/////////////////////////////////////////////////////////////// | |||
/** | |||
* This constant sets the filter to include all files. This default has | |||
* the same result as <CODE>setIncludes("*")</CODE>. | |||
* | |||
* @see #getIncludes() | |||
* @see #setIncludes(String includes) | |||
*/ | |||
public final static String DEFAULT_INCLUDESETTING = "*"; | |||
/** | |||
* This disables the exclude filter by default. In other words, no files | |||
* are excluded. This setting is equivalent to | |||
* <CODE>setExcludes(null)</CODE>. | |||
* | |||
* @see #getExcludes() | |||
* @see #setExcludes(String excludes) | |||
*/ | |||
public final static String DEFAULT_EXCLUDESETTING = null; | |||
//ATTRIBUTES settable from ant. | |||
/** | |||
* The root folder of the operation in StarTeam. | |||
*/ | |||
private String rootStarteamFolder = "/"; | |||
/** | |||
* The local folder corresponding to starteamFolder. If not specified | |||
* the Star Team defalt folder will be used. | |||
*/ | |||
private String rootLocalFolder = null; | |||
/** | |||
* All files that fit this pattern are checked out. | |||
*/ | |||
private String includes = DEFAULT_INCLUDESETTING; | |||
/** | |||
* All files fitting this pattern are ignored. | |||
*/ | |||
private String excludes = DEFAULT_EXCLUDESETTING; | |||
/////////////////////////////////////////////////////////////// | |||
// GET/SET methods. | |||
// Setters, of course are where ant user passes in values. | |||
/////////////////////////////////////////////////////////////// | |||
/** | |||
* Set the root folder in the Starteam repository for this operation | |||
*/ | |||
public void setRootStarteamFolder(String rootStarteamFolder) { | |||
this.rootStarteamFolder = rootStarteamFolder; | |||
} | |||
/** | |||
* returns the root folder in the Starteam repository | |||
* used for this operation | |||
*/ | |||
public String getRootStarteamFolder() { | |||
return this.rootStarteamFolder; | |||
} | |||
/** | |||
* Set the local folder corresponding to the | |||
* starteam folder for this operation. | |||
* If not specified, the StarTeam default will be used | |||
* the default is used. | |||
*/ | |||
public void setRootLocalFolder(String rootLocalFolder) { | |||
this.rootLocalFolder = rootLocalFolder; | |||
} | |||
/** | |||
* Returns the local folder specified by the user, | |||
* corresponding to the starteam folder for this operation. | |||
* or null if not specified | |||
*/ | |||
public String getRootLocalFolder() { | |||
return this.rootLocalFolder; | |||
} | |||
/** | |||
* sets the pattern of files to be included. See setExcludes() for a | |||
* description | |||
* @param includes A string of filter patterns to include. Separate the | |||
* patterns by spaces. | |||
* @see #getIncludes() | |||
* @see #setExcludes(String excludes) | |||
* @see #getExcludes() | |||
*/ | |||
public void setIncludes(String includes) { | |||
this.includes = includes; | |||
} | |||
/** | |||
* Gets the patterns from the include filter. Rather that duplicate the | |||
* details of AntStarTeanCheckOut's filtering here, refer to these | |||
* links: | |||
* | |||
* @return A string of filter patterns separated by spaces. | |||
* @see #setIncludes(String includes) | |||
* @see #setExcludes(String excludes) | |||
* @see #getExcludes() | |||
*/ | |||
public String getIncludes() { | |||
return includes; | |||
} | |||
/** | |||
* Sets the exclude filter. When filtering files, AntStarTeamCheckOut | |||
* uses an unmodified version of <CODE>DirectoryScanner</CODE>'s | |||
* <CODE>match</CODE> method, so here are the patterns straight from the | |||
* Ant source code: | |||
* <BR><BR> | |||
* Matches a string against a pattern. The pattern contains two special | |||
* characters: | |||
* <BR>'*' which means zero or more characters, | |||
* <BR>'?' which means one and only one character. | |||
* <BR><BR> | |||
* For example, if you want to check out all files except .XML and | |||
* .HTML files, you would put the following line in your program: | |||
* <CODE>setExcludes("*.XML,*.HTML");</CODE> | |||
* Finally, note that filters have no effect on the <B>directories</B> | |||
* that are scanned; you could not skip over all files in directories | |||
* whose names begin with "project," for instance. | |||
* <BR><BR> | |||
* Treatment of overlapping inlcudes and excludes: To give a simplistic | |||
* example suppose that you set your include filter to "*.htm *.html" | |||
* and your exclude filter to "index.*". What happens to index.html? | |||
* AntStarTeamCheckOut will not check out index.html, as it matches an | |||
* exclude filter ("index.*"), even though it matches the include | |||
* filter, as well. | |||
* <BR><BR> | |||
* Please also read the following sections before using filters: | |||
* | |||
* @param excludes A string of filter patterns to exclude. Separate the | |||
* patterns by spaces. | |||
* @see #setIncludes(String includes) | |||
* @see #getIncludes() | |||
* @see #getExcludes() | |||
*/ | |||
public void setExcludes(String excludes) { | |||
this.excludes = excludes; | |||
} | |||
/** | |||
* Gets the patterns from the exclude filter. Rather that duplicate the | |||
* details of AntStarTeanCheckOut's filtering here, refer to these | |||
* links: | |||
* | |||
* @return A string of filter patterns separated by spaces. | |||
* @see #setExcludes(String excludes) | |||
* @see #setIncludes(String includes) | |||
* @see #getIncludes() | |||
*/ | |||
public String getExcludes() { | |||
return excludes; | |||
} | |||
/////////////////////////////////////////////////////////////// | |||
// INCLUDE-EXCLUDE processing | |||
/////////////////////////////////////////////////////////////// | |||
/** | |||
* Look if the file should be processed by the task. | |||
* Don't process it if it fits no include filters or if | |||
* it fits an exclude filter. | |||
* @param pName the item name to look for being included. | |||
* @return whether the file should be checked out or not. | |||
*/ | |||
protected boolean shouldProcess(String pName){ | |||
boolean includeIt = matchPatterns(getIncludes(), pName); | |||
boolean excludeIt = matchPatterns(getExcludes(), pName); | |||
return (includeIt && !excludeIt); | |||
} | |||
/** | |||
* Convenience method to see if a string match a one pattern | |||
* in given set of space-separated patterns. | |||
* @param patterns the space-separated list of patterns. | |||
* @param pName the name to look for matching. | |||
* @return whether the name match at least one pattern. | |||
*/ | |||
protected boolean matchPatterns(String patterns, String pName){ | |||
if (patterns == null){ | |||
return false; | |||
} | |||
StringTokenizer exStr = new StringTokenizer(patterns, ","); | |||
while (exStr.hasMoreTokens()) | |||
{ | |||
if (DirectoryScanner.match(exStr.nextToken(), pName)) | |||
{ | |||
return true; | |||
} | |||
} | |||
return false; | |||
} | |||
/** | |||
* This method does the work of opening the supplied Starteam view and calling | |||
* the visit method to perform the task. | |||
* | |||
* @exception BuildException if any error occurs in the processing | |||
*/ | |||
public void execute() throws BuildException { | |||
// Get view as of the current time? | |||
View view = StarTeamFinder.openView(getUserName() + ":" + getPassword() | |||
+ "@" + getURL()); | |||
View snapshot = new View(view, ViewConfiguration.createFromTime( | |||
new OLEDate())); | |||
Folder starteamrootfolder = | |||
StarTeamFinder.findFolder(snapshot.getRootFolder(), this.rootStarteamFolder); | |||
if ( null == starteamrootfolder) { | |||
throw new BuildException("Unable to find root folderin repository."); | |||
} | |||
java.io.File localrootfolder; | |||
if (null == this.rootLocalFolder) { | |||
// use Star Team's default | |||
localrootfolder = new java.io.File(starteamrootfolder.getPath()); | |||
} else { | |||
// force StarTeam to use our folder | |||
localrootfolder = new java.io.File(getRootLocalFolder()); | |||
log("overriding local folder to " + localrootfolder); | |||
} | |||
// Inspect everything in the root folder and then recursively | |||
visit(starteamrootfolder, localrootfolder); | |||
} | |||
/** | |||
* Derived classes must override this class to define the actual processing | |||
* to performed on each folder in the tree defined for the task | |||
* | |||
* @param rootStarteamFolder the StarTeam folderto be visited | |||
* @param rootLocalFolder the local mapping of rootStarteamFolder | |||
*/ | |||
protected abstract void visit(Folder rootStarteamFolder, java.io.File rootLocalFolder) | |||
throws BuildException; | |||
} | |||