Submitted by: Curtis White <soaro77@yahoo.com> git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@268277 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -15,7 +15,7 @@ Other changes: | |||
| * A GUI Frontend: Antidote | |||
| * New tasks: stylebook, propertyfile, depend, antlr, telnet, csc, | |||
| ilasm, transform, javah | |||
| ilasm, transform, javah, several clearcase tasks | |||
| * Added output attribute to <java>. | |||
| @@ -0,0 +1,259 @@ | |||
| <html> | |||
| <head> | |||
| <meta http-equiv="Content-Language" content="en-us"> | |||
| <title>Ant</title> | |||
| </head> | |||
| <body> | |||
| <hr> | |||
| <h2><a name="optionaltasks">Optional tasks</a></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> | |||
| </ul> | |||
| <hr> | |||
| <h2><a name="cccheckin">CCCheckin</a></h2> | |||
| <h3>Description</h3> | |||
| Task to perform a Checkin 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>viewpath</td> | |||
| <td>Path to the ClearCase view file or directory that the command | |||
| will operate on</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> | |||
| <td>nowarn</td> | |||
| <td>Suppress warning messages</td> | |||
| <td>No</td> | |||
| <tr> | |||
| <tr> | |||
| <td>preservetime</td> | |||
| <td>Preserve the modification time</td> | |||
| <td>No</td> | |||
| <tr> | |||
| <tr> | |||
| <td>keepcopy</td> | |||
| <td>Keeps a copy of the file with a .keep extension</td> | |||
| <td>No</td> | |||
| <tr> | |||
| <tr> | |||
| <td>identical</td> | |||
| <td>Allows the file to be checked in even if it is identical | |||
| to the original</td> | |||
| <td>No</td> | |||
| <tr> | |||
| </table> | |||
| <h3>Examples</h3> | |||
| <blockquote> | |||
| <pre> | |||
| <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>. | |||
| 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. | |||
| <h3>Parameters</h3> | |||
| <table border="1" cellpadding="2" cellspacing="0"> | |||
| <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>reserved</td> | |||
| <td>Specifies whether to check out the file as reserved or not</td> | |||
| <td>Yes</td> | |||
| <tr> | |||
| <tr> | |||
| <td>out</td> | |||
| <td>Creates a writable file under a different filename</td> | |||
| <td>No</td> | |||
| <tr> | |||
| <tr> | |||
| <td>nodata</td> | |||
| <td>Checks out the file but does not create an editable file | |||
| containing its data</td> | |||
| <td>No</td> | |||
| <tr> | |||
| <tr> | |||
| <td>branch</td> | |||
| <td>Specify a branch to check out the file to</td> | |||
| <td>No</td> | |||
| <tr> | |||
| <tr> | |||
| <td>version</td> | |||
| <td>Allows checkout of a version other than main latest</td> | |||
| <td>No</td> | |||
| <tr> | |||
| <tr> | |||
| <td>nowarn</td> | |||
| <td>Suppress warning messages</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> | |||
| <h3>Examples</h3> | |||
| <blockquote> | |||
| <pre> | |||
| <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 | |||
| ClearCase as a comment.</p> | |||
| <hr> | |||
| <h2><a name="ccuncheckout">CCUnCheckout</a></h2> | |||
| <h3>Description</h3> | |||
| Task to perform a UnCheckout 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>viewpath</td> | |||
| <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 | |||
| extension or not</td> | |||
| <td>No</td> | |||
| <tr> | |||
| </table> | |||
| <h3>Examples</h3> | |||
| <blockquote> | |||
| <pre> | |||
| <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>. | |||
| 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. | |||
| <h3>Parameters</h3> | |||
| <table border="1" cellpadding="2" cellspacing="0"> | |||
| <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>graphical</td> | |||
| <td>Displays a graphical dialog during the update</td> | |||
| <td>No</td> | |||
| <tr> | |||
| <tr> | |||
| <td>log</td> | |||
| <td>Specifies a log file for ClearCase to write to</td> | |||
| <td>No</td> | |||
| <tr> | |||
| <tr> | |||
| <td>overwrite</td> | |||
| <td>Specifies whether to overwrite hijacked files or not</td> | |||
| <td>No</td> | |||
| <tr> | |||
| <tr> | |||
| <td>rename</td> | |||
| <td>Specifies that hijacked files should be renamed with a .keep extension</td> | |||
| <td>No</td> | |||
| <tr> | |||
| <tr> | |||
| <td>currenttime</td> | |||
| <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 | |||
| specified.</td> | |||
| <td>No</td> | |||
| <tr> | |||
| </table> | |||
| <h3>Examples</h3> | |||
| <blockquote> | |||
| <pre> | |||
| <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 | |||
| time will be set to the current time.</p> | |||
| </body> | |||
| </html> | |||
| @@ -4563,6 +4563,7 @@ it had been located at <code>htdocs/manual/ChangeLog.txt</code>.</p> | |||
| <li><a href="dotnet.html">.NET Tasks</a></li> | |||
| <li><a href="antlr.html">ANTLR</a></li> | |||
| <li><a href="#cab">Cab</a></li> | |||
| <li><a href="clearcase.html">Clearcase Tasks</a></li> | |||
| <li><a href="ejb.html">EJB Tasks</a></li> | |||
| <li><a href="#ftp">FTP</a></li> | |||
| <li><a href="javacc.html">JavaCC</a></li> | |||
| @@ -82,6 +82,10 @@ p4sync=org.apache.tools.ant.taskdefs.optional.perforce.P4Sync | |||
| p4edit=org.apache.tools.ant.taskdefs.optional.perforce.P4Edit | |||
| p4submit=org.apache.tools.ant.taskdefs.optional.perforce.P4Submit | |||
| javah=org.apache.tools.ant.taskdefs.optional.Javah | |||
| 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 | |||
| # deprecated ant tasks (kept for back compatibility) | |||
| javadoc2=org.apache.tools.ant.taskdefs.Javadoc | |||
| @@ -0,0 +1,371 @@ | |||
| /* | |||
| * The Apache Software License, Version 1.1 | |||
| * | |||
| * Copyright (c) 2000 The Apache Software Foundation. All rights | |||
| * reserved. | |||
| * | |||
| * Redistribution and use in source and binary forms, with or without | |||
| * modification, are permitted provided that the following conditions | |||
| * are met: | |||
| * | |||
| * 1. Redistributions of source code must retain the above copyright | |||
| * notice, this list of conditions and the following disclaimer. | |||
| * | |||
| * 2. Redistributions in binary form must reproduce the above copyright | |||
| * notice, this list of conditions and the following disclaimer in | |||
| * the documentation and/or other materials provided with the | |||
| * distribution. | |||
| * | |||
| * 3. The end-user documentation included with the redistribution, if | |||
| * any, must include the following acknowlegement: | |||
| * "This product includes software developed by the | |||
| * Apache Software Foundation (http://www.apache.org/)." | |||
| * Alternately, this acknowlegement may appear in the software itself, | |||
| * if and wherever such third-party acknowlegements normally appear. | |||
| * | |||
| * 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
| * Foundation" must not be used to endorse or promote products derived | |||
| * from this software without prior written permission. For written | |||
| * permission, please contact apache@apache.org. | |||
| * | |||
| * 5. Products derived from this software may not be called "Apache" | |||
| * nor may "Apache" appear in their names without prior written | |||
| * permission of the Apache Group. | |||
| * | |||
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
| * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
| * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
| * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
| * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
| * SUCH DAMAGE. | |||
| * ==================================================================== | |||
| * | |||
| * This software consists of voluntary contributions made by many | |||
| * individuals on behalf of the Apache Software Foundation. For more | |||
| * information on the Apache Software Foundation, please see | |||
| * <http://www.apache.org/>. | |||
| */ | |||
| package org.apache.tools.ant.taskdefs.optional.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 Checkin 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>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>nowarn</td> | |||
| * <td>Suppress warning messages</td> | |||
| * <td>No</td> | |||
| * <tr> | |||
| * <tr> | |||
| * <td>preservetime</td> | |||
| * <td>Preserve the modification time</td> | |||
| * <td>No</td> | |||
| * <tr> | |||
| * <tr> | |||
| * <td>keepcopy</td> | |||
| * <td>Keeps a copy of the file with a .keep extension</td> | |||
| * <td>No</td> | |||
| * <tr> | |||
| * <tr> | |||
| * <td>identical</td> | |||
| * <td>Allows the file to be checked in even if it is identical to the original</td> | |||
| * <td>No</td> | |||
| * <tr> | |||
| * </table> | |||
| * | |||
| * @author Curtis White | |||
| */ | |||
| public class CCCheckin extends ClearCase { | |||
| private String m_Comment = null; | |||
| private String m_Cfile = null; | |||
| private boolean m_Nwarn = false; | |||
| private boolean m_Ptime = false; | |||
| private boolean m_Keep = false; | |||
| private boolean m_Identical = true; | |||
| /** | |||
| * 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_CHECKIN); | |||
| 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 (getNoWarn()) { | |||
| // -nwarn | |||
| cmd.createArgument().setValue(FLAG_NOWARN); | |||
| } | |||
| if (getPreserveTime()) { | |||
| // -ptime | |||
| cmd.createArgument().setValue(FLAG_PRESERVETIME); | |||
| } | |||
| if (getKeepCopy()) { | |||
| // -keep | |||
| cmd.createArgument().setValue(FLAG_KEEPCOPY); | |||
| } | |||
| if (getIdentical()) { | |||
| // -identical | |||
| cmd.createArgument().setValue(FLAG_IDENTICAL); | |||
| } | |||
| // viewpath | |||
| cmd.createArgument().setValue(getViewPath()); | |||
| } | |||
| /** | |||
| * 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 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 preservetime flag | |||
| * | |||
| * @param ptime the status to set the flag to | |||
| */ | |||
| public void setPreserveTime(boolean ptime) { | |||
| m_Ptime = ptime; | |||
| } | |||
| /** | |||
| * Get preservetime flag status | |||
| * | |||
| * @return boolean containing status of preservetime flag | |||
| */ | |||
| public boolean getPreserveTime() { | |||
| return m_Ptime; | |||
| } | |||
| /** | |||
| * Set the keepcopy flag | |||
| * | |||
| * @param keep the status to set the flag to | |||
| */ | |||
| public void setKeepCopy(boolean keep) { | |||
| m_Keep = keep; | |||
| } | |||
| /** | |||
| * Get keepcopy flag status | |||
| * | |||
| * @return boolean containing status of keepcopy flag | |||
| */ | |||
| public boolean getKeepCopy() { | |||
| return m_Keep; | |||
| } | |||
| /** | |||
| * 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; | |||
| } | |||
| /** | |||
| * 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"; | |||
| /** | |||
| * -nwarn flag -- suppresses warning messages | |||
| */ | |||
| public static final String FLAG_NOWARN = "-nwarn"; | |||
| /** | |||
| * -ptime flag -- preserves the modification time | |||
| */ | |||
| public static final String FLAG_PRESERVETIME = "-ptime"; | |||
| /** | |||
| * -keep flag -- keeps a copy of the file with a .keep extension | |||
| */ | |||
| public static final String FLAG_KEEPCOPY = "-keep"; | |||
| /** | |||
| * -identical flag -- allows the file to be checked in even if it is identical to the original | |||
| */ | |||
| public static final String FLAG_IDENTICAL = "-identical"; | |||
| } | |||
| @@ -0,0 +1,483 @@ | |||
| /* | |||
| * The Apache Software License, Version 1.1 | |||
| * | |||
| * Copyright (c) 2000 The Apache Software Foundation. All rights | |||
| * reserved. | |||
| * | |||
| * Redistribution and use in source and binary forms, with or without | |||
| * modification, are permitted provided that the following conditions | |||
| * are met: | |||
| * | |||
| * 1. Redistributions of source code must retain the above copyright | |||
| * notice, this list of conditions and the following disclaimer. | |||
| * | |||
| * 2. Redistributions in binary form must reproduce the above copyright | |||
| * notice, this list of conditions and the following disclaimer in | |||
| * the documentation and/or other materials provided with the | |||
| * distribution. | |||
| * | |||
| * 3. The end-user documentation included with the redistribution, if | |||
| * any, must include the following acknowlegement: | |||
| * "This product includes software developed by the | |||
| * Apache Software Foundation (http://www.apache.org/)." | |||
| * Alternately, this acknowlegement may appear in the software itself, | |||
| * if and wherever such third-party acknowlegements normally appear. | |||
| * | |||
| * 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
| * Foundation" must not be used to endorse or promote products derived | |||
| * from this software without prior written permission. For written | |||
| * permission, please contact apache@apache.org. | |||
| * | |||
| * 5. Products derived from this software may not be called "Apache" | |||
| * nor may "Apache" appear in their names without prior written | |||
| * permission of the Apache Group. | |||
| * | |||
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
| * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
| * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
| * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
| * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
| * SUCH DAMAGE. | |||
| * ==================================================================== | |||
| * | |||
| * This software consists of voluntary contributions made by many | |||
| * individuals on behalf of the Apache Software Foundation. For more | |||
| * information on the Apache Software Foundation, please see | |||
| * <http://www.apache.org/>. | |||
| */ | |||
| package org.apache.tools.ant.taskdefs.optional.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 Checkout command to ClearCase. | |||
| * <p> | |||
| * The following attributes are interpretted: | |||
| * <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>reserved</td> | |||
| * <td>Specifies whether to check out the file as reserved or not</td> | |||
| * <td>Yes</td> | |||
| * <tr> | |||
| * <tr> | |||
| * <td>out</td> | |||
| * <td>Creates a writable file under a different filename</td> | |||
| * <td>No</td> | |||
| * <tr> | |||
| * <tr> | |||
| * <td>nodata</td> | |||
| * <td>Checks out the file but does not create an editable file containing its data</td> | |||
| * <td>No</td> | |||
| * <tr> | |||
| * <tr> | |||
| * <td>branch</td> | |||
| * <td>Specify a branch to check out the file to</td> | |||
| * <td>No</td> | |||
| * <tr> | |||
| * <tr> | |||
| * <td>version</td> | |||
| * <td>Allows checkout of a version other than main latest</td> | |||
| * <td>No</td> | |||
| * <tr> | |||
| * <tr> | |||
| * <td>nowarn</td> | |||
| * <td>Suppress warning messages</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 CCCheckout extends ClearCase { | |||
| private boolean m_Reserved = true; | |||
| private String m_Out = null; | |||
| private boolean m_Ndata = false; | |||
| private String m_Branch = null; | |||
| private boolean m_Version = false; | |||
| private boolean m_Nwarn = false; | |||
| 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; | |||
| // 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 checkout [options...] [viewpath ...] | |||
| // as specified in the CLEARTOOL.EXE help | |||
| commandLine.setExecutable(getClearToolCommand()); | |||
| commandLine.createArgument().setValue(COMMAND_CHECKOUT); | |||
| 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) { | |||
| // ClearCase items | |||
| if (getReserved()) { | |||
| // -reserved | |||
| cmd.createArgument().setValue(FLAG_RESERVED); | |||
| } else { | |||
| // -unreserved | |||
| cmd.createArgument().setValue(FLAG_UNRESERVED); | |||
| } | |||
| if (getOut() != null) { | |||
| // -out | |||
| getOutCommand(cmd); | |||
| } else { | |||
| if (getNoData()) { | |||
| // -ndata | |||
| cmd.createArgument().setValue(FLAG_NODATA); | |||
| } | |||
| } | |||
| if (getBranch() != null) { | |||
| // -branch | |||
| getBranchCommand(cmd); | |||
| } else { | |||
| if (getVersion()) { | |||
| // -version | |||
| cmd.createArgument().setValue(FLAG_VERSION); | |||
| } | |||
| } | |||
| if (getNoWarn()) { | |||
| // -nwarn | |||
| cmd.createArgument().setValue(FLAG_NOWARN); | |||
| } | |||
| if (getComment() != null) { | |||
| // -c | |||
| getCommentCommand(cmd); | |||
| } else { | |||
| if (getCommentFile() != null) { | |||
| // -cfile | |||
| getCommentFileCommand(cmd); | |||
| } else { | |||
| cmd.createArgument().setValue(FLAG_NOCOMMENT); | |||
| } | |||
| } | |||
| // viewpath | |||
| cmd.createArgument().setValue(getViewPath()); | |||
| } | |||
| /** | |||
| * Set reserved flag status | |||
| * | |||
| * @param reserved the status to set the flag to | |||
| */ | |||
| public void setReserved(boolean reserved) { | |||
| m_Reserved = reserved; | |||
| } | |||
| /** | |||
| * Get reserved flag status | |||
| * | |||
| * @return boolean containing status of reserved flag | |||
| */ | |||
| public boolean getReserved() { | |||
| return m_Reserved; | |||
| } | |||
| /** | |||
| * Set out file | |||
| * | |||
| * @param outf the path to the out file | |||
| */ | |||
| public void setOut(String outf) { | |||
| m_Out = outf; | |||
| } | |||
| /** | |||
| * Get out file | |||
| * | |||
| * @return String containing the path to the out file | |||
| */ | |||
| public String getOut() { | |||
| return m_Out; | |||
| } | |||
| /** | |||
| * Set the nodata flag | |||
| * | |||
| * @param ndata the status to set the flag to | |||
| */ | |||
| public void setNoData(boolean ndata) { | |||
| m_Ndata = ndata; | |||
| } | |||
| /** | |||
| * Get nodata flag status | |||
| * | |||
| * @return boolean containing status of ndata flag | |||
| */ | |||
| public boolean getNoData() { | |||
| return m_Ndata; | |||
| } | |||
| /** | |||
| * Set branch name | |||
| * | |||
| * @param branch the name of the branch | |||
| */ | |||
| public void setBranch(String branch) { | |||
| m_Branch = branch; | |||
| } | |||
| /** | |||
| * Get branch name | |||
| * | |||
| * @return String containing the name of the branch | |||
| */ | |||
| public String getBranch() { | |||
| return m_Branch; | |||
| } | |||
| /** | |||
| * Set the version flag | |||
| * | |||
| * @param version the status to set the flag to | |||
| */ | |||
| public void setVersion(boolean version) { | |||
| m_Version = version; | |||
| } | |||
| /** | |||
| * Get version flag status | |||
| * | |||
| * @return boolean containing status of version flag | |||
| */ | |||
| public boolean getVersion() { | |||
| return m_Version; | |||
| } | |||
| /** | |||
| * 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 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 'out' command | |||
| * | |||
| * @return the 'out' command if the attribute was specified, otherwise an empty string | |||
| * | |||
| * @param CommandLine containing the command line string with or without the out flag and path appended | |||
| */ | |||
| private void getOutCommand(Commandline cmd) { | |||
| if (getOut() != 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_OUT); | |||
| cmd.createArgument().setValue(getOut()); | |||
| } | |||
| } | |||
| /** | |||
| * Get the 'branch' command | |||
| * | |||
| * @return the 'branch' command if the attribute was specified, otherwise an empty string | |||
| * | |||
| * @param CommandLine containing the command line string with or without the branch flag and name appended | |||
| */ | |||
| private void getBranchCommand(Commandline cmd) { | |||
| if (getBranch() != 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_BRANCH); | |||
| cmd.createArgument().setValue(getBranch()); | |||
| } | |||
| } | |||
| /** | |||
| * 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 'cfile' command | |||
| * | |||
| * @return the 'cfile' command if the attribute was specified, otherwise an empty string | |||
| * | |||
| * @param CommandLine containing the command line string with or without the cfile 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()); | |||
| } | |||
| } | |||
| /** | |||
| * -reserved flag -- check out the file as reserved | |||
| */ | |||
| public static final String FLAG_RESERVED = "-reserved"; | |||
| /** | |||
| * -reserved flag -- check out the file as unreserved | |||
| */ | |||
| public static final String FLAG_UNRESERVED = "-unreserved"; | |||
| /** | |||
| * -out flag -- create a writable file under a different filename | |||
| */ | |||
| public static final String FLAG_OUT = "-out"; | |||
| /** | |||
| * -ndata flag -- checks out the file but does not create an editable file containing its data | |||
| */ | |||
| public static final String FLAG_NODATA = "-ndata"; | |||
| /** | |||
| * -branch flag -- checks out the file on a specified branch | |||
| */ | |||
| public static final String FLAG_BRANCH = "-branch"; | |||
| /** | |||
| * -version flag -- allows checkout of a version that is not main latest | |||
| */ | |||
| public static final String FLAG_VERSION = "-version"; | |||
| /** | |||
| * -nwarn flag -- suppresses warning messages | |||
| */ | |||
| public static final String FLAG_NOWARN = "-nwarn"; | |||
| /** | |||
| * -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,168 @@ | |||
| /* | |||
| * The Apache Software License, Version 1.1 | |||
| * | |||
| * Copyright (c) 2000 The Apache Software Foundation. All rights | |||
| * reserved. | |||
| * | |||
| * Redistribution and use in source and binary forms, with or without | |||
| * modification, are permitted provided that the following conditions | |||
| * are met: | |||
| * | |||
| * 1. Redistributions of source code must retain the above copyright | |||
| * notice, this list of conditions and the following disclaimer. | |||
| * | |||
| * 2. Redistributions in binary form must reproduce the above copyright | |||
| * notice, this list of conditions and the following disclaimer in | |||
| * the documentation and/or other materials provided with the | |||
| * distribution. | |||
| * | |||
| * 3. The end-user documentation included with the redistribution, if | |||
| * any, must include the following acknowlegement: | |||
| * "This product includes software developed by the | |||
| * Apache Software Foundation (http://www.apache.org/)." | |||
| * Alternately, this acknowlegement may appear in the software itself, | |||
| * if and wherever such third-party acknowlegements normally appear. | |||
| * | |||
| * 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
| * Foundation" must not be used to endorse or promote products derived | |||
| * from this software without prior written permission. For written | |||
| * permission, please contact apache@apache.org. | |||
| * | |||
| * 5. Products derived from this software may not be called "Apache" | |||
| * nor may "Apache" appear in their names without prior written | |||
| * permission of the Apache Group. | |||
| * | |||
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
| * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
| * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
| * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
| * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
| * SUCH DAMAGE. | |||
| * ==================================================================== | |||
| * | |||
| * This software consists of voluntary contributions made by many | |||
| * individuals on behalf of the Apache Software Foundation. For more | |||
| * information on the Apache Software Foundation, please see | |||
| * <http://www.apache.org/>. | |||
| */ | |||
| package org.apache.tools.ant.taskdefs.optional.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 UnCheckout command to ClearCase. | |||
| * <p> | |||
| * The following attributes are interpretted: | |||
| * <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>keepcopy</td> | |||
| * <td>Specifies whether to keep a copy of the file with a .keep extension or not</td> | |||
| * <td>No</td> | |||
| * <tr> | |||
| * </table> | |||
| * | |||
| * @author Curtis White | |||
| */ | |||
| public class CCUnCheckout extends ClearCase { | |||
| private boolean m_Keep = 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 uncheckout [options...] [viewpath ...] | |||
| // as specified in the CLEARTOOL.EXE help | |||
| commandLine.setExecutable(getClearToolCommand()); | |||
| commandLine.createArgument().setValue(COMMAND_UNCHECKOUT); | |||
| 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) { | |||
| // ClearCase items | |||
| if (getKeepCopy()) { | |||
| // -keep | |||
| cmd.createArgument().setValue(FLAG_KEEPCOPY); | |||
| } else { | |||
| // -rm | |||
| cmd.createArgument().setValue(FLAG_RM); | |||
| } | |||
| // viewpath | |||
| cmd.createArgument().setValue(getViewPath()); | |||
| } | |||
| /** | |||
| * Set keepcopy flag status | |||
| * | |||
| * @param keep the status to set the flag to | |||
| */ | |||
| public void setKeepCopy(boolean keep) { | |||
| m_Keep = keep; | |||
| } | |||
| /** | |||
| * Get keepcopy flag status | |||
| * | |||
| * @return boolean containing status of keep flag | |||
| */ | |||
| public boolean getKeepCopy() { | |||
| return m_Keep; | |||
| } | |||
| /** | |||
| * -keep flag -- keep a copy of the file with .keep extension | |||
| */ | |||
| public static final String FLAG_KEEPCOPY = "-keep"; | |||
| /** | |||
| * -rm flag -- remove the copy of the file | |||
| */ | |||
| public static final String FLAG_RM = "-rm"; | |||
| } | |||
| @@ -0,0 +1,355 @@ | |||
| /* | |||
| * The Apache Software License, Version 1.1 | |||
| * | |||
| * Copyright (c) 2000 The Apache Software Foundation. All rights | |||
| * reserved. | |||
| * | |||
| * Redistribution and use in source and binary forms, with or without | |||
| * modification, are permitted provided that the following conditions | |||
| * are met: | |||
| * | |||
| * 1. Redistributions of source code must retain the above copyright | |||
| * notice, this list of conditions and the following disclaimer. | |||
| * | |||
| * 2. Redistributions in binary form must reproduce the above copyright | |||
| * notice, this list of conditions and the following disclaimer in | |||
| * the documentation and/or other materials provided with the | |||
| * distribution. | |||
| * | |||
| * 3. The end-user documentation included with the redistribution, if | |||
| * any, must include the following acknowlegement: | |||
| * "This product includes software developed by the | |||
| * Apache Software Foundation (http://www.apache.org/)." | |||
| * Alternately, this acknowlegement may appear in the software itself, | |||
| * if and wherever such third-party acknowlegements normally appear. | |||
| * | |||
| * 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
| * Foundation" must not be used to endorse or promote products derived | |||
| * from this software without prior written permission. For written | |||
| * permission, please contact apache@apache.org. | |||
| * | |||
| * 5. Products derived from this software may not be called "Apache" | |||
| * nor may "Apache" appear in their names without prior written | |||
| * permission of the Apache Group. | |||
| * | |||
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
| * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
| * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
| * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
| * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
| * SUCH DAMAGE. | |||
| * ==================================================================== | |||
| * | |||
| * This software consists of voluntary contributions made by many | |||
| * individuals on behalf of the Apache Software Foundation. For more | |||
| * information on the Apache Software Foundation, please see | |||
| * <http://www.apache.org/>. | |||
| */ | |||
| package org.apache.tools.ant.taskdefs.optional.clearcase; | |||
| import org.apache.tools.ant.*; | |||
| import org.apache.tools.ant.types.Commandline; | |||
| import org.apache.tools.ant.types.Path; | |||
| import java.io.File; | |||
| import java.lang.System; | |||
| /** | |||
| * Task to perform an Update command to ClearCase. | |||
| * <p> | |||
| * The following attributes are interpretted: | |||
| * <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>graphical</td> | |||
| * <td>Displays a graphical dialog during the update</td> | |||
| * <td>No</td> | |||
| * <tr> | |||
| * <tr> | |||
| * <td>log</td> | |||
| * <td>Specifies a log file for ClearCase to write to</td> | |||
| * <td>No</td> | |||
| * <tr> | |||
| * <tr> | |||
| * <td>overwrite</td> | |||
| * <td>Specifies whether to overwrite hijacked files or not</td> | |||
| * <td>No</td> | |||
| * <tr> | |||
| * <tr> | |||
| * <td>rename</td> | |||
| * <td>Specifies that hijacked files should be renamed with a .keep extension</td> | |||
| * <td>No</td> | |||
| * <tr> | |||
| * <tr> | |||
| * <td>currenttime</td> | |||
| * <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 specified.</td> | |||
| * <td>No</td> | |||
| * <tr> | |||
| * </table> | |||
| * | |||
| * @author Curtis White | |||
| */ | |||
| public class CCUpdate extends ClearCase { | |||
| private boolean m_Graphical = false; | |||
| private boolean m_Overwrite = false; | |||
| private boolean m_Rename = false; | |||
| private boolean m_Ctime = false; | |||
| private boolean m_Ptime = false; | |||
| private String m_Log = 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 update [options...] [viewpath ...] | |||
| // as specified in the CLEARTOOL.EXE help | |||
| commandLine.setExecutable(getClearToolCommand()); | |||
| commandLine.createArgument().setValue(COMMAND_UPDATE); | |||
| // 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 (getGraphical()) { | |||
| // -graphical | |||
| cmd.createArgument().setValue(FLAG_GRAPHICAL); | |||
| } else { | |||
| if (getOverwrite()) { | |||
| // -overwrite | |||
| cmd.createArgument().setValue(FLAG_OVERWRITE); | |||
| } else { | |||
| if (getRename()) { | |||
| // -rename | |||
| cmd.createArgument().setValue(FLAG_RENAME); | |||
| } else { | |||
| // -noverwrite | |||
| cmd.createArgument().setValue(FLAG_NOVERWRITE); | |||
| } | |||
| } | |||
| if (getCurrentTime()) { | |||
| // -ctime | |||
| cmd.createArgument().setValue(FLAG_CURRENTTIME); | |||
| } else { | |||
| if (getPreserveTime()) { | |||
| // -ptime | |||
| cmd.createArgument().setValue(FLAG_PRESERVETIME); | |||
| } | |||
| } | |||
| // -log logname | |||
| getLogCommand(cmd); | |||
| } | |||
| // viewpath | |||
| cmd.createArgument().setValue(getViewPath()); | |||
| } | |||
| /** | |||
| * Set graphical flag status | |||
| * | |||
| * @param graphical the status to set the flag to | |||
| */ | |||
| public void setGraphical(boolean graphical) { | |||
| m_Graphical = graphical; | |||
| } | |||
| /** | |||
| * Get graphical flag status | |||
| * | |||
| * @return boolean containing status of graphical flag | |||
| */ | |||
| public boolean getGraphical() { | |||
| return m_Graphical; | |||
| } | |||
| /** | |||
| * Set overwrite hijacked files status | |||
| * | |||
| * @param ow the status to set the flag to | |||
| */ | |||
| public void setOverwrite(boolean ow) { | |||
| m_Overwrite = ow; | |||
| } | |||
| /** | |||
| * Get overwrite hijacked files status | |||
| * | |||
| * @return boolean containing status of overwrite flag | |||
| */ | |||
| public boolean getOverwrite() { | |||
| return m_Overwrite; | |||
| } | |||
| /** | |||
| * Set rename hijacked files status | |||
| * | |||
| * @param ren the status to set the flag to | |||
| */ | |||
| public void setRename(boolean ren) { | |||
| m_Rename = ren; | |||
| } | |||
| /** | |||
| * Get rename hijacked files status | |||
| * | |||
| * @return boolean containing status of rename flag | |||
| */ | |||
| public boolean getRename() { | |||
| return m_Rename; | |||
| } | |||
| /** | |||
| * Set modified time based on current time | |||
| * | |||
| * @param ct the status to set the flag to | |||
| */ | |||
| public void setCurrentTime(boolean ct) { | |||
| m_Ctime = ct; | |||
| } | |||
| /** | |||
| * Get current time status | |||
| * | |||
| * @return boolean containing status of current time flag | |||
| */ | |||
| public boolean getCurrentTime() { | |||
| return m_Ctime; | |||
| } | |||
| /** | |||
| * Preserve modified time from the VOB time | |||
| * | |||
| * @param pt the status to set the flag to | |||
| */ | |||
| public void setPreserveTime(boolean pt) { | |||
| m_Ptime = pt; | |||
| } | |||
| /** | |||
| * Get preserve time status | |||
| * | |||
| * @return boolean containing status of preserve time flag | |||
| */ | |||
| public boolean getPreserveTime() { | |||
| return m_Ptime; | |||
| } | |||
| /** | |||
| * Set log file where cleartool can record the status of the command | |||
| * | |||
| * @param log the path to the log file | |||
| */ | |||
| public void setLog(String log) { | |||
| m_Log = log; | |||
| } | |||
| /** | |||
| * Get log file | |||
| * | |||
| * @return String containing the path to the log file | |||
| */ | |||
| public String getLog() { | |||
| return m_Log; | |||
| } | |||
| /** | |||
| * Get the 'log' command | |||
| * | |||
| * @return the 'log' command if the attribute was specified, otherwise an empty string | |||
| * | |||
| * @param CommandLine containing the command line string with or without the log flag and path appended | |||
| */ | |||
| private void getLogCommand(Commandline cmd) { | |||
| if (getLog() == 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_LOG); | |||
| cmd.createArgument().setValue(getLog()); | |||
| } | |||
| } | |||
| /** | |||
| * -graphical flag -- display graphical dialog during update operation | |||
| */ | |||
| public static final String FLAG_GRAPHICAL = "-graphical"; | |||
| /** | |||
| * -log flag -- file to log status to | |||
| */ | |||
| public static final String FLAG_LOG = "-log"; | |||
| /** | |||
| * -overwrite flag -- overwrite hijacked files | |||
| */ | |||
| public static final String FLAG_OVERWRITE = "-overwrite"; | |||
| /** | |||
| * -noverwrite flag -- do not overwrite hijacked files | |||
| */ | |||
| public static final String FLAG_NOVERWRITE = "-noverwrite"; | |||
| /** | |||
| * -rename flag -- rename hijacked files with .keep extension | |||
| */ | |||
| public static final String FLAG_RENAME = "-rename"; | |||
| /** | |||
| * -ctime flag -- modified time is written as the current time | |||
| */ | |||
| public static final String FLAG_CURRENTTIME = "-ctime"; | |||
| /** | |||
| * -ptime flag -- modified time is written as the VOB time | |||
| */ | |||
| public static final String FLAG_PRESERVETIME = "-ptime"; | |||
| } | |||
| @@ -0,0 +1,163 @@ | |||
| /* | |||
| * The Apache Software License, Version 1.1 | |||
| * | |||
| * Copyright (c) 2000 The Apache Software Foundation. All rights | |||
| * reserved. | |||
| * | |||
| * Redistribution and use in source and binary forms, with or without | |||
| * modification, are permitted provided that the following conditions | |||
| * are met: | |||
| * | |||
| * 1. Redistributions of source code must retain the above copyright | |||
| * notice, this list of conditions and the following disclaimer. | |||
| * | |||
| * 2. Redistributions in binary form must reproduce the above copyright | |||
| * notice, this list of conditions and the following disclaimer in | |||
| * the documentation and/or other materials provided with the | |||
| * distribution. | |||
| * | |||
| * 3. The end-user documentation included with the redistribution, if | |||
| * any, must include the following acknowlegement: | |||
| * "This product includes software developed by the | |||
| * Apache Software Foundation (http://www.apache.org/)." | |||
| * Alternately, this acknowlegement may appear in the software itself, | |||
| * if and wherever such third-party acknowlegements normally appear. | |||
| * | |||
| * 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
| * Foundation" must not be used to endorse or promote products derived | |||
| * from this software without prior written permission. For written | |||
| * permission, please contact apache@apache.org. | |||
| * | |||
| * 5. Products derived from this software may not be called "Apache" | |||
| * nor may "Apache" appear in their names without prior written | |||
| * permission of the Apache Group. | |||
| * | |||
| * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
| * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
| * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
| * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
| * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
| * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
| * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
| * SUCH DAMAGE. | |||
| * ==================================================================== | |||
| * | |||
| * This software consists of voluntary contributions made by many | |||
| * individuals on behalf of the Apache Software Foundation. For more | |||
| * information on the Apache Software Foundation, please see | |||
| * <http://www.apache.org/>. | |||
| */ | |||
| package org.apache.tools.ant.taskdefs.optional.clearcase; | |||
| import org.apache.tools.ant.*; | |||
| import org.apache.tools.ant.taskdefs.Execute; | |||
| import org.apache.tools.ant.taskdefs.LogStreamHandler; | |||
| import org.apache.tools.ant.types.Commandline; | |||
| import java.io.File; | |||
| /** | |||
| * A base class for creating tasks for executing commands on ClearCase. | |||
| * <p> | |||
| * The class extends the 'exec' task as it operates by executing the cleartool program | |||
| * supplied with ClearCase. By default the task expects the cleartool executable to be | |||
| * 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. | |||
| * </p> | |||
| * | |||
| * @author Curtis White | |||
| */ | |||
| public abstract class ClearCase extends Task { | |||
| private String m_ClearToolDir = ""; | |||
| private String m_viewPath = null; | |||
| /** | |||
| * Set the directory where the cleartool executable is located | |||
| * | |||
| * @param dir the directory containing the cleartool executable | |||
| */ | |||
| public final void setClearToolDir(String dir) { | |||
| m_ClearToolDir = project.translatePath(dir); | |||
| } | |||
| /** | |||
| * Builds and returns the command string to execute cleartool | |||
| * | |||
| * @return String containing path to the executable | |||
| */ | |||
| protected final String getClearToolCommand() { | |||
| String toReturn = m_ClearToolDir; | |||
| if ( !toReturn.equals("") && !toReturn.endsWith("/") ) { | |||
| toReturn += "/"; | |||
| } | |||
| toReturn += CLEARTOOL_EXE; | |||
| return toReturn; | |||
| } | |||
| /** | |||
| * Set the path to the item in a clearcase view to operate on | |||
| * | |||
| * @param viewPath Path to the view directory or file | |||
| */ | |||
| public final void setViewPath(String viewPath) { | |||
| m_viewPath = viewPath; | |||
| } | |||
| /** | |||
| * Get the path to the item in a clearcase view | |||
| * | |||
| * @return m_viewPath | |||
| */ | |||
| public String getViewPath() { | |||
| return m_viewPath; | |||
| } | |||
| protected int run(Commandline cmd) { | |||
| try { | |||
| Project aProj = getProject(); | |||
| Execute exe = new Execute(new LogStreamHandler(this, Project.MSG_INFO, Project.MSG_WARN)); | |||
| exe.setAntRun(aProj); | |||
| exe.setWorkingDirectory(aProj.getBaseDir()); | |||
| exe.setCommandline(cmd.getCommandline()); | |||
| return exe.execute(); | |||
| } | |||
| catch (java.io.IOException e) { | |||
| throw new BuildException(e, location); | |||
| } | |||
| } | |||
| /** | |||
| * Constant for the thing to execute | |||
| */ | |||
| private static final String CLEARTOOL_EXE = "cleartool"; | |||
| /** | |||
| * The 'Update' command | |||
| */ | |||
| public static final String COMMAND_UPDATE = "update"; | |||
| /** | |||
| * The 'Checkout' command | |||
| */ | |||
| public static final String COMMAND_CHECKOUT = "checkout"; | |||
| /** | |||
| * The 'Checkin' command | |||
| */ | |||
| public static final String COMMAND_CHECKIN = "checkin"; | |||
| /** | |||
| * The 'UndoCheckout' command | |||
| */ | |||
| public static final String COMMAND_UNCHECKOUT = "uncheckout"; | |||
| } | |||