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> | |||
| <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> | |||
| <h2>Table of Contents</h2> | |||
| <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> | |||
| <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> | |||
| <h2><a name="cccheckin">CCCheckin</a></h2> | |||
| <h3>Description</h3> | |||
| Task to perform a Checkin command to ClearCase. | |||
| Task to perform a "cleartool checkin" command to ClearCase. | |||
| <h3>Parameters</h3> | |||
| <table border="1" cellpadding="2" cellspacing="0"> | |||
| <tr> | |||
| @@ -28,7 +54,7 @@ Task to perform a Checkin command to ClearCase. | |||
| </tr> | |||
| <tr> | |||
| <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> | |||
| <td>No</td> | |||
| </tr> | |||
| @@ -39,7 +65,7 @@ Task to perform a Checkin command to ClearCase. | |||
| </tr> | |||
| <tr> | |||
| <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> | |||
| <td>No</td> | |||
| </tr> | |||
| @@ -60,7 +86,7 @@ Task to perform a Checkin command to ClearCase. | |||
| </tr> | |||
| <tr> | |||
| <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> | |||
| <td>No</td> | |||
| </tr> | |||
| @@ -68,20 +94,20 @@ Task to perform a Checkin command to ClearCase. | |||
| <h3>Examples</h3> | |||
| <blockquote> | |||
| <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> | |||
| </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. | |||
| All warning messages are suppressed. The file is checked in even if it is | |||
| <i>identical</i> to the original.</p> | |||
| <hr> | |||
| <h2><a name="cccheckout">CCCheckout</a></h2> | |||
| <h3>Description</h3> | |||
| Task to perform a Checkout command to ClearCase. | |||
| Task to perform a "cleartool checkout" command to ClearCase. | |||
| <h3>Parameters</h3> | |||
| <table border="1" cellpadding="2" cellspacing="0"> | |||
| <tr> | |||
| @@ -91,7 +117,7 @@ Task to perform a Checkout command to ClearCase. | |||
| </tr> | |||
| <tr> | |||
| <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> | |||
| <td>No</td> | |||
| </tr> | |||
| @@ -107,7 +133,7 @@ Task to perform a Checkout command to ClearCase. | |||
| </tr> | |||
| <tr> | |||
| <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> | |||
| <td>No</td> | |||
| </tr> | |||
| @@ -133,7 +159,7 @@ Task to perform a Checkout command to ClearCase. | |||
| </tr> | |||
| <tr> | |||
| <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> | |||
| <td>No</td> | |||
| </tr> | |||
| @@ -141,16 +167,16 @@ Task to perform a Checkout command to ClearCase. | |||
| <h3>Examples</h3> | |||
| <blockquote> | |||
| <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> | |||
| </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> | |||
| <hr> | |||
| <h2><a name="ccuncheckout">CCUnCheckout</a></h2> | |||
| @@ -165,13 +191,13 @@ Task to perform a UnCheckout command to ClearCase. | |||
| </tr> | |||
| <tr> | |||
| <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> | |||
| <td>No</td> | |||
| </tr> | |||
| <tr> | |||
| <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> | |||
| <td>No</td> | |||
| </tr> | |||
| @@ -179,16 +205,16 @@ Task to perform a UnCheckout command to ClearCase. | |||
| <h3>Examples</h3> | |||
| <blockquote> | |||
| <pre> | |||
| <ccuncheckout viewpath="c:/views/viewdir/afile" | |||
| keepcopy="true"/> | |||
| <ccuncheckout viewpath="c:/views/viewdir/afile" | |||
| keepcopy="true"/> | |||
| </pre> | |||
| </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> | |||
| <hr> | |||
| <h2><a name="ccupdate">CCUpdate</a></h2> | |||
| <h3>Description</h3> | |||
| Task to perform an Update command to ClearCase. | |||
| Task to perform an "cleartool update" command to ClearCase. | |||
| <h3>Parameters</h3> | |||
| <table border="1" cellpadding="2" cellspacing="0"> | |||
| <tr> | |||
| @@ -198,7 +224,7 @@ Task to perform an Update command to ClearCase. | |||
| </tr> | |||
| <tr> | |||
| <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> | |||
| <td>No</td> | |||
| </tr> | |||
| @@ -224,15 +250,15 @@ Task to perform an Update command to ClearCase. | |||
| </tr> | |||
| <tr> | |||
| <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> | |||
| <td>No</td> | |||
| </tr> | |||
| <tr> | |||
| <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> | |||
| <td>No</td> | |||
| </tr> | |||
| @@ -240,22 +266,399 @@ Task to perform an Update command to ClearCase. | |||
| <h3>Examples</h3> | |||
| <blockquote> | |||
| <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> | |||
| </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> | |||
| <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> | |||
| @@ -1085,8 +1085,8 @@ documentation.</p> | |||
| <tr valign="top"> | |||
| <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 valign="top"> | |||
| @@ -142,6 +142,12 @@ ccupdate=org.apache.tools.ant.taskdefs.optional.clearcase.CCUpdate | |||
| cccheckout=org.apache.tools.ant.taskdefs.optional.clearcase.CCCheckout | |||
| cccheckin=org.apache.tools.ant.taskdefs.optional.clearcase.CCCheckin | |||
| 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 | |||
| junitreport=org.apache.tools.ant.taskdefs.optional.junit.XMLResultAggregator | |||
| 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 | |||
| * | |||
| * Copyright (c) 2000,2002 The Apache Software Foundation. All rights | |||
| * Copyright (c) 2000,2002-2003 The Apache Software Foundation. All rights | |||
| * reserved. | |||
| * | |||
| * 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. | |||
| * </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> | |||
| * | |||
| * @author Curtis White | |||
| * @author Curtis White (Exteneded by Sean P. Kane) | |||
| */ | |||
| public abstract class ClearCase extends Task { | |||
| private String m_ClearToolDir = ""; | |||
| private String m_viewPath = null; | |||
| private String m_objSelect = null; | |||
| /** | |||
| * Set the directory where the cleartool executable is located. | |||
| @@ -124,6 +126,23 @@ public abstract class ClearCase extends Task { | |||
| 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) { | |||
| try { | |||
| @@ -159,6 +178,30 @@ public abstract class ClearCase extends Task { | |||
| * The 'UndoCheckout' command | |||
| */ | |||
| 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"; | |||
| } | |||