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