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