PR: 17408 Submitted by: spkane@genomatica.com (Sean P. Kane) git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274451 13f79535-47bb-0310-9956-ffa450edef68master
@@ -6,19 +6,45 @@ | |||||
</head> | </head> | ||||
<body> | <body> | ||||
<h1>Ant ClearCase Tasks</h1> | |||||
<p>by:<br> | |||||
Curtis White (cwhite at aracnet dot com),<br> | |||||
Sean P. Kane (spkane at genomatica dot com), and<br> | |||||
Rob Anderson (Anderson.Rob at vectorscm dot com)</p> | |||||
<p>Version 1.6 - 02/25/2003</p> | |||||
<h1>ClearCase Support</h1> | <h1>ClearCase Support</h1> | ||||
<h2>Table of Contents</h2> | |||||
<ul> | <ul> | ||||
<li><a href="#cccheckin">CCCheckin</a></li> | |||||
<li><a href="#cccheckout">CCCheckout</a></li> | |||||
<li><a href="#ccuncheckout">CCUnCheckout</a></li> | |||||
<li><a href="#ccupdate">CCUpdate</a></li> | |||||
<li><A href="#introduction">Introduction</a> | |||||
<li><A href="#cccheckin">CCCheckin</a> | |||||
<li><A href="#cccheckout">CCCheckout</a> | |||||
<li><A href="#ccuncheckout">CCUnCheckout</a> | |||||
<li><A href="#ccupdate">CCUpdate</a> | |||||
<li><A href="#ccmklbtype">CCMklbtype</a> | |||||
<li><A href="#ccmklabel">CCMklabel</a> | |||||
<li><A href="#ccrmtype">CCRmtype</a> | |||||
<li><A href="#cclock">CCLock</a> | |||||
<li><A href="#ccunlock">CCUnlock</a> | |||||
<li><A href="#ccmkbl">CCMkbl</a></li> | |||||
</ul> | </ul> | ||||
<hr> | |||||
<h2><a name="introduction">Introduction</a></h2> | |||||
<p>Ant provides several optional tasks for working with ClearCase. These tasks correspond to various | |||||
ClearCase commands using the Cleartool program. The current tasks avaliable for Ant correspond to only | |||||
a few of the significant ClearCase commands.</p> | |||||
<p>More tasks can be easily added by deriving from the ClearCase class and then adding | |||||
functionality that is specific to that ClearCase command.</p> | |||||
<hr> | <hr> | ||||
<h2><a name="cccheckin">CCCheckin</a></h2> | <h2><a name="cccheckin">CCCheckin</a></h2> | ||||
<h3>Description</h3> | <h3>Description</h3> | ||||
Task to perform a Checkin command to ClearCase. | |||||
Task to perform a "cleartool checkin" command to ClearCase. | |||||
<h3>Parameters</h3> | <h3>Parameters</h3> | ||||
<table border="1" cellpadding="2" cellspacing="0"> | <table border="1" cellpadding="2" cellspacing="0"> | ||||
<tr> | <tr> | ||||
@@ -28,7 +54,7 @@ Task to perform a Checkin command to ClearCase. | |||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
<td>viewpath</td> | <td>viewpath</td> | ||||
<td>Path to the ClearCase view file or directory that the command | |||||
<td>Path to the ClearCase view file or directory that the command | |||||
will operate on</td> | will operate on</td> | ||||
<td>No</td> | <td>No</td> | ||||
</tr> | </tr> | ||||
@@ -39,7 +65,7 @@ Task to perform a Checkin command to ClearCase. | |||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
<td>commentfile</td> | <td>commentfile</td> | ||||
<td>Specify a file containing a comment. Only one of comment or commentfile | |||||
<td>Specify a file containing a comment. Only one of comment or commentfile | |||||
may be used.</td> | may be used.</td> | ||||
<td>No</td> | <td>No</td> | ||||
</tr> | </tr> | ||||
@@ -60,7 +86,7 @@ Task to perform a Checkin command to ClearCase. | |||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
<td>identical</td> | <td>identical</td> | ||||
<td>Allows the file to be checked in even if it is identical | |||||
<td>Allows the file to be checked in even if it is identical | |||||
to the original</td> | to the original</td> | ||||
<td>No</td> | <td>No</td> | ||||
</tr> | </tr> | ||||
@@ -68,20 +94,20 @@ Task to perform a Checkin command to ClearCase. | |||||
<h3>Examples</h3> | <h3>Examples</h3> | ||||
<blockquote> | <blockquote> | ||||
<pre> | <pre> | ||||
<cccheckin viewpath="c:/views/viewdir/afile" | |||||
commentfile="acomment.txt" | |||||
nowarn="true" | |||||
identical="true"/> | |||||
<cccheckin viewpath="c:/views/viewdir/afile" | |||||
commentfile="acomment.txt" | |||||
nowarn="true" | |||||
identical="true"/> | |||||
</pre> | </pre> | ||||
</blockquote> | </blockquote> | ||||
<p>Does a ClearCase <i>checkin</i> on the file <i>c:/views/viewdir/afile</i>. | |||||
<p>Does a ClearCase <i>checkin</i> on the file <i>c:/views/viewdir/afile</i>. | |||||
Comment text from the file <i>acomment.txt</i> is added to ClearCase as a comment. | Comment text from the file <i>acomment.txt</i> is added to ClearCase as a comment. | ||||
All warning messages are suppressed. The file is checked in even if it is | All warning messages are suppressed. The file is checked in even if it is | ||||
<i>identical</i> to the original.</p> | <i>identical</i> to the original.</p> | ||||
<hr> | <hr> | ||||
<h2><a name="cccheckout">CCCheckout</a></h2> | <h2><a name="cccheckout">CCCheckout</a></h2> | ||||
<h3>Description</h3> | <h3>Description</h3> | ||||
Task to perform a Checkout command to ClearCase. | |||||
Task to perform a "cleartool checkout" command to ClearCase. | |||||
<h3>Parameters</h3> | <h3>Parameters</h3> | ||||
<table border="1" cellpadding="2" cellspacing="0"> | <table border="1" cellpadding="2" cellspacing="0"> | ||||
<tr> | <tr> | ||||
@@ -91,7 +117,7 @@ Task to perform a Checkout command to ClearCase. | |||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
<td>viewpath</td> | <td>viewpath</td> | ||||
<td>Path to the ClearCase view file or directory that the command | |||||
<td>Path to the ClearCase view file or directory that the command | |||||
will operate on</td> | will operate on</td> | ||||
<td>No</td> | <td>No</td> | ||||
</tr> | </tr> | ||||
@@ -107,7 +133,7 @@ Task to perform a Checkout command to ClearCase. | |||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
<td>nodata</td> | <td>nodata</td> | ||||
<td>Checks out the file but does not create an editable file | |||||
<td>Checks out the file but does not create an editable file | |||||
containing its data</td> | containing its data</td> | ||||
<td>No</td> | <td>No</td> | ||||
</tr> | </tr> | ||||
@@ -133,7 +159,7 @@ Task to perform a Checkout command to ClearCase. | |||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
<td>commentfile</td> | <td>commentfile</td> | ||||
<td>Specify a file containing a comment. Only one of comment or | |||||
<td>Specify a file containing a comment. Only one of comment or | |||||
commentfile may be used.</td> | commentfile may be used.</td> | ||||
<td>No</td> | <td>No</td> | ||||
</tr> | </tr> | ||||
@@ -141,16 +167,16 @@ Task to perform a Checkout command to ClearCase. | |||||
<h3>Examples</h3> | <h3>Examples</h3> | ||||
<blockquote> | <blockquote> | ||||
<pre> | <pre> | ||||
<cccheckout viewpath="c:/views/viewdir/afile" | |||||
reserved="true" | |||||
branch="abranch" | |||||
nowarn="true" | |||||
comment="Some comment text"/> | |||||
<cccheckout viewpath="c:/views/viewdir/afile" | |||||
reserved="true" | |||||
branch="abranch" | |||||
nowarn="true" | |||||
comment="Some comment text"/> | |||||
</pre> | </pre> | ||||
</blockquote> | </blockquote> | ||||
<p>Does a ClearCase <i>checkout</i> on the file <i>c:/views/viewdir/afile</i>. | |||||
It is checked out as <i>reserved</i> on branch called <i>abranch</i>. All | |||||
warning messages are suppressed. A <i>Some comment text</i> is added to | |||||
<p>Does a ClearCase <i>checkout</i> on the file <i>c:/views/viewdir/afile</i>. | |||||
It is checked out as <i>reserved</i> on branch called <i>abranch</i>. All | |||||
warning messages are suppressed. A <i>Some comment text</i> is added to | |||||
ClearCase as a comment.</p> | ClearCase as a comment.</p> | ||||
<hr> | <hr> | ||||
<h2><a name="ccuncheckout">CCUnCheckout</a></h2> | <h2><a name="ccuncheckout">CCUnCheckout</a></h2> | ||||
@@ -165,13 +191,13 @@ Task to perform a UnCheckout command to ClearCase. | |||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
<td>viewpath</td> | <td>viewpath</td> | ||||
<td>Path to the ClearCase view file or directory that the command | |||||
<td>Path to the ClearCase view file or directory that the command | |||||
will operate on</td> | will operate on</td> | ||||
<td>No</td> | <td>No</td> | ||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
<td>keepcopy</td> | <td>keepcopy</td> | ||||
<td>Specifies whether to keep a copy of the file with a .keep | |||||
<td>Specifies whether to keep a copy of the file with a .keep | |||||
extension or not</td> | extension or not</td> | ||||
<td>No</td> | <td>No</td> | ||||
</tr> | </tr> | ||||
@@ -179,16 +205,16 @@ Task to perform a UnCheckout command to ClearCase. | |||||
<h3>Examples</h3> | <h3>Examples</h3> | ||||
<blockquote> | <blockquote> | ||||
<pre> | <pre> | ||||
<ccuncheckout viewpath="c:/views/viewdir/afile" | |||||
keepcopy="true"/> | |||||
<ccuncheckout viewpath="c:/views/viewdir/afile" | |||||
keepcopy="true"/> | |||||
</pre> | </pre> | ||||
</blockquote> | </blockquote> | ||||
<p>Does a ClearCase <i>uncheckout</i> on the file <i>c:/views/viewdir/afile</i>. | |||||
<p>Does a ClearCase <i>uncheckout</i> on the file <i>c:/views/viewdir/afile</i>. | |||||
A copy of the file called <i>c:/views/viewdir/afile.keep</i> is kept.</p> | A copy of the file called <i>c:/views/viewdir/afile.keep</i> is kept.</p> | ||||
<hr> | <hr> | ||||
<h2><a name="ccupdate">CCUpdate</a></h2> | <h2><a name="ccupdate">CCUpdate</a></h2> | ||||
<h3>Description</h3> | <h3>Description</h3> | ||||
Task to perform an Update command to ClearCase. | |||||
Task to perform an "cleartool update" command to ClearCase. | |||||
<h3>Parameters</h3> | <h3>Parameters</h3> | ||||
<table border="1" cellpadding="2" cellspacing="0"> | <table border="1" cellpadding="2" cellspacing="0"> | ||||
<tr> | <tr> | ||||
@@ -198,7 +224,7 @@ Task to perform an Update command to ClearCase. | |||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
<td>viewpath</td> | <td>viewpath</td> | ||||
<td>Path to the ClearCase view file or directory that the command | |||||
<td>Path to the ClearCase snapshot view file or directory that the command | |||||
will operate on</td> | will operate on</td> | ||||
<td>No</td> | <td>No</td> | ||||
</tr> | </tr> | ||||
@@ -224,15 +250,15 @@ Task to perform an Update command to ClearCase. | |||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
<td>currenttime</td> | <td>currenttime</td> | ||||
<td>Specifies that modification time should be written as the | |||||
current time. Either currenttime or preservetime can be | |||||
<td>Specifies that modification time should be written as the | |||||
current time. Either currenttime or preservetime can be | |||||
specified.</td> | specified.</td> | ||||
<td>No</td> | <td>No</td> | ||||
</tr> | </tr> | ||||
<tr> | <tr> | ||||
<td>preservetime</td> | <td>preservetime</td> | ||||
<td>Specifies that modification time should preserved from the | |||||
VOB time. Either currenttime or preservetime can be | |||||
<td>Specifies that modification time should preserved from the | |||||
VOB time. Either currenttime or preservetime can be | |||||
specified.</td> | specified.</td> | ||||
<td>No</td> | <td>No</td> | ||||
</tr> | </tr> | ||||
@@ -240,22 +266,399 @@ Task to perform an Update command to ClearCase. | |||||
<h3>Examples</h3> | <h3>Examples</h3> | ||||
<blockquote> | <blockquote> | ||||
<pre> | <pre> | ||||
<ccupdate viewpath="c:/views/viewdir" | |||||
graphical="false" | |||||
log="log.log" | |||||
overwrite="true" | |||||
currenttime="true" | |||||
rename="false"/> | |||||
<ccupdate viewpath="c:/views/viewdir" | |||||
graphical="false" | |||||
log="log.log" | |||||
overwrite="true" | |||||
currenttime="true" | |||||
rename="false"/> | |||||
</pre> | </pre> | ||||
</blockquote> | </blockquote> | ||||
<p>Does a ClearCase <i>update</i> on the directory <i>c:/views/viewdir</i>. | |||||
A graphical dialog will be displayed. The output will be logged to | |||||
<i>log.log</i> and it will overwrite any hijacked files. The modified | |||||
<p>Does a ClearCase <i>update</i> on the snapshot view directory <i>c:/views/viewdir</i>. | |||||
A graphical dialog will be displayed. The output will be logged to | |||||
<i>log.log</i> and it will overwrite any hijacked files. The modified | |||||
time will be set to the current time.</p> | time will be set to the current time.</p> | ||||
<hr> | <hr> | ||||
<p align="center">Copyright © 2000-2002 Apache Software Foundation. All rights | |||||
Reserved.</p> | |||||
</body> | |||||
<h2><a name="ccmklbtype">CCMklbtype</a></h2> | |||||
<h3>Description</h3> | |||||
Task to perform a "mklbtype" command to ClearCase. | |||||
<h3>Parameters</h3> | |||||
<table border="1" cellpadding="2" cellspacing="0"> | |||||
<tr> | |||||
<th>Attribute</th> | |||||
<th>Values</th> | |||||
<th>Required</th> | |||||
</tr> | |||||
<tr> | |||||
<td>typename</td> | |||||
<td>Name of the label type to create</td> | |||||
<td>Yes</td> | |||||
<tr> | |||||
<tr> | |||||
<td>vob</td> | |||||
<td>Name of the VOB</td> | |||||
<td>No</td> | |||||
<tr> | |||||
<tr> | |||||
<td>replace</td> | |||||
<td>Replace an existing label definition of the same type</td> | |||||
<td>No</td> | |||||
<tr> | |||||
<tr> | |||||
<td>global</td> | |||||
<td>Either global or ordinary can be specified, not both. Creates a label type that is global to the VOB or to VOBs that use this VOB</td> | |||||
<td>No</td> | |||||
<tr> | |||||
<tr> | |||||
<td>ordinary</td> | |||||
<td>Either global or ordinary can be specified, not both. Creates a label type that can be used only in the current VOB. <B>Default</B></td> | |||||
<td>No</td> | |||||
<tr> | |||||
<tr> | |||||
<td>pbranch</td> | |||||
<td>Allows the label type to be used once per branch in a given element's version tree</td> | |||||
<td>No</td> | |||||
<tr> | |||||
<tr> | |||||
<td>shared</td> | |||||
<td>Sets the way mastership is checked by ClearCase. See ClearCase documentation for details</td> | |||||
<td>No</td> | |||||
<tr> | |||||
<tr> | |||||
<td>comment</td> | |||||
<td>Specify a comment. Only one of comment or cfile may be used.</td> | |||||
<td>No</td> | |||||
<tr> | |||||
<tr> | |||||
<td>commentfile</td> | |||||
<td>Specify a file containing a comment. Only one of comment or cfile may be used.</td> | |||||
<td>No</td> | |||||
<tr></tr> | |||||
</table> | |||||
<h3>Examples</h3> | |||||
<blockquote> | |||||
<pre> | |||||
<ccmklbtype typename="VERSION_1" | |||||
ordinary="true" | |||||
comment="Development version 1"/> | |||||
</pre> | |||||
</blockquote> | |||||
<p>Does a ClearCase <i>mklbtype</i> to create a label type named <i>VERSION_1</i>. | |||||
It is created as <i>ordinary</i> so it is available only to the current VOB. | |||||
The text <i>Development version 1</i> is added as a comment.</p> | |||||
<hr> | |||||
<h2><a name="ccmklabel">CCMklabel</a></h2> | |||||
<h3>Description</h3> | |||||
Task to perform a "mklabel" command to ClearCase. | |||||
<h3>Parameters</h3> | |||||
<table border="1" cellpadding="2" cellspacing="0"> | |||||
<tr> | |||||
<th>Attribute</th> | |||||
<th>Values</th> | |||||
<th>Required</th> | |||||
</tr> | |||||
<tr> | |||||
<td>typename</td> | |||||
<td>Name of the label type</td> | |||||
<td>Yes</td> | |||||
<tr> | |||||
<tr> | |||||
<td>viewpath</td> | |||||
<td>Path to the ClearCase view file or directory that the command will operate on</td> | |||||
<td>No</td> | |||||
<tr> | |||||
<tr> | |||||
<td>replace</td> | |||||
<td>Replace a label of the same type on the same branch</td> | |||||
<td>No</td> | |||||
<tr> | |||||
<tr> | |||||
<td>recurse</td> | |||||
<td>Process each subdirectory under viewpath</td> | |||||
<td>No</td> | |||||
<tr> | |||||
<tr> | |||||
<td>version</td> | |||||
<td>Identify a specific version to attach the label to</td> | |||||
<td>No</td> | |||||
<tr> | |||||
<tr> | |||||
<td>vob</td> | |||||
<td>Name of the VOB</td> | |||||
<td>No</td> | |||||
<tr> | |||||
<tr> | |||||
<td>comment</td> | |||||
<td>Specify a comment. Only one of comment or cfile may be used.</td> | |||||
<td>No</td> | |||||
<tr> | |||||
<tr> | |||||
<td>commentfile</td> | |||||
<td>Specify a file containing a comment. Only one of comment or cfile may be used.</td> | |||||
<td>No</td> | |||||
<tr></tr> | |||||
</table> | |||||
<h3>Examples</h3> | |||||
<blockquote> | |||||
<pre> | |||||
<ccmklabel viewpath="c:/views/viewdir/afile" | |||||
comment="Some comment text" | |||||
recurse="true" | |||||
version="\main\2" | |||||
typename="VERSION_1"/> | |||||
</pre> | |||||
</blockquote> | |||||
<p>Does a ClearCase <i>mklabel</i> on the file <i>c:/views/viewdir/afile</i> under | |||||
the main branch for version 2 (<i>\main\2</i>). Text <i>Some comment text</i> is added | |||||
as a comment. It will <i>recurse</i> all subdirectories. | |||||
<hr> | |||||
<h2><a name="ccrmtype">CCRmtype</a></h2> | |||||
<h3>Description</h3> | |||||
Task to perform a "rmtype" command to ClearCase. | |||||
<h3>Parameters</h3> | |||||
<table border="1" cellpadding="2" cellspacing="0"> | |||||
<tr> | |||||
<th>Attribute</th> | |||||
<th>Values</th> | |||||
<th>Required</th> | |||||
</tr> | |||||
<tr> | |||||
<td>typekind</td> | |||||
<td>The kind of type to create. Valid types are: | |||||
<table border="0" width="40%"> | |||||
<tr> | |||||
<td width="15%"> </td> | |||||
<td><b>attype</b><br> | |||||
<b>brtype</b><br> | |||||
<b>eltype</b><br> | |||||
<b>hltype</b><br> | |||||
<b>lbtype</b><br> | |||||
<b>trtype</b> | |||||
</td> | |||||
<td>- <br> | |||||
- <br> | |||||
- <br> | |||||
- <br> | |||||
- <br> | |||||
- | |||||
</td> | |||||
<td>attribute type<br> | |||||
branch type<br> | |||||
element type<br> | |||||
hyperlink type<br> | |||||
label type<br> | |||||
trigger type | |||||
</td> | |||||
</tr> | |||||
</table> | |||||
</td> | |||||
<td>Yes</td> | |||||
<tr> | |||||
<tr> | |||||
<td>typename</td> | |||||
<td>The name of the type to remove</td> | |||||
<td>Yes</td> | |||||
<tr> | |||||
<tr> | |||||
<td>ignore</td> | |||||
<td>Used with trigger types only. Forces removal of trigger type even if a pre-operation trigger would prevent its removal</td> | |||||
<td>No</td> | |||||
<tr> | |||||
<tr> | |||||
<td>rmall</td> | |||||
<td>Removes all instances of a type and the type object itself</td> | |||||
<td>No</td> | |||||
<tr> | |||||
<tr> | |||||
<td>comment</td> | |||||
<td>Specify a comment. Only one of comment or cfile may be used.</td> | |||||
<td>No</td> | |||||
<tr> | |||||
<tr> | |||||
<td>commentfile</td> | |||||
<td>Specify a file containing a comment. Only one of comment or cfile may be used.</td> | |||||
<td>No</td> | |||||
<tr></tr> | |||||
</table> | |||||
<h3>Examples</h3> | |||||
<blockquote> | |||||
<pre> | |||||
<ccrmtype typekind="lbtype" | |||||
typename="VERSION_1" | |||||
commentfile="acomment.txt" | |||||
rmall="true"/> | |||||
</pre> | |||||
</blockquote> | |||||
<p>Does a ClearCase <i>rmtype</i> to remove a label type (<i>lbtype</i>) named <i>VERSION_1</i>. | |||||
Comment text from the file <i>acomment.txt</i> is added as a comment. All instances of the type | |||||
are removed, including the type object itself.</p> | |||||
<hr> | |||||
<h2><a name="cclock">CCLock</a></h2> | |||||
<h3>Description</h3> | |||||
Task to perform a "cleartool lock" command to ClearCase. | |||||
<h3>Parameters</h3> | |||||
<table border="1" cellpadding="2" cellspacing="0"> | |||||
<tr> | |||||
<th>Attribute</th> | |||||
<th>Values</th> | |||||
<th>Required</th> | |||||
</tr> | |||||
<tr> | |||||
<td>replace</td> | |||||
<td>Specifies replacing an existing lock</td> | |||||
<td>No</td> | |||||
<tr> | |||||
<tr> | |||||
<td>nusers</td> | |||||
<td>Specifies user(s) who can still modify the object</td> | |||||
<td>No</td> | |||||
<tr> | |||||
<tr> | |||||
<td>obsolete</td> | |||||
<td>Specifies that the object should be marked obsolete</td> | |||||
<td>No</td> | |||||
<tr> | |||||
<tr> | |||||
<td>comment</td> | |||||
<td>Specifies how to populate comments fields</td> | |||||
<td>No</td> | |||||
<tr> | |||||
<tr> | |||||
<td>pname</td> | |||||
<td>Specifies the object pathname to be locked.</td> | |||||
<td>Yes</td> | |||||
<tr> | |||||
<td>objselect</td> | |||||
<td>Specifies the object(s) to be locked.</td> | |||||
<td>Yes</td> | |||||
<tr> | |||||
</table> | |||||
<h3>Examples</h3> | |||||
<blockquote> | |||||
<pre> | |||||
<cclock | |||||
objselect="stream:Application_Integration@\MyProject_PVOB" | |||||
/> | |||||
</pre> | |||||
</blockquote> | |||||
<p>Does a ClearCase <i>lock</i> on the object <i>stream:Application_Integration@\MyProject_PVOB</i>.</p> | |||||
<hr> | |||||
<h2><a name="ccunlock">CCUnlock</a></h2> | |||||
<h3>Description</h3> | |||||
Task to perform a "cleartool unlock" command to ClearCase. | |||||
<h3>Parameters</h3> | |||||
<table border="1" cellpadding="2" cellspacing="0"> | |||||
<tr> | |||||
<th>Attribute</th> | |||||
<th>Values</th> | |||||
<th>Required</th> | |||||
</tr> | |||||
<tr> | |||||
<td>comment</td> | |||||
<td>Specifies how to populate comments fields</td> | |||||
<td>No</td> | |||||
<tr> | |||||
<tr> | |||||
<td>pname</td> | |||||
<td>Specifies the object pathname to be unlocked.</td> | |||||
<td>Yes</td> | |||||
<tr> | |||||
<td>objselect</td> | |||||
<td>Specifies the object(s) to be unlocked.</td> | |||||
<td>Yes</td> | |||||
<tr> | |||||
</table> | |||||
<h3>Examples</h3> | |||||
<blockquote> | |||||
<pre> | |||||
<ccunlock | |||||
objselect="stream:Application_Integration@\MyProject_PVOB" | |||||
/> | |||||
</pre> | |||||
</blockquote> | |||||
<p>Does a ClearCase <i>unlock</i> on the object <i>stream:Application_Integration@\MyProject_PVOB</i>.</p> | |||||
<hr> | |||||
<h2><a name="ccmkbl">CCMkbl</a></h2> | |||||
<h3>Description</h3> | |||||
Task to perform a "cleartool mkbl" command to ClearCase. | |||||
<h3>Parameters</h3> | |||||
<table border="1" cellpadding="2" cellspacing="0"> | |||||
<tr> | |||||
<th>Attribute</th> | |||||
<th>Values</th> | |||||
<th>Required</th> | |||||
</tr> | |||||
<tr> | |||||
<td>comment</td> | |||||
<td>Specify a comment. Only one of comment or cfile may be | |||||
used.</td> | |||||
<td>No</td> | |||||
</tr> | |||||
<tr> | |||||
<td>commentfile</td> | |||||
<td>Specify a file containing a comment. Only one of comment or | |||||
cfile may be used.</td> | |||||
<td>No</td> | |||||
</tr> | |||||
<tr> | |||||
<td>baselinerootname</td> | |||||
<td>Specify the name to be associated with the baseline.</td> | |||||
<td>Yes</td> | |||||
</tr> | |||||
<tr> | |||||
<td>nowarn</td> | |||||
<td>Suppress warning messages</td> | |||||
<td>No</td> | |||||
<tr> | |||||
<tr> | |||||
<td>identical</td> | |||||
<td>Allows the baseline to be created even if it is identical to the | |||||
previous baseline.</td> | |||||
<td>No</td> | |||||
</tr> | |||||
<tr> | |||||
<td>full</td> | |||||
<td>Creates a full baseline.</td> | |||||
<td>No</td> | |||||
</tr> | |||||
<tr> | |||||
<td>nlabel</td> | |||||
<td>Allows the baseline to be created without a label.</td> | |||||
<td>No</td> | |||||
</tr> | |||||
</table> | |||||
<h3>Examples</h3> | |||||
<blockquote> | |||||
<pre> | |||||
<ccmkbl | |||||
baselinerootname="Application_Baseline_AUTO" | |||||
identical="yes" | |||||
full="no" | |||||
viewpath="v:\ApplicationCC" | |||||
/> | |||||
</pre> | |||||
</blockquote> | |||||
<p>Does a ClearCase <i>mkbl</i> on the Integration view at <i>v:\ApplicationCC</i> | |||||
even if it is <i>identical</i> to a previous baseline. The new baseline with be | |||||
incremental and named "Application_Baseline_AUTO".</p> | |||||
<hr> | |||||
<p align="center">Copyright © 2000-2003 Apache Software Foundation. All rights | |||||
reserved.</p> | |||||
</body> | |||||
</html> | </html> |
@@ -1085,8 +1085,8 @@ documentation.</p> | |||||
<tr valign="top"> | <tr valign="top"> | ||||
<td nowrap><a href="OptionalTasks/clearcase.html">ClearCase</a></td> | <td nowrap><a href="OptionalTasks/clearcase.html">ClearCase</a></td> | ||||
<td><p>Tasks to perform the ClearCase <i>cccheckin</i>, <i>cccheckout</i>, | |||||
<i>ccuncheckout</i>, and <i>ccupdate</i> commands.</p></td> | |||||
<td><p>Tasks to perform the ClearCase cleartool <i>checkin</i>, <i>checkout</i>, | |||||
<i>uncheckout</i>, <i>update</i>, <i>lock</i>, <i>unlock</i>, <i>mklbtype</i>, <i>rmtype</i>, <i>mklabel</i>, and <i>mkbl</i> commands.</p></td> | |||||
</tr> | </tr> | ||||
<tr valign="top"> | <tr valign="top"> | ||||
@@ -142,6 +142,12 @@ ccupdate=org.apache.tools.ant.taskdefs.optional.clearcase.CCUpdate | |||||
cccheckout=org.apache.tools.ant.taskdefs.optional.clearcase.CCCheckout | cccheckout=org.apache.tools.ant.taskdefs.optional.clearcase.CCCheckout | ||||
cccheckin=org.apache.tools.ant.taskdefs.optional.clearcase.CCCheckin | cccheckin=org.apache.tools.ant.taskdefs.optional.clearcase.CCCheckin | ||||
ccuncheckout=org.apache.tools.ant.taskdefs.optional.clearcase.CCUnCheckout | ccuncheckout=org.apache.tools.ant.taskdefs.optional.clearcase.CCUnCheckout | ||||
ccmklbtype=org.apache.tools.ant.taskdefs.optional.clearcase.CCMklbtype | |||||
ccmklabel=org.apache.tools.ant.taskdefs.optional.clearcase.CCMklabel | |||||
ccrmtype=org.apache.tools.ant.taskdefs.optional.clearcase.CCRmtype | |||||
cclock=org.apache.tools.ant.taskdefs.optional.clearcase.CCLock | |||||
ccunlock=org.apache.tools.ant.taskdefs.optional.clearcase.CCUnlock | |||||
ccmkbl=org.apache.tools.ant.taskdefs.optional.clearcase.CCMkbl | |||||
sound=org.apache.tools.ant.taskdefs.optional.sound.SoundTask | sound=org.apache.tools.ant.taskdefs.optional.sound.SoundTask | ||||
junitreport=org.apache.tools.ant.taskdefs.optional.junit.XMLResultAggregator | junitreport=org.apache.tools.ant.taskdefs.optional.junit.XMLResultAggregator | ||||
vsslabel=org.apache.tools.ant.taskdefs.optional.vss.MSVSSLABEL | vsslabel=org.apache.tools.ant.taskdefs.optional.vss.MSVSSLABEL | ||||
@@ -0,0 +1,389 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 2003 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 "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.clearcase; | |||||
import org.apache.tools.ant.BuildException; | |||||
import org.apache.tools.ant.Project; | |||||
import org.apache.tools.ant.types.Commandline; | |||||
/** | |||||
* TODO: | |||||
* comment field doesn't include all options yet | |||||
*/ | |||||
/** | |||||
* Performs a ClearCase Lock command. | |||||
* | |||||
* <p> | |||||
* The following attributes are interpretted: | |||||
* <table border="1"> | |||||
* <tr> | |||||
* <th>Attribute</th> | |||||
* <th>Values</th> | |||||
* <th>Required</th> | |||||
* </tr> | |||||
* <tr> | |||||
* <td>replace</td> | |||||
* <td>Specifies replacing an existing lock</td> | |||||
* <td>No</td> | |||||
* <tr> | |||||
* <tr> | |||||
* <td>nusers</td> | |||||
* <td>Specifies user(s) who can still modify the object</td> | |||||
* <td>No</td> | |||||
* <tr> | |||||
* <tr> | |||||
* <td>obsolete</td> | |||||
* <td>Specifies that the object should be marked obsolete</td> | |||||
* <td>No</td> | |||||
* <tr> | |||||
* <tr> | |||||
* <td>comment</td> | |||||
* <td>Specifies how to populate comments fields</td> | |||||
* <td>No</td> | |||||
* <tr> | |||||
* <tr> | |||||
* <td>pname</td> | |||||
* <td>Specifies the object pathname to be locked.</td> | |||||
* <td>Yes</td> | |||||
* <tr> | |||||
* <td>objselect</td> | |||||
* <td>Specifies the object(s) to be locked.</td> | |||||
* <td>Yes</td> | |||||
* <tr> | |||||
* | |||||
* </table> | |||||
* | |||||
* @author Sean P. Kane (Based on work by: Curtis White) | |||||
*/ | |||||
public class CCLock extends ClearCase { | |||||
private boolean m_Replace = false; | |||||
private boolean m_Obsolete = false; | |||||
private String m_Comment = null; | |||||
private String m_Nusers = null; | |||||
private String m_Pname = null; | |||||
private String m_Objselect = null; | |||||
/** | |||||
* Executes the task. | |||||
* <p> | |||||
* Builds a command line to execute cleartool and then calls Exec's run method | |||||
* to execute the command line. | |||||
*/ | |||||
public void execute() throws BuildException { | |||||
Commandline commandLine = new Commandline(); | |||||
Project aProj = getProject(); | |||||
int result = 0; | |||||
// Default the viewpath to basedir if it is not specified | |||||
if (getViewPath() == null) { | |||||
setViewPath(aProj.getBaseDir().getPath()); | |||||
} | |||||
// build the command line from what we got the format is | |||||
// cleartool lock [options...] | |||||
// as specified in the CLEARTOOL.EXE help | |||||
commandLine.setExecutable(getClearToolCommand()); | |||||
commandLine.createArgument().setValue(COMMAND_LOCK); | |||||
// Check the command line options | |||||
checkOptions(commandLine); | |||||
// For debugging | |||||
System.out.println(commandLine.toString()); | |||||
result = run(commandLine); | |||||
if (result != 0) { | |||||
String msg = "Failed executing: " + commandLine.toString(); | |||||
throw new BuildException(msg, location); | |||||
} | |||||
} | |||||
/** | |||||
* Check the command line options. | |||||
*/ | |||||
private void checkOptions(Commandline cmd) { | |||||
// ClearCase items | |||||
if (getReplace()) { | |||||
// -replace | |||||
cmd.createArgument().setValue(FLAG_REPLACE); | |||||
} | |||||
if (getObsolete()) { | |||||
// -obsolete | |||||
cmd.createArgument().setValue(FLAG_OBSOLETE); | |||||
} else { | |||||
getNusersCommand(cmd); | |||||
} | |||||
getCommentCommand(cmd); | |||||
getPnameCommand(cmd); | |||||
// object selector | |||||
cmd.createArgument().setValue(getObjselect()); | |||||
} | |||||
/** | |||||
* If true, replace an existing lock. | |||||
* | |||||
* @param replace the status to set the flag to | |||||
*/ | |||||
public void setReplace(boolean replace) { | |||||
m_Replace = replace; | |||||
} | |||||
/** | |||||
* Get replace flag status | |||||
* | |||||
* @return boolean containing status of replace flag | |||||
*/ | |||||
public boolean getReplace() { | |||||
return m_Replace; | |||||
} | |||||
/** | |||||
* If true, mark object as obsolete. | |||||
* | |||||
* @param obsolete the status to set the flag to | |||||
*/ | |||||
public void setObsolete(boolean obsolete) { | |||||
m_Obsolete = obsolete; | |||||
} | |||||
/** | |||||
* Get obsolete flag status | |||||
* | |||||
* @return boolean containing status of obsolete flag | |||||
*/ | |||||
public boolean getObsolete() { | |||||
return m_Obsolete; | |||||
} | |||||
/** | |||||
* Sets the users who may continue to | |||||
* edit the object while it is locked. | |||||
* | |||||
* @param nusers users excluded from lock | |||||
*/ | |||||
public void setNusers(String nusers) { | |||||
m_Nusers = nusers; | |||||
} | |||||
/** | |||||
* Get nusers list | |||||
* | |||||
* @return String containing the list of users excluded from lock | |||||
*/ | |||||
public String getNusers() { | |||||
return m_Nusers; | |||||
} | |||||
/** | |||||
* Sets how comments should be written | |||||
* for the event record(s) | |||||
* | |||||
* @param comment comment method to use | |||||
*/ | |||||
public void setComment(String comment) { | |||||
m_Comment = comment; | |||||
} | |||||
/** | |||||
* Get comment method | |||||
* | |||||
* @return String containing the desired comment method | |||||
*/ | |||||
public String getComment() { | |||||
return m_Comment; | |||||
} | |||||
/** | |||||
* Sets the pathname to be locked | |||||
* | |||||
* @param pname pathname to be locked | |||||
*/ | |||||
public void setPname(String pname) { | |||||
m_Pname = pname; | |||||
} | |||||
/** | |||||
* Get the pathname to be locked | |||||
* | |||||
* @return String containing the pathname to be locked | |||||
*/ | |||||
public String getPname() { | |||||
return m_Pname; | |||||
} | |||||
/** | |||||
* Sets the object(s) to be locked | |||||
* | |||||
* @param objselect objects to be locked | |||||
*/ | |||||
public void setObjselect(String objselect) { | |||||
m_Objselect = objselect; | |||||
} | |||||
/** | |||||
* Get list of objects to be locked | |||||
* | |||||
* @return String containing the objects to be locked | |||||
*/ | |||||
public String getObjselect() { | |||||
return m_Objselect; | |||||
} | |||||
/** | |||||
* Get the 'nusers' command | |||||
* | |||||
* @param cmd containing the command line string with or without the nusers flag and value appended | |||||
*/ | |||||
private void getNusersCommand(Commandline cmd) { | |||||
if (getNusers() == null) { | |||||
return; | |||||
} else { | |||||
/* Had to make two separate commands here because if a space is | |||||
inserted between the flag and the value, it is treated as a | |||||
Windows filename with a space and it is enclosed in double | |||||
quotes ("). This breaks clearcase. | |||||
*/ | |||||
cmd.createArgument().setValue(FLAG_NUSERS); | |||||
cmd.createArgument().setValue(getNusers()); | |||||
} | |||||
} | |||||
/** | |||||
* Get the 'comment' command | |||||
* | |||||
* @param cmd containing the command line string with or without the comment flag and value appended | |||||
*/ | |||||
private void getCommentCommand(Commandline cmd) { | |||||
if (getComment() == null) { | |||||
return; | |||||
} else { | |||||
/* Had to make two separate commands here because if a space is | |||||
inserted between the flag and the value, it is treated as a | |||||
Windows filename with a space and it is enclosed in double | |||||
quotes ("). This breaks clearcase. | |||||
*/ | |||||
cmd.createArgument().setValue(FLAG_COMMENT); | |||||
cmd.createArgument().setValue(getComment()); | |||||
} | |||||
} | |||||
/** | |||||
* Get the 'pname' command | |||||
* | |||||
* @param cmd containing the command line string with or without the pname flag and value appended | |||||
*/ | |||||
private void getPnameCommand(Commandline cmd) { | |||||
if (getPname() == null) { | |||||
return; | |||||
} else { | |||||
/* Had to make two separate commands here because if a space is | |||||
inserted between the flag and the value, it is treated as a | |||||
Windows filename with a space and it is enclosed in double | |||||
quotes ("). This breaks clearcase. | |||||
*/ | |||||
cmd.createArgument().setValue(FLAG_PNAME); | |||||
cmd.createArgument().setValue(getPname()); | |||||
} | |||||
} | |||||
/** | |||||
* Get the 'pname' command | |||||
* | |||||
* @param cmd containing the command line string with or without the pname flag and value appended | |||||
*/ | |||||
private void getObjselectCommand(Commandline cmd) { | |||||
if (getObjselect() == null) { | |||||
return; | |||||
} else { | |||||
/* Had to make two separate commands here because if a space is | |||||
inserted between the flag and the value, it is treated as a | |||||
Windows filename with a space and it is enclosed in double | |||||
quotes ("). This breaks clearcase. | |||||
*/ | |||||
cmd.createArgument().setValue(FLAG_OBJSELECT); | |||||
cmd.createArgument().setValue(getPname()); | |||||
} | |||||
} | |||||
/** | |||||
* -replace flag -- replace existing lock on object(s) | |||||
*/ | |||||
public static final String FLAG_REPLACE = "-replace"; | |||||
/** | |||||
* -nusers flag -- list of users to exclude from lock | |||||
*/ | |||||
public static final String FLAG_NUSERS = "-nusers"; | |||||
/** | |||||
* -obsolete flag -- mark locked object as obsolete | |||||
*/ | |||||
public static final String FLAG_OBSOLETE = "-obsolete"; | |||||
/** | |||||
* -comment flag -- method to use for commenting events | |||||
*/ | |||||
public static final String FLAG_COMMENT = "-comment"; | |||||
/** | |||||
* -pname flag -- pathname to lock | |||||
*/ | |||||
public static final String FLAG_PNAME = "-pname"; | |||||
/** | |||||
* object-selector option -- list of objects to lock | |||||
*/ | |||||
public static final String FLAG_OBJSELECT = ""; | |||||
} | |||||
@@ -0,0 +1,396 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 2003 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 "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.clearcase; | |||||
import org.apache.tools.ant.BuildException; | |||||
import org.apache.tools.ant.Project; | |||||
import org.apache.tools.ant.types.Commandline; | |||||
import org.apache.tools.ant.taskdefs.optional.clearcase.*; | |||||
/** | |||||
* Task to CreateBaseline command to ClearCase. | |||||
* <p> | |||||
* The following attributes are interpreted: | |||||
* <table border="1"> | |||||
* <tr> | |||||
* <th>Attribute</th> | |||||
* <th>Values</th> | |||||
* <th>Required</th> | |||||
* </tr> | |||||
* <tr> | |||||
* <td>comment</td> | |||||
* <td>Specify a comment. Only one of comment or cfile may be | |||||
used.</td> | |||||
* <td>No</td> | |||||
* </tr> | |||||
* <tr> | |||||
* <td>commentfile</td> | |||||
* <td>Specify a file containing a comment. Only one of comment or | |||||
cfile may be used.</td> | |||||
* <td>No</td> | |||||
* </tr> | |||||
* <tr> | |||||
* <td>baselinerootname</td> | |||||
* <td>Specify the name to be associated with the baseline.</td> | |||||
* <td>Yes</td> | |||||
* </tr> | |||||
* <tr> | |||||
* <td>nowarn</td> | |||||
* <td>Suppress warning messages</td> | |||||
* <td>No</td> | |||||
* <tr> | |||||
* <tr> | |||||
* <td>identical</td> | |||||
* <td>Allows the baseline to be created even if it is identical to the | |||||
previous baseline.</td> | |||||
* <td>No</td> | |||||
* </tr> | |||||
* <tr> | |||||
* <td>full</td> | |||||
* <td>Creates a full baseline.</td> | |||||
* <td>No</td> | |||||
* </tr> | |||||
* <tr> | |||||
* <td>nlabel</td> | |||||
* <td>Allows the baseline to be created without a label.</td> | |||||
* <td>No</td> | |||||
* </tr> | |||||
* </table> | |||||
* | |||||
* @author Robert Anderson | |||||
*/ | |||||
public class CCMkbl extends ClearCase { | |||||
private String m_Comment = null; | |||||
private String m_Cfile = null; | |||||
private String m_BaselineRootName = null; | |||||
private boolean m_Nwarn = false; | |||||
private boolean m_Identical = true; | |||||
private boolean m_Full = false; | |||||
private boolean m_Nlabel = false; | |||||
/** | |||||
* Executes the task. | |||||
* <p> | |||||
* Builds a command line to execute cleartool and then calls Exec's run method | |||||
* to execute the command line. | |||||
*/ | |||||
public void execute() throws BuildException { | |||||
Commandline commandLine = new Commandline(); | |||||
Project aProj = getProject(); | |||||
int result = 0; | |||||
// Default the viewpath to basedir if it is not specified | |||||
if (getViewPath() == null) { | |||||
setViewPath(aProj.getBaseDir().getPath()); | |||||
} | |||||
// build the command line from what we got. the format is | |||||
// cleartool checkin [options...] [viewpath ...] | |||||
// as specified in the CLEARTOOL.EXE help | |||||
commandLine.setExecutable(getClearToolCommand()); | |||||
commandLine.createArgument().setValue(COMMAND_MKBL); | |||||
checkOptions(commandLine); | |||||
result = run(commandLine); | |||||
if (result != 0) { | |||||
String msg = "Failed executing: " + commandLine.toString(); | |||||
throw new BuildException(msg, location); | |||||
} | |||||
} | |||||
/** | |||||
* Check the command line options. | |||||
*/ | |||||
private void checkOptions(Commandline cmd) { | |||||
if (getComment() != null) { | |||||
// -c | |||||
getCommentCommand(cmd); | |||||
} else { | |||||
if (getCommentFile() != null) { | |||||
// -cfile | |||||
getCommentFileCommand(cmd); | |||||
} else { | |||||
cmd.createArgument().setValue(FLAG_NOCOMMENT); | |||||
} | |||||
} | |||||
if (getIdentical()) { | |||||
// -identical | |||||
cmd.createArgument().setValue(FLAG_IDENTICAL); | |||||
} | |||||
if (getFull()) { | |||||
// -full | |||||
cmd.createArgument().setValue(FLAG_FULL); | |||||
} else { | |||||
// -incremental | |||||
cmd.createArgument().setValue(FLAG_INCREMENTAL); | |||||
} | |||||
if (getNlabel()) { | |||||
// -nlabel | |||||
cmd.createArgument().setValue(FLAG_NLABEL); | |||||
} | |||||
// baseline_root_name | |||||
cmd.createArgument().setValue(getBaselineRootName()); | |||||
} | |||||
/** | |||||
* Set comment string | |||||
* | |||||
* @param comment the comment string | |||||
*/ | |||||
public void setComment(String comment) { | |||||
m_Comment = comment; | |||||
} | |||||
/** | |||||
* Get comment string | |||||
* | |||||
* @return String containing the comment | |||||
*/ | |||||
public String getComment() { | |||||
return m_Comment; | |||||
} | |||||
/** | |||||
* Set comment file | |||||
* | |||||
* @param cfile the path to the comment file | |||||
*/ | |||||
public void setCommentFile(String cfile) { | |||||
m_Cfile = cfile; | |||||
} | |||||
/** | |||||
* Get comment file | |||||
* | |||||
* @return String containing the path to the comment file | |||||
*/ | |||||
public String getCommentFile() { | |||||
return m_Cfile; | |||||
} | |||||
/** | |||||
* Set baseline_root_name | |||||
* | |||||
* @param baseline_root_name the name of the baseline | |||||
*/ | |||||
public void setBaselineRootName(String baseline_root_name) { | |||||
m_BaselineRootName = baseline_root_name; | |||||
} | |||||
/** | |||||
* Get baseline_root_name | |||||
* | |||||
* @return String containing the name of the baseline | |||||
*/ | |||||
public String getBaselineRootName() { | |||||
return m_BaselineRootName; | |||||
} | |||||
/** | |||||
/** | |||||
* Set the nowarn flag | |||||
* | |||||
* @param nwarn the status to set the flag to | |||||
*/ | |||||
public void setNoWarn(boolean nwarn) { | |||||
m_Nwarn = nwarn; | |||||
} | |||||
/** | |||||
* Get nowarn flag status | |||||
* | |||||
* @return boolean containing status of nwarn flag | |||||
*/ | |||||
public boolean getNoWarn() { | |||||
return m_Nwarn; | |||||
} | |||||
/** | |||||
* Set the identical flag | |||||
* | |||||
* @param identical the status to set the flag to | |||||
*/ | |||||
public void setIdentical(boolean identical) { | |||||
m_Identical = identical; | |||||
} | |||||
/** | |||||
* Get identical flag status | |||||
* | |||||
* @return boolean containing status of identical flag | |||||
*/ | |||||
public boolean getIdentical() { | |||||
return m_Identical; | |||||
} | |||||
/** | |||||
* Set the full flag | |||||
* | |||||
* @param full the status to set the flag to | |||||
*/ | |||||
public void setFull(boolean full) { | |||||
m_Full = full; | |||||
} | |||||
/** | |||||
* Get full flag status | |||||
* | |||||
* @return boolean containing status of full flag | |||||
*/ | |||||
public boolean getFull() { | |||||
return m_Full; | |||||
} | |||||
/** | |||||
* Set the nlabel flag | |||||
* | |||||
* @param nlabel the status to set the flag to | |||||
*/ | |||||
public void setNlabel(boolean nlabel) { | |||||
m_Nlabel = nlabel; | |||||
} | |||||
/** | |||||
* Get nlabel status | |||||
* | |||||
* @return boolean containing status of nlabel flag | |||||
*/ | |||||
public boolean getNlabel() { | |||||
return m_Nlabel; | |||||
} | |||||
/** | |||||
* Get the 'comment' command | |||||
* | |||||
* @return the 'comment' command if the attribute was specified, otherwise an empty string | |||||
* | |||||
* @param CommandLine containing the command line string with or without the comment flag and string appended | |||||
*/ | |||||
private void getCommentCommand(Commandline cmd) { | |||||
if (getComment() != null) { | |||||
/* Had to make two separate commands here because if a space is | |||||
inserted between the flag and the value, it is treated as a | |||||
Windows filename with a space and it is enclosed in double | |||||
quotes ("). This breaks clearcase. | |||||
*/ | |||||
cmd.createArgument().setValue(FLAG_COMMENT); | |||||
cmd.createArgument().setValue(getComment()); | |||||
} | |||||
} | |||||
/** | |||||
* Get the 'commentfile' command | |||||
* | |||||
* @return the 'commentfile' command if the attribute was specified, otherwise an empty string | |||||
* | |||||
* @param CommandLine containing the command line string with or without the commentfile flag and file appended | |||||
*/ | |||||
private void getCommentFileCommand(Commandline cmd) { | |||||
if (getCommentFile() != null) { | |||||
/* Had to make two separate commands here because if a space is | |||||
inserted between the flag and the value, it is treated as a | |||||
Windows filename with a space and it is enclosed in double | |||||
quotes ("). This breaks clearcase. | |||||
*/ | |||||
cmd.createArgument().setValue(FLAG_COMMENTFILE); | |||||
cmd.createArgument().setValue(getCommentFile()); | |||||
} | |||||
} | |||||
/** | |||||
* -c flag -- comment to attach to the file | |||||
*/ | |||||
public static final String FLAG_COMMENT = "-c"; | |||||
/** | |||||
* -cfile flag -- file containing a comment to attach to the file | |||||
*/ | |||||
public static final String FLAG_COMMENTFILE = "-cfile"; | |||||
/** | |||||
* -nc flag -- no comment is specified | |||||
*/ | |||||
public static final String FLAG_NOCOMMENT = "-nc"; | |||||
/** | |||||
* -identical flag -- allows the file to be checked in even if it is identical to the original | |||||
*/ | |||||
public static final String FLAG_IDENTICAL = "-identical"; | |||||
/** | |||||
* -incremental flag -- baseline to be created is incremental | |||||
*/ | |||||
public static final String FLAG_INCREMENTAL = "-incremental"; | |||||
/** | |||||
* -full flag -- baseline to be created is full | |||||
*/ | |||||
public static final String FLAG_FULL = "-full"; | |||||
/** | |||||
* -nlabel -- baseline to be created without a label | |||||
*/ | |||||
public static final String FLAG_NLABEL = "-nlabel"; | |||||
} |
@@ -0,0 +1,433 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 2003 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 "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.clearcase; | |||||
import org.apache.tools.ant.*; | |||||
import org.apache.tools.ant.types.Commandline; | |||||
import org.apache.tools.ant.types.Path; | |||||
import java.io.File; | |||||
/** | |||||
* Task to perform mklabel command to ClearCase. | |||||
* <p> | |||||
* The following attributes are interpreted: | |||||
* <table border="1"> | |||||
* <tr> | |||||
* <th>Attribute</th> | |||||
* <th>Values</th> | |||||
* <th>Required</th> | |||||
* </tr> | |||||
* <tr> | |||||
* <td>viewpath</td> | |||||
* <td>Path to the ClearCase view file or directory that the command will operate on</td> | |||||
* <td>No</td> | |||||
* <tr> | |||||
* <tr> | |||||
* <td>replace</td> | |||||
* <td>Replace a label of the same type on the same branch</td> | |||||
* <td>No</td> | |||||
* <tr> | |||||
* <tr> | |||||
* <td>recurse</td> | |||||
* <td>Process each subdirectory under viewpath</td> | |||||
* <td>No</td> | |||||
* <tr> | |||||
* <tr> | |||||
* <td>version</td> | |||||
* <td>Identify a specific version to attach the label to</td> | |||||
* <td>No</td> | |||||
* <tr> | |||||
* <tr> | |||||
* <td>typename</td> | |||||
* <td>Name of the label type</td> | |||||
* <td>Yes</td> | |||||
* <tr> | |||||
* <tr> | |||||
* <td>vob</td> | |||||
* <td>Name of the VOB</td> | |||||
* <td>No</td> | |||||
* <tr> | |||||
* <tr> | |||||
* <td>comment</td> | |||||
* <td>Specify a comment. Only one of comment or cfile may be used.</td> | |||||
* <td>No</td> | |||||
* <tr> | |||||
* <tr> | |||||
* <td>commentfile</td> | |||||
* <td>Specify a file containing a comment. Only one of comment or cfile may be used.</td> | |||||
* <td>No</td> | |||||
* <tr> | |||||
* </table> | |||||
* | |||||
* @author Curtis White | |||||
*/ | |||||
public class CCMklabel extends ClearCase { | |||||
private boolean m_Replace = false; | |||||
private boolean m_Recurse = false; | |||||
private String m_Version = null; | |||||
private String m_TypeName = null; | |||||
private String m_VOB = null; | |||||
private String m_Comment = null; | |||||
private String m_Cfile = null; | |||||
/** | |||||
* Executes the task. | |||||
* <p> | |||||
* Builds a command line to execute cleartool and then calls Exec's run method | |||||
* to execute the command line. | |||||
*/ | |||||
public void execute() throws BuildException { | |||||
Commandline commandLine = new Commandline(); | |||||
Project aProj = getProject(); | |||||
int result = 0; | |||||
// Check for required attributes | |||||
if (getTypeName() == null) { | |||||
throw new BuildException("Required attribute TypeName not specified"); | |||||
} | |||||
// Default the viewpath to basedir if it is not specified | |||||
if (getViewPath() == null) { | |||||
setViewPath(aProj.getBaseDir().getPath()); | |||||
} | |||||
// build the command line from what we got. the format is | |||||
// cleartool mklabel [options...] [viewpath ...] | |||||
// as specified in the CLEARTOOL help | |||||
commandLine.setExecutable(getClearToolCommand()); | |||||
commandLine.createArgument().setValue(COMMAND_MKLABEL); | |||||
checkOptions(commandLine); | |||||
result = run(commandLine); | |||||
if ( result != 0 ) { | |||||
String msg = "Failed executing: " + commandLine.toString(); | |||||
throw new BuildException(msg, location); | |||||
} | |||||
} | |||||
/** | |||||
* Check the command line options. | |||||
*/ | |||||
private void checkOptions(Commandline cmd) { | |||||
if (getReplace()) { | |||||
// -replace | |||||
cmd.createArgument().setValue(FLAG_REPLACE); | |||||
} | |||||
if (getRecurse()) { | |||||
// -recurse | |||||
cmd.createArgument().setValue(FLAG_RECURSE); | |||||
} | |||||
if (getVersion() != null) { | |||||
// -version | |||||
getVersionCommand(cmd); | |||||
} | |||||
if (getComment() != null) { | |||||
// -c | |||||
getCommentCommand(cmd); | |||||
} else { | |||||
if (getCommentFile() != null) { | |||||
// -cfile | |||||
getCommentFileCommand(cmd); | |||||
} else { | |||||
cmd.createArgument().setValue(FLAG_NOCOMMENT); | |||||
} | |||||
} | |||||
if (getTypeName() != null) { | |||||
// type | |||||
getTypeCommand(cmd); | |||||
} | |||||
// viewpath | |||||
cmd.createArgument().setValue(getViewPath()); | |||||
} | |||||
/** | |||||
* Set the replace flag | |||||
* | |||||
* @param replace the status to set the flag to | |||||
*/ | |||||
public void setReplace(boolean repl) { | |||||
m_Replace = repl; | |||||
} | |||||
/** | |||||
* Get replace flag status | |||||
* | |||||
* @return boolean containing status of replace flag | |||||
*/ | |||||
public boolean getReplace() { | |||||
return m_Replace; | |||||
} | |||||
/** | |||||
* Set recurse flag | |||||
* | |||||
* @param recurse the status to set the flag to | |||||
*/ | |||||
public void setRecurse(boolean recurse) { | |||||
m_Recurse = recurse; | |||||
} | |||||
/** | |||||
* Get recurse flag status | |||||
* | |||||
* @return boolean containing status of recurse flag | |||||
*/ | |||||
public boolean getRecurse() { | |||||
return m_Recurse; | |||||
} | |||||
/** | |||||
* Set the version flag | |||||
* | |||||
* @param version the status to set the flag to | |||||
*/ | |||||
public void setVersion(String ver) { | |||||
m_Version = ver; | |||||
} | |||||
/** | |||||
* Get version flag status | |||||
* | |||||
* @return boolean containing status of version flag | |||||
*/ | |||||
public String getVersion() { | |||||
return m_Version; | |||||
} | |||||
/** | |||||
* Set comment string | |||||
* | |||||
* @param comment the comment string | |||||
*/ | |||||
public void setComment(String comment) { | |||||
m_Comment = comment; | |||||
} | |||||
/** | |||||
* Get comment string | |||||
* | |||||
* @return String containing the comment | |||||
*/ | |||||
public String getComment() { | |||||
return m_Comment; | |||||
} | |||||
/** | |||||
* Set comment file | |||||
* | |||||
* @param cfile the path to the comment file | |||||
*/ | |||||
public void setCommentFile(String cfile) { | |||||
m_Cfile = cfile; | |||||
} | |||||
/** | |||||
* Get comment file | |||||
* | |||||
* @return String containing the path to the comment file | |||||
*/ | |||||
public String getCommentFile() { | |||||
return m_Cfile; | |||||
} | |||||
/** | |||||
* Set the type-name | |||||
* | |||||
* @param tn the type name | |||||
*/ | |||||
public void setTypeName(String tn) { | |||||
m_TypeName = tn; | |||||
} | |||||
/** | |||||
* Get type-name | |||||
* | |||||
* @return String containing type name | |||||
*/ | |||||
public String getTypeName() { | |||||
return m_TypeName; | |||||
} | |||||
/** | |||||
* Set the VOB name | |||||
* | |||||
* @param vob the VOB name | |||||
*/ | |||||
public void setVOB(String vob) { | |||||
m_VOB = vob; | |||||
} | |||||
/** | |||||
* Get VOB name | |||||
* | |||||
* @return String containing VOB name | |||||
*/ | |||||
public String getVOB() { | |||||
return m_VOB; | |||||
} | |||||
/** | |||||
* Get the 'version' command | |||||
* | |||||
* @return the 'version' command if the attribute was specified, otherwise an empty string | |||||
* | |||||
* @param CommandLine containing the command line string with or without the version flag and string appended | |||||
*/ | |||||
private void getVersionCommand(Commandline cmd) { | |||||
if (getVersion() != null) { | |||||
/* Had to make two separate commands here because if a space is | |||||
inserted between the flag and the value, it is treated as a | |||||
Windows filename with a space and it is enclosed in double | |||||
quotes ("). This breaks clearcase. | |||||
*/ | |||||
cmd.createArgument().setValue(FLAG_VERSION); | |||||
cmd.createArgument().setValue(getVersion()); | |||||
} | |||||
} | |||||
/** | |||||
* Get the 'comment' command | |||||
* | |||||
* @return the 'comment' command if the attribute was specified, otherwise an empty string | |||||
* | |||||
* @param CommandLine containing the command line string with or without the comment flag and string appended | |||||
*/ | |||||
private void getCommentCommand(Commandline cmd) { | |||||
if (getComment() != null) { | |||||
/* Had to make two separate commands here because if a space is | |||||
inserted between the flag and the value, it is treated as a | |||||
Windows filename with a space and it is enclosed in double | |||||
quotes ("). This breaks clearcase. | |||||
*/ | |||||
cmd.createArgument().setValue(FLAG_COMMENT); | |||||
cmd.createArgument().setValue(getComment()); | |||||
} | |||||
} | |||||
/** | |||||
* Get the 'commentfile' command | |||||
* | |||||
* @return the 'commentfile' command if the attribute was specified, otherwise an empty string | |||||
* | |||||
* @param CommandLine containing the command line string with or without the commentfile flag and file appended | |||||
*/ | |||||
private void getCommentFileCommand(Commandline cmd) { | |||||
if (getCommentFile() != null) { | |||||
/* Had to make two separate commands here because if a space is | |||||
inserted between the flag and the value, it is treated as a | |||||
Windows filename with a space and it is enclosed in double | |||||
quotes ("). This breaks clearcase. | |||||
*/ | |||||
cmd.createArgument().setValue(FLAG_COMMENTFILE); | |||||
cmd.createArgument().setValue(getCommentFile()); | |||||
} | |||||
} | |||||
/** | |||||
* Get the type-name | |||||
* | |||||
* @return the 'type-name-specifier' command if the attribute was specified, otherwise an empty string | |||||
* | |||||
* @param CommandLine containing the command line string with or without the type-name | |||||
*/ | |||||
private void getTypeCommand(Commandline cmd) { | |||||
String typenm = null; | |||||
if (getTypeName() != null) { | |||||
typenm = getTypeName(); | |||||
if (getVOB() != null) { | |||||
typenm += "@" + getVOB(); | |||||
} | |||||
cmd.createArgument().setValue(typenm); | |||||
} | |||||
} | |||||
/** | |||||
* -replace flag -- replace another label of the same type | |||||
*/ | |||||
public static final String FLAG_REPLACE = "-replace"; | |||||
/** | |||||
* -recurse flag -- process all subdirectories | |||||
*/ | |||||
public static final String FLAG_RECURSE = "-recurse"; | |||||
/** | |||||
* -version flag -- attach label to specified version | |||||
*/ | |||||
public static final String FLAG_VERSION = "-version"; | |||||
/** | |||||
* -c flag -- comment to attach to the file | |||||
*/ | |||||
public static final String FLAG_COMMENT = "-c"; | |||||
/** | |||||
* -cfile flag -- file containing a comment to attach to the file | |||||
*/ | |||||
public static final String FLAG_COMMENTFILE = "-cfile"; | |||||
/** | |||||
* -nc flag -- no comment is specified | |||||
*/ | |||||
public static final String FLAG_NOCOMMENT = "-nc"; | |||||
} | |||||
@@ -0,0 +1,465 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 2003 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 "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.clearcase; | |||||
import org.apache.tools.ant.*; | |||||
import org.apache.tools.ant.types.Commandline; | |||||
import org.apache.tools.ant.types.Path; | |||||
import java.io.File; | |||||
/** | |||||
* Task to perform mklbtype command to ClearCase. | |||||
* <p> | |||||
* The following attributes are interpreted: | |||||
* <table border="1"> | |||||
* <tr> | |||||
* <th>Attribute</th> | |||||
* <th>Values</th> | |||||
* <th>Required</th> | |||||
* </tr> | |||||
* <tr> | |||||
* <td>typename</td> | |||||
* <td>Name of the label type to create</td> | |||||
* <td>Yes</td> | |||||
* <tr> | |||||
* <tr> | |||||
* <td>vob</td> | |||||
* <td>Name of the VOB</td> | |||||
* <td>No</td> | |||||
* <tr> | |||||
* <tr> | |||||
* <td>replace</td> | |||||
* <td>Replace an existing label definition of the same type</td> | |||||
* <td>No</td> | |||||
* <tr> | |||||
* <tr> | |||||
* <td>global</td> | |||||
* <td>Either global or ordinary can be specified, not both. Creates a label type that is global to the VOB or to VOBs that use this VOB</td> | |||||
* <td>No</td> | |||||
* <tr> | |||||
* <tr> | |||||
* <td>ordinary</td> | |||||
* <td>Either global or ordinary can be specified, not both. Creates a label type that can be used only in the current VOB. <B>Default</B></td> | |||||
* <td>No</td> | |||||
* <tr> | |||||
* <tr> | |||||
* <td>pbranch</td> | |||||
* <td>Allows the label type to be used once per branch in a given element's version tree</td> | |||||
* <td>No</td> | |||||
* <tr> | |||||
* <tr> | |||||
* <td>shared</td> | |||||
* <td>Sets the way mastership is checked by ClearCase. See ClearCase documentation for details</td> | |||||
* <td>No</td> | |||||
* <tr> | |||||
* <tr> | |||||
* <td>comment</td> | |||||
* <td>Specify a comment. Only one of comment or cfile may be used.</td> | |||||
* <td>No</td> | |||||
* <tr> | |||||
* <tr> | |||||
* <td>commentfile</td> | |||||
* <td>Specify a file containing a comment. Only one of comment or cfile may be used.</td> | |||||
* <td>No</td> | |||||
* <tr> | |||||
* </table> | |||||
* | |||||
* @author Curtis White | |||||
*/ | |||||
public class CCMklbtype extends ClearCase { | |||||
private String m_TypeName = null; | |||||
private String m_VOB = null; | |||||
private String m_Comment = null; | |||||
private String m_Cfile = null; | |||||
private boolean m_Replace = false; | |||||
private boolean m_Global = false; | |||||
private boolean m_Ordinary = true; | |||||
private boolean m_Pbranch = false; | |||||
private boolean m_Shared = false; | |||||
/** | |||||
* Executes the task. | |||||
* <p> | |||||
* Builds a command line to execute cleartool and then calls Exec's run method | |||||
* to execute the command line. | |||||
*/ | |||||
public void execute() throws BuildException { | |||||
Commandline commandLine = new Commandline(); | |||||
Project aProj = getProject(); | |||||
int result = 0; | |||||
// Check for required attributes | |||||
if (getTypeName() == null) { | |||||
throw new BuildException("Required attribute TypeName not specified"); | |||||
} | |||||
// build the command line from what we got. the format is | |||||
// cleartool mklbtype [options...] type-selector... | |||||
// as specified in the CLEARTOOL help | |||||
commandLine.setExecutable(getClearToolCommand()); | |||||
commandLine.createArgument().setValue(COMMAND_MKLBTYPE); | |||||
checkOptions(commandLine); | |||||
result = run(commandLine); | |||||
if ( result != 0 ) { | |||||
String msg = "Failed executing: " + commandLine.toString(); | |||||
throw new BuildException(msg, location); | |||||
} | |||||
} | |||||
/** | |||||
* Check the command line options. | |||||
*/ | |||||
private void checkOptions(Commandline cmd) { | |||||
if (getReplace()) { | |||||
// -replace | |||||
cmd.createArgument().setValue(FLAG_REPLACE); | |||||
} | |||||
if (getOrdinary()) { | |||||
// -ordinary | |||||
cmd.createArgument().setValue(FLAG_ORDINARY); | |||||
} else { | |||||
if (getGlobal()) { | |||||
// -global | |||||
cmd.createArgument().setValue(FLAG_GLOBAL); | |||||
} | |||||
} | |||||
if (getPbranch()) { | |||||
// -pbranch | |||||
cmd.createArgument().setValue(FLAG_PBRANCH); | |||||
} | |||||
if (getShared()) { | |||||
// -shared | |||||
cmd.createArgument().setValue(FLAG_SHARED); | |||||
} | |||||
if (getComment() != null) { | |||||
// -c | |||||
getCommentCommand(cmd); | |||||
} else { | |||||
if (getCommentFile() != null) { | |||||
// -cfile | |||||
getCommentFileCommand(cmd); | |||||
} else { | |||||
cmd.createArgument().setValue(FLAG_NOCOMMENT); | |||||
} | |||||
} | |||||
// type-name@vob | |||||
cmd.createArgument().setValue(getTypeSpecifier()); | |||||
} | |||||
/** | |||||
* Set type-name string | |||||
* | |||||
* @param tn the type-name string | |||||
*/ | |||||
public void setTypeName(String tn) { | |||||
m_TypeName = tn; | |||||
} | |||||
/** | |||||
* Get type-name string | |||||
* | |||||
* @return String containing the type-name | |||||
*/ | |||||
public String getTypeName() { | |||||
return m_TypeName; | |||||
} | |||||
/** | |||||
* Set the VOB name | |||||
* | |||||
* @param vob the VOB name | |||||
*/ | |||||
public void setVOB(String vob) { | |||||
m_VOB = vob; | |||||
} | |||||
/** | |||||
* Get VOB name | |||||
* | |||||
* @return String containing VOB name | |||||
*/ | |||||
public String getVOB() { | |||||
return m_VOB; | |||||
} | |||||
/** | |||||
* Set the replace flag | |||||
* | |||||
* @param repl the status to set the flag to | |||||
*/ | |||||
public void setReplace(boolean repl) { | |||||
m_Replace = repl; | |||||
} | |||||
/** | |||||
* Get replace flag status | |||||
* | |||||
* @return boolean containing status of replace flag | |||||
*/ | |||||
public boolean getReplace() { | |||||
return m_Replace; | |||||
} | |||||
/** | |||||
* Set the global flag | |||||
* | |||||
* @param glob the status to set the flag to | |||||
*/ | |||||
public void setGlobal(boolean glob) { | |||||
m_Global = glob; | |||||
} | |||||
/** | |||||
* Get global flag status | |||||
* | |||||
* @return boolean containing status of global flag | |||||
*/ | |||||
public boolean getGlobal() { | |||||
return m_Global; | |||||
} | |||||
/** | |||||
* Set the ordinary flag | |||||
* | |||||
* @param ordinary the status to set the flag to | |||||
*/ | |||||
public void setOrdinary(boolean ordinary) { | |||||
m_Ordinary = ordinary; | |||||
} | |||||
/** | |||||
* Get ordinary flag status | |||||
* | |||||
* @return boolean containing status of ordinary flag | |||||
*/ | |||||
public boolean getOrdinary() { | |||||
return m_Ordinary; | |||||
} | |||||
/** | |||||
* Set the pbranch flag | |||||
* | |||||
* @param pbranch the status to set the flag to | |||||
*/ | |||||
public void setPbranch(boolean pbranch) { | |||||
m_Pbranch = pbranch; | |||||
} | |||||
/** | |||||
* Get pbranch flag status | |||||
* | |||||
* @return boolean containing status of pbranch flag | |||||
*/ | |||||
public boolean getPbranch() { | |||||
return m_Pbranch; | |||||
} | |||||
/** | |||||
* Set the shared flag | |||||
* | |||||
* @param shared the status to set the flag to | |||||
*/ | |||||
public void setShared(boolean shar) { | |||||
m_Shared = shar; | |||||
} | |||||
/** | |||||
* Get shared flag status | |||||
* | |||||
* @return boolean containing status of shared flag | |||||
*/ | |||||
public boolean getShared() { | |||||
return m_Shared; | |||||
} | |||||
/** | |||||
* Set comment string | |||||
* | |||||
* @param comment the comment string | |||||
*/ | |||||
public void setComment(String comment) { | |||||
m_Comment = comment; | |||||
} | |||||
/** | |||||
* Get comment string | |||||
* | |||||
* @return String containing the comment | |||||
*/ | |||||
public String getComment() { | |||||
return m_Comment; | |||||
} | |||||
/** | |||||
* Set comment file | |||||
* | |||||
* @param cfile the path to the comment file | |||||
*/ | |||||
public void setCommentFile(String cfile) { | |||||
m_Cfile = cfile; | |||||
} | |||||
/** | |||||
* Get comment file | |||||
* | |||||
* @return String containing the path to the comment file | |||||
*/ | |||||
public String getCommentFile() { | |||||
return m_Cfile; | |||||
} | |||||
/** | |||||
* Get the 'comment' command | |||||
* | |||||
* @return the 'comment' command if the attribute was specified, otherwise an empty string | |||||
* | |||||
* @param CommandLine containing the command line string with or without the comment flag and string appended | |||||
*/ | |||||
private void getCommentCommand(Commandline cmd) { | |||||
if (getComment() != null) { | |||||
/* Had to make two separate commands here because if a space is | |||||
inserted between the flag and the value, it is treated as a | |||||
Windows filename with a space and it is enclosed in double | |||||
quotes ("). This breaks clearcase. | |||||
*/ | |||||
cmd.createArgument().setValue(FLAG_COMMENT); | |||||
cmd.createArgument().setValue(getComment()); | |||||
} | |||||
} | |||||
/** | |||||
* Get the 'commentfile' command | |||||
* | |||||
* @return the 'commentfile' command if the attribute was specified, otherwise an empty string | |||||
* | |||||
* @param CommandLine containing the command line string with or without the commentfile flag and file appended | |||||
*/ | |||||
private void getCommentFileCommand(Commandline cmd) { | |||||
if (getCommentFile() != null) { | |||||
/* Had to make two separate commands here because if a space is | |||||
inserted between the flag and the value, it is treated as a | |||||
Windows filename with a space and it is enclosed in double | |||||
quotes ("). This breaks clearcase. | |||||
*/ | |||||
cmd.createArgument().setValue(FLAG_COMMENTFILE); | |||||
cmd.createArgument().setValue(getCommentFile()); | |||||
} | |||||
} | |||||
/** | |||||
* Get the type-name specifier | |||||
* | |||||
* @return the 'type-name-specifier' command if the attribute was specified, otherwise an empty string | |||||
* | |||||
* @param CommandLine containing the command line string with or without the type-name | |||||
*/ | |||||
private String getTypeSpecifier() { | |||||
String typenm = null; | |||||
typenm = getTypeName(); | |||||
if (getVOB() != null) { | |||||
typenm += "@" + getVOB(); | |||||
} | |||||
return typenm; | |||||
} | |||||
/** | |||||
* -replace flag -- replace existing label definition of the same type | |||||
*/ | |||||
public static final String FLAG_REPLACE = "-replace"; | |||||
/** | |||||
* -global flag -- creates a label type that is global to the VOB or to VOBs that use this VOB | |||||
*/ | |||||
public static final String FLAG_GLOBAL = "-global"; | |||||
/** | |||||
* -ordinary flag -- creates a label type that can be used only in the current VOB | |||||
*/ | |||||
public static final String FLAG_ORDINARY = "-ordinary"; | |||||
/** | |||||
* -pbranch flag -- allows label type to be used once per branch | |||||
*/ | |||||
public static final String FLAG_PBRANCH = "-pbranch"; | |||||
/** | |||||
* -shared flag -- sets the way mastership is checked by ClearCase | |||||
*/ | |||||
public static final String FLAG_SHARED = "-shared"; | |||||
/** | |||||
* -c flag -- comment to attach to the file | |||||
*/ | |||||
public static final String FLAG_COMMENT = "-c"; | |||||
/** | |||||
* -cfile flag -- file containing a comment to attach to the file | |||||
*/ | |||||
public static final String FLAG_COMMENTFILE = "-cfile"; | |||||
/** | |||||
* -nc flag -- no comment is specified | |||||
*/ | |||||
public static final String FLAG_NOCOMMENT = "-nc"; | |||||
} | |||||
@@ -0,0 +1,403 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 2003 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 "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.clearcase; | |||||
import org.apache.tools.ant.*; | |||||
import org.apache.tools.ant.types.Commandline; | |||||
import org.apache.tools.ant.types.Path; | |||||
import java.io.File; | |||||
/** | |||||
* Task to perform rmtype command to ClearCase. | |||||
* <p> | |||||
* The following attributes are interpreted: | |||||
* <table border="1"> | |||||
* <tr> | |||||
* <th>Attribute</th> | |||||
* <th>Values</th> | |||||
* <th>Required</th> | |||||
* </tr> | |||||
* <tr> | |||||
* <td>typekind</td> | |||||
* <td>The kind of type to create. Valid types are:<br> | |||||
* attype attribute type<br> | |||||
* brtype branch type<br> | |||||
* eltype element type<br> | |||||
* hltype hyperlink type<br> | |||||
* lbtype label type<br> | |||||
* trtype trigger type<br> | |||||
* </td> | |||||
* <td>Yes</td> | |||||
* <tr> | |||||
* <tr> | |||||
* <td>typename</td> | |||||
* <td>The name of the type to remove</td> | |||||
* <td>Yes</td> | |||||
* <tr> | |||||
* <tr> | |||||
* <td>vob</td> | |||||
* <td>Name of the VOB</td> | |||||
* <td>No</td> | |||||
* <tr> | |||||
* <tr> | |||||
* <td>ignore</td> | |||||
* <td>Used with trigger types only. Forces removal of trigger type even if a pre-operation trigger would prevent its removal</td> | |||||
* <td>No</td> | |||||
* <tr> | |||||
* <tr> | |||||
* <td>rmall</td> | |||||
* <td>Removes all instances of a type and the type object itself</td> | |||||
* <td>No</td> | |||||
* <tr> | |||||
* <tr> | |||||
* <td>comment</td> | |||||
* <td>Specify a comment. Only one of comment or cfile may be used.</td> | |||||
* <td>No</td> | |||||
* <tr> | |||||
* <tr> | |||||
* <td>commentfile</td> | |||||
* <td>Specify a file containing a comment. Only one of comment or cfile may be used.</td> | |||||
* <td>No</td> | |||||
* <tr> | |||||
* </table> | |||||
* | |||||
* @author Curtis White | |||||
*/ | |||||
public class CCRmtype extends ClearCase { | |||||
private String m_TypeKind = null; | |||||
private String m_TypeName = null; | |||||
private String m_VOB = null; | |||||
private String m_Comment = null; | |||||
private String m_Cfile = null; | |||||
private boolean m_Rmall = false; | |||||
private boolean m_Ignore = false; | |||||
/** | |||||
* Executes the task. | |||||
* <p> | |||||
* Builds a command line to execute cleartool and then calls Exec's run method | |||||
* to execute the command line. | |||||
*/ | |||||
public void execute() throws BuildException { | |||||
Commandline commandLine = new Commandline(); | |||||
Project aProj = getProject(); | |||||
int result = 0; | |||||
// Check for required attributes | |||||
if (getTypeKind() == null) { | |||||
throw new BuildException("Required attribute TypeKind not specified"); | |||||
} | |||||
if (getTypeName() == null) { | |||||
throw new BuildException("Required attribute TypeName not specified"); | |||||
} | |||||
// build the command line from what we got. the format is | |||||
// cleartool rmtype [options...] type-selector... | |||||
// as specified in the CLEARTOOL help | |||||
commandLine.setExecutable(getClearToolCommand()); | |||||
commandLine.createArgument().setValue(COMMAND_RMTYPE); | |||||
checkOptions(commandLine); | |||||
result = run(commandLine); | |||||
if ( result != 0 ) { | |||||
String msg = "Failed executing: " + commandLine.toString(); | |||||
throw new BuildException(msg, location); | |||||
} | |||||
} | |||||
/** | |||||
* Check the command line options. | |||||
*/ | |||||
private void checkOptions(Commandline cmd) { | |||||
if (getIgnore()) { | |||||
// -ignore | |||||
cmd.createArgument().setValue(FLAG_IGNORE); | |||||
} | |||||
if (getRmAll()) { | |||||
// -rmall -force | |||||
cmd.createArgument().setValue(FLAG_RMALL); | |||||
cmd.createArgument().setValue(FLAG_FORCE); | |||||
} | |||||
if (getComment() != null) { | |||||
// -c | |||||
getCommentCommand(cmd); | |||||
} else { | |||||
if (getCommentFile() != null) { | |||||
// -cfile | |||||
getCommentFileCommand(cmd); | |||||
} else { | |||||
cmd.createArgument().setValue(FLAG_NOCOMMENT); | |||||
} | |||||
} | |||||
// type-kind:type-name | |||||
cmd.createArgument().setValue(getTypeSpecifier()); | |||||
} | |||||
/** | |||||
* Set the ignore flag | |||||
* | |||||
* @param ignore the status to set the flag to | |||||
*/ | |||||
public void setIgnore(boolean ignore) { | |||||
m_Ignore = ignore; | |||||
} | |||||
/** | |||||
* Get ignore flag status | |||||
* | |||||
* @return boolean containing status of ignore flag | |||||
*/ | |||||
public boolean getIgnore() { | |||||
return m_Ignore; | |||||
} | |||||
/** | |||||
* Set rmall flag | |||||
* | |||||
* @param rmall the status to set the flag to | |||||
*/ | |||||
public void setRmAll(boolean rmall) { | |||||
m_Rmall = rmall; | |||||
} | |||||
/** | |||||
* Get rmall flag status | |||||
* | |||||
* @return boolean containing status of rmall flag | |||||
*/ | |||||
public boolean getRmAll() { | |||||
return m_Rmall; | |||||
} | |||||
/** | |||||
* Set comment string | |||||
* | |||||
* @param comment the comment string | |||||
*/ | |||||
public void setComment(String comment) { | |||||
m_Comment = comment; | |||||
} | |||||
/** | |||||
* Get comment string | |||||
* | |||||
* @return String containing the comment | |||||
*/ | |||||
public String getComment() { | |||||
return m_Comment; | |||||
} | |||||
/** | |||||
* Set comment file | |||||
* | |||||
* @param cfile the path to the comment file | |||||
*/ | |||||
public void setCommentFile(String cfile) { | |||||
m_Cfile = cfile; | |||||
} | |||||
/** | |||||
* Get comment file | |||||
* | |||||
* @return String containing the path to the comment file | |||||
*/ | |||||
public String getCommentFile() { | |||||
return m_Cfile; | |||||
} | |||||
/** | |||||
* Set type-kind string | |||||
* | |||||
* @param tk the type-kind string | |||||
*/ | |||||
public void setTypeKind(String tk) { | |||||
m_TypeKind = tk; | |||||
} | |||||
/** | |||||
* Get type-kind string | |||||
* | |||||
* @return String containing the type-kind | |||||
*/ | |||||
public String getTypeKind() { | |||||
return m_TypeKind; | |||||
} | |||||
/** | |||||
* Set type-name string | |||||
* | |||||
* @param tn the type-name string | |||||
*/ | |||||
public void setTypeName(String tn) { | |||||
m_TypeName = tn; | |||||
} | |||||
/** | |||||
* Get type-name string | |||||
* | |||||
* @return String containing the type-name | |||||
*/ | |||||
public String getTypeName() { | |||||
return m_TypeName; | |||||
} | |||||
/** | |||||
* Set the VOB name | |||||
* | |||||
* @param vob the VOB name | |||||
*/ | |||||
public void setVOB(String vob) { | |||||
m_VOB = vob; | |||||
} | |||||
/** | |||||
* Get VOB name | |||||
* | |||||
* @return String containing VOB name | |||||
*/ | |||||
public String getVOB() { | |||||
return m_VOB; | |||||
} | |||||
/** | |||||
* Get the 'type-specifier' string | |||||
* | |||||
* @return the 'type-kind:type-name@vob' specifier | |||||
* | |||||
* @param CommandLine containing the command line string | |||||
*/ | |||||
private String getTypeSpecifier() { | |||||
String tkind = getTypeKind(); | |||||
String tname = getTypeName(); | |||||
String typeSpec = null; | |||||
// Return the type-selector | |||||
typeSpec = tkind + ":" + tname; | |||||
if (getVOB() != null) { | |||||
typeSpec += "@" + getVOB(); | |||||
} | |||||
return typeSpec; | |||||
} | |||||
/** | |||||
* Get the 'comment' command | |||||
* | |||||
* @return the 'comment' command if the attribute was specified, otherwise an empty string | |||||
* | |||||
* @param CommandLine containing the command line string with or without the comment flag and string appended | |||||
*/ | |||||
private void getCommentCommand(Commandline cmd) { | |||||
if (getComment() != null) { | |||||
/* Had to make two separate commands here because if a space is | |||||
inserted between the flag and the value, it is treated as a | |||||
Windows filename with a space and it is enclosed in double | |||||
quotes ("). This breaks clearcase. | |||||
*/ | |||||
cmd.createArgument().setValue(FLAG_COMMENT); | |||||
cmd.createArgument().setValue(getComment()); | |||||
} | |||||
} | |||||
/** | |||||
* Get the 'commentfile' command | |||||
* | |||||
* @return the 'commentfile' command if the attribute was specified, otherwise an empty string | |||||
* | |||||
* @param CommandLine containing the command line string with or without the commentfile flag and file appended | |||||
*/ | |||||
private void getCommentFileCommand(Commandline cmd) { | |||||
if (getCommentFile() != null) { | |||||
/* Had to make two separate commands here because if a space is | |||||
inserted between the flag and the value, it is treated as a | |||||
Windows filename with a space and it is enclosed in double | |||||
quotes ("). This breaks clearcase. | |||||
*/ | |||||
cmd.createArgument().setValue(FLAG_COMMENTFILE); | |||||
cmd.createArgument().setValue(getCommentFile()); | |||||
} | |||||
} | |||||
/** | |||||
* -ignore flag -- ignore pre-trigger operations when removing a trigger type | |||||
*/ | |||||
public static final String FLAG_IGNORE = "-ignore"; | |||||
/** | |||||
* -rmall flag -- removes all instances of a type and the type object itself | |||||
*/ | |||||
public static final String FLAG_RMALL = "-rmall"; | |||||
/** | |||||
* -force flag -- suppresses confirmation prompts | |||||
*/ | |||||
public static final String FLAG_FORCE = "-force"; | |||||
/** | |||||
* -c flag -- comment to attach to the file | |||||
*/ | |||||
public static final String FLAG_COMMENT = "-c"; | |||||
/** | |||||
* -cfile flag -- file containing a comment to attach to the file | |||||
*/ | |||||
public static final String FLAG_COMMENTFILE = "-cfile"; | |||||
/** | |||||
* -nc flag -- no comment is specified | |||||
*/ | |||||
public static final String FLAG_NOCOMMENT = "-nc"; | |||||
} | |||||
@@ -0,0 +1,273 @@ | |||||
/* | |||||
* The Apache Software License, Version 1.1 | |||||
* | |||||
* Copyright (c) 2003 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 "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.clearcase; | |||||
import org.apache.tools.ant.BuildException; | |||||
import org.apache.tools.ant.Project; | |||||
import org.apache.tools.ant.types.Commandline; | |||||
/** | |||||
* TODO: | |||||
* comment field doesn't include all options yet | |||||
*/ | |||||
/** | |||||
* Performs a ClearCase Unlock command. | |||||
* | |||||
* <p> | |||||
* The following attributes are interpretted: | |||||
* <table border="1"> | |||||
* <tr> | |||||
* <th>Attribute</th> | |||||
* <th>Values</th> | |||||
* <th>Required</th> | |||||
* </tr> | |||||
* <tr> | |||||
* <td>comment</td> | |||||
* <td>Specifies how to populate comments fields</td> | |||||
* <td>No</td> | |||||
* <tr> | |||||
* <tr> | |||||
* <td>pname</td> | |||||
* <td>Specifies the object pathname to be unlocked.</td> | |||||
* <td>Yes</td> | |||||
* <tr> | |||||
* <td>objselect</td> | |||||
* <td>Specifies the object(s) to be unlocked.</td> | |||||
* <td>Yes</td> | |||||
* <tr> | |||||
* | |||||
* </table> | |||||
* | |||||
* @author Sean P. Kane (Based on work by: Curtis White) | |||||
*/ | |||||
public class CCUnlock extends ClearCase { | |||||
private String m_Comment = null; | |||||
private String m_Pname = null; | |||||
private String m_Objselect = null; | |||||
/** | |||||
* Executes the task. | |||||
* <p> | |||||
* Builds a command line to execute cleartool and then calls Exec's run method | |||||
* to execute the command line. | |||||
*/ | |||||
public void execute() throws BuildException { | |||||
Commandline commandLine = new Commandline(); | |||||
Project aProj = getProject(); | |||||
int result = 0; | |||||
// Default the viewpath to basedir if it is not specified | |||||
if (getViewPath() == null) { | |||||
setViewPath(aProj.getBaseDir().getPath()); | |||||
} | |||||
// build the command line from what we got the format is | |||||
// cleartool lock [options...] | |||||
// as specified in the CLEARTOOL.EXE help | |||||
commandLine.setExecutable(getClearToolCommand()); | |||||
commandLine.createArgument().setValue(COMMAND_UNLOCK); | |||||
// Check the command line options | |||||
checkOptions(commandLine); | |||||
// For debugging | |||||
System.out.println(commandLine.toString()); | |||||
result = run(commandLine); | |||||
if (result != 0) { | |||||
String msg = "Failed executing: " + commandLine.toString(); | |||||
throw new BuildException(msg, location); | |||||
} | |||||
} | |||||
/** | |||||
* Check the command line options. | |||||
*/ | |||||
private void checkOptions(Commandline cmd) { | |||||
// ClearCase items | |||||
getCommentCommand(cmd); | |||||
getPnameCommand(cmd); | |||||
// object selector | |||||
cmd.createArgument().setValue(getObjselect()); | |||||
} | |||||
/** | |||||
* Sets how comments should be written | |||||
* for the event record(s) | |||||
* | |||||
* @param comment comment method to use | |||||
*/ | |||||
public void setComment(String comment) { | |||||
m_Comment = comment; | |||||
} | |||||
/** | |||||
* Get comment method | |||||
* | |||||
* @return String containing the desired comment method | |||||
*/ | |||||
public String getComment() { | |||||
return m_Comment; | |||||
} | |||||
/** | |||||
* Sets the pathname to be locked | |||||
* | |||||
* @param pname pathname to be locked | |||||
*/ | |||||
public void setPname(String pname) { | |||||
m_Pname = pname; | |||||
} | |||||
/** | |||||
* Get the pathname to be locked | |||||
* | |||||
* @return String containing the pathname to be locked | |||||
*/ | |||||
public String getPname() { | |||||
return m_Pname; | |||||
} | |||||
/** | |||||
* Sets the object(s) to be locked | |||||
* | |||||
* @param objselect objects to be locked | |||||
*/ | |||||
public void setObjselect(String objselect) { | |||||
m_Objselect = objselect; | |||||
} | |||||
/** | |||||
* Get list of objects to be locked | |||||
* | |||||
* @return String containing the objects to be locked | |||||
*/ | |||||
public String getObjselect() { | |||||
return m_Objselect; | |||||
} | |||||
/** | |||||
* Get the 'comment' command | |||||
* | |||||
* @param cmd containing the command line string with or without the comment flag and value appended | |||||
*/ | |||||
private void getCommentCommand(Commandline cmd) { | |||||
if (getComment() == null) { | |||||
return; | |||||
} else { | |||||
/* Had to make two separate commands here because if a space is | |||||
inserted between the flag and the value, it is treated as a | |||||
Windows filename with a space and it is enclosed in double | |||||
quotes ("). This breaks clearcase. | |||||
*/ | |||||
cmd.createArgument().setValue(FLAG_COMMENT); | |||||
cmd.createArgument().setValue(getComment()); | |||||
} | |||||
} | |||||
/** | |||||
* Get the 'pname' command | |||||
* | |||||
* @param cmd containing the command line string with or without the pname flag and value appended | |||||
*/ | |||||
private void getPnameCommand(Commandline cmd) { | |||||
if (getPname() == null) { | |||||
return; | |||||
} else { | |||||
/* Had to make two separate commands here because if a space is | |||||
inserted between the flag and the value, it is treated as a | |||||
Windows filename with a space and it is enclosed in double | |||||
quotes ("). This breaks clearcase. | |||||
*/ | |||||
cmd.createArgument().setValue(FLAG_PNAME); | |||||
cmd.createArgument().setValue(getPname()); | |||||
} | |||||
} | |||||
/** | |||||
* Get the 'pname' command | |||||
* | |||||
* @param cmd containing the command line string with or without the pname flag and value appended | |||||
*/ | |||||
private void getObjselectCommand(Commandline cmd) { | |||||
if (getObjselect() == null) { | |||||
return; | |||||
} else { | |||||
/* Had to make two separate commands here because if a space is | |||||
inserted between the flag and the value, it is treated as a | |||||
Windows filename with a space and it is enclosed in double | |||||
quotes ("). This breaks clearcase. | |||||
*/ | |||||
cmd.createArgument().setValue(FLAG_OBJSELECT); | |||||
cmd.createArgument().setValue(getPname()); | |||||
} | |||||
} | |||||
/** | |||||
* -comment flag -- method to use for commenting events | |||||
*/ | |||||
public static final String FLAG_COMMENT = "-comment"; | |||||
/** | |||||
* -pname flag -- pathname to lock | |||||
*/ | |||||
public static final String FLAG_PNAME = "-pname"; | |||||
/** | |||||
* object-selector option -- list of objects to lock | |||||
*/ | |||||
public static final String FLAG_OBJSELECT = ""; | |||||
} | |||||
@@ -1,7 +1,7 @@ | |||||
/* | /* | ||||
* The Apache Software License, Version 1.1 | * The Apache Software License, Version 1.1 | ||||
* | * | ||||
* Copyright (c) 2000,2002 The Apache Software Foundation. All rights | |||||
* Copyright (c) 2000,2002-2003 The Apache Software Foundation. All rights | |||||
* reserved. | * reserved. | ||||
* | * | ||||
* Redistribution and use in source and binary forms, with or without | * Redistribution and use in source and binary forms, with or without | ||||
@@ -71,15 +71,17 @@ import org.apache.tools.ant.types.Commandline; | |||||
* in the path, * you can override this be specifying the cleartooldir attribute. | * in the path, * you can override this be specifying the cleartooldir attribute. | ||||
* </p> | * </p> | ||||
* <p> | * <p> | ||||
* This class provides set and get methods for the 'viewpath' attribute. It | |||||
* also contains constants for the flags that can be passed to cleartool. | |||||
* This class provides set and get methods for the 'viewpath' and 'objselect' | |||||
* attribute. It also contains constants for the flags that can be passed to | |||||
* cleartool. | |||||
* </p> | * </p> | ||||
* | * | ||||
* @author Curtis White | |||||
* @author Curtis White (Exteneded by Sean P. Kane) | |||||
*/ | */ | ||||
public abstract class ClearCase extends Task { | public abstract class ClearCase extends Task { | ||||
private String m_ClearToolDir = ""; | private String m_ClearToolDir = ""; | ||||
private String m_viewPath = null; | private String m_viewPath = null; | ||||
private String m_objSelect = null; | |||||
/** | /** | ||||
* Set the directory where the cleartool executable is located. | * Set the directory where the cleartool executable is located. | ||||
@@ -124,6 +126,23 @@ public abstract class ClearCase extends Task { | |||||
return m_viewPath; | return m_viewPath; | ||||
} | } | ||||
/** | |||||
* Set the object to operate on. | |||||
* | |||||
* @param objSelect object to operate on | |||||
*/ | |||||
public final void setObjSelect(String objSelect) { | |||||
m_objSelect = objSelect; | |||||
} | |||||
/** | |||||
* Get the object to operate on | |||||
* | |||||
* @return m_objSelect | |||||
*/ | |||||
public String getObjSelect() { | |||||
return m_objSelect; | |||||
} | |||||
protected int run(Commandline cmd) { | protected int run(Commandline cmd) { | ||||
try { | try { | ||||
@@ -159,6 +178,30 @@ public abstract class ClearCase extends Task { | |||||
* The 'UndoCheckout' command | * The 'UndoCheckout' command | ||||
*/ | */ | ||||
public static final String COMMAND_UNCHECKOUT = "uncheckout"; | public static final String COMMAND_UNCHECKOUT = "uncheckout"; | ||||
/** | |||||
* The 'Lock' command | |||||
*/ | |||||
public static final String COMMAND_LOCK = "lock"; | |||||
/** | |||||
* The 'Unlock' command | |||||
*/ | |||||
public static final String COMMAND_UNLOCK = "unlock"; | |||||
/** | |||||
* The 'Mkbl' command | |||||
*/ | |||||
public static final String COMMAND_MKBL = "mkbl"; | |||||
/** | |||||
* The 'Mklabel' command | |||||
*/ | |||||
public static final String COMMAND_MKLABEL = "mklabel"; | |||||
/** | |||||
* The 'Mklbtype' command | |||||
*/ | |||||
public static final String COMMAND_MKLBTYPE = "mklbtype"; | |||||
/** | |||||
* The 'Rmtype' command | |||||
*/ | |||||
public static final String COMMAND_RMTYPE = "rmtype"; | |||||
} | } | ||||