diff --git a/WHATSNEW b/WHATSNEW
index 6fee6ca98..3ead48d1f 100644
--- a/WHATSNEW
+++ b/WHATSNEW
@@ -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 Does a ClearCase checkin on the file c:/views/viewdir/afile.
+Comment text from the file acomment.txt is added to ClearCase as a comment.
+All warning messages are suppressed. The file is checked in even if it is
+identical to the original. Does a ClearCase checkout on the file c:/views/viewdir/afile.
+It is checked out as reserved on branch called abranch. All
+warning messages are suppressed. A Some comment text is added to
+ClearCase as a comment. Does a ClearCase uncheckout on the file c:/views/viewdir/afile.
+A copy of the file called c:/views/viewdir/afile.keep is kept. Does a ClearCase update on the directory c:/views/viewdir.
+A graphical dialog will be displayed. The output will be logged to
+log.log and it will overwrite any hijacked files. The modified
+time will be set to the current time.
+Optional tasks
+
+
+
+
+CCCheckin
+Description
+Task to perform a Checkin command to ClearCase.
+Parameters
+
+
+
+
+ Attribute
+ Values
+ Required
+
+ viewpath
+ Path to the ClearCase view file or directory that the command
+ will operate on
+ No
+
+
+ comment
+ Specify a comment. Only one of comment or cfile may be used.
+ No
+
+
+ commentfile
+ Specify a file containing a comment. Only one of comment or cfile
+ may be used.
+ No
+
+
+ nowarn
+ Suppress warning messages
+ No
+
+
+ preservetime
+ Preserve the modification time
+ No
+
+
+ keepcopy
+ Keeps a copy of the file with a .keep extension
+ No
+
+
+ identical
+ Allows the file to be checked in even if it is identical
+ to the original
+ No
+
+ Examples
+
+
+
+<cccheckin viewpath="c:/views/viewdir/afile"
+ commentfile="acomment.txt"/>
+ nowarn="true"
+ identical="true"
+
+
+CCCheckout
+Description
+Task to perform a Checkout command to ClearCase.
+Parameters
+
+
+
+
+ Attribute
+ Values
+ Required
+
+ viewpath
+ Path to the ClearCase view file or directory that the command
+ will operate on
+ No
+
+
+ reserved
+ Specifies whether to check out the file as reserved or not
+ Yes
+
+
+ out
+ Creates a writable file under a different filename
+ No
+
+
+ nodata
+ Checks out the file but does not create an editable file
+ containing its data
+ No
+
+
+ branch
+ Specify a branch to check out the file to
+ No
+
+
+ version
+ Allows checkout of a version other than main latest
+ No
+
+
+ nowarn
+ Suppress warning messages
+ No
+
+
+ comment
+ Specify a comment. Only one of comment or cfile may be used.
+ No
+
+
+ commentfile
+ Specify a file containing a comment. Only one of comment or
+ cfile may be used.
+ No
+
+ Examples
+
+
+
+<cccheckout viewpath="c:/views/viewdir/afile"
+ reserved="true"
+ branch="abranch"
+ nowarn="true"
+ comment="Some comment text"/>
+
+
+CCUnCheckout
+Description
+Task to perform a UnCheckout command to ClearCase.
+Parameters
+
+
+
+
+ Attribute
+ Values
+ Required
+
+ viewpath
+ Path to the ClearCase view file or directory that the command
+ will operate on
+ No
+
+
+ keepcopy
+ Specifies whether to keep a copy of the file with a .keep
+ extension or not
+ No
+
+ Examples
+
+
+
+<ccuncheckout viewpath="c:/views/viewdir/afile"
+ keepcopy="true"/>
+
+
+CCUpdate
+Description
+Task to perform an Update command to ClearCase.
+Parameters
+
+
+
+
+ Attribute
+ Values
+ Required
+
+ viewpath
+ Path to the ClearCase view file or directory that the command
+ will operate on
+ No
+
+
+ graphical
+ Displays a graphical dialog during the update
+ No
+
+
+ log
+ Specifies a log file for ClearCase to write to
+ No
+
+
+ overwrite
+ Specifies whether to overwrite hijacked files or not
+ No
+
+
+ rename
+ Specifies that hijacked files should be renamed with a .keep extension
+ No
+
+
+ currenttime
+ Specifies that modification time should be written as the
+ current time. Either currenttime or preservetime can be
+ specified.
+ No
+
+
+ preservetime
+ Specifies that modification time should preserved from the
+ VOB time. Either currenttime or preservetime can be
+ specified.
+ No
+
+ Examples
+
+
+
+<ccupdate viewpath="c:/views/viewdir"
+ graphical="false"
+ log="log.log"
+ overwrite="true"
+ currenttime="true"
+ rename="false"/>
+
+htdocs/manual/ChangeLog.txt
.
+ * The following attributes are interpreted: + *
Attribute | + *Values | + *Required | + *
---|---|---|
viewpath | + *Path to the ClearCase view file or directory that the command will operate on | + *No | + *
comment | + *Specify a comment. Only one of comment or cfile may be used. | + *No | + *
commentfile | + *Specify a file containing a comment. Only one of comment or cfile may be used. | + *No | + *
nowarn | + *Suppress warning messages | + *No | + *
preservetime | + *Preserve the modification time | + *No | + *
keepcopy | + *Keeps a copy of the file with a .keep extension | + *No | + *
identical | + *Allows the file to be checked in even if it is identical to the original | + *No | + *
+ * 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";
+
+}
+
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCCheckout.java b/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCCheckout.java
new file mode 100644
index 000000000..31be966d8
--- /dev/null
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCCheckout.java
@@ -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
+ *
+ * The following attributes are interpretted: + *
Attribute | + *Values | + *Required | + *
---|---|---|
viewpath | + *Path to the ClearCase view file or directory that the command will operate on | + *No | + *
reserved | + *Specifies whether to check out the file as reserved or not | + *Yes | + *
out | + *Creates a writable file under a different filename | + *No | + *
nodata | + *Checks out the file but does not create an editable file containing its data | + *No | + *
branch | + *Specify a branch to check out the file to | + *No | + *
version | + *Allows checkout of a version other than main latest | + *No | + *
nowarn | + *Suppress warning messages | + *No | + *
comment | + *Specify a comment. Only one of comment or cfile may be used. | + *No | + *
commentfile | + *Specify a file containing a comment. Only one of comment or cfile may be used. | + *No | + *
+ * 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";
+
+}
+
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCUnCheckout.java b/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCUnCheckout.java
new file mode 100644
index 000000000..b68f13ce7
--- /dev/null
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCUnCheckout.java
@@ -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
+ *
+ * The following attributes are interpretted: + *
Attribute | + *Values | + *Required | + *
---|---|---|
viewpath | + *Path to the ClearCase view file or directory that the command will operate on | + *No | + *
keepcopy | + *Specifies whether to keep a copy of the file with a .keep extension or not | + *No | + *
+ * 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";
+
+}
+
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCUpdate.java b/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCUpdate.java
new file mode 100644
index 000000000..8def7feb2
--- /dev/null
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCUpdate.java
@@ -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
+ *
+ * The following attributes are interpretted: + *
Attribute | + *Values | + *Required | + *
---|---|---|
viewpath | + *Path to the ClearCase view file or directory that the command will operate on | + *No | + *
graphical | + *Displays a graphical dialog during the update | + *No | + *
log | + *Specifies a log file for ClearCase to write to | + *No | + *
overwrite | + *Specifies whether to overwrite hijacked files or not | + *No | + *
rename | + *Specifies that hijacked files should be renamed with a .keep extension | + *No | + *
currenttime | + *Specifies that modification time should be written as the current time. Either currenttime or preservetime can be specified. | + *No | + *
preservetime | + *Specifies that modification time should preserved from the VOB time. Either currenttime or preservetime can be specified. | + *No | + *
+ * 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";
+
+}
+
diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/ClearCase.java b/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/ClearCase.java
new file mode 100644
index 000000000..1d12412a0
--- /dev/null
+++ b/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/ClearCase.java
@@ -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
+ *
+ * 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. + *
+ *+ * This class provides set and get methods for the 'viewpath' attribute. It + * also contains constants for the flags that can be passed to cleartool. + *
+ * + * @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"; + +} +