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 | * A GUI Frontend: Antidote | ||||
| * New tasks: stylebook, propertyfile, depend, antlr, telnet, csc, | * New tasks: stylebook, propertyfile, depend, antlr, telnet, csc, | ||||
| ilasm, transform, javah | |||||
| ilasm, transform, javah, several clearcase tasks | |||||
| * Added output attribute to <java>. | * 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="dotnet.html">.NET Tasks</a></li> | ||||
| <li><a href="antlr.html">ANTLR</a></li> | <li><a href="antlr.html">ANTLR</a></li> | ||||
| <li><a href="#cab">Cab</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="ejb.html">EJB Tasks</a></li> | ||||
| <li><a href="#ftp">FTP</a></li> | <li><a href="#ftp">FTP</a></li> | ||||
| <li><a href="javacc.html">JavaCC</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 | p4edit=org.apache.tools.ant.taskdefs.optional.perforce.P4Edit | ||||
| p4submit=org.apache.tools.ant.taskdefs.optional.perforce.P4Submit | p4submit=org.apache.tools.ant.taskdefs.optional.perforce.P4Submit | ||||
| javah=org.apache.tools.ant.taskdefs.optional.Javah | 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) | # deprecated ant tasks (kept for back compatibility) | ||||
| javadoc2=org.apache.tools.ant.taskdefs.Javadoc | 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"; | |||||
| } | |||||