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