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 . diff --git a/docs/clearcase.html b/docs/clearcase.html new file mode 100644 index 000000000..706929bfd --- /dev/null +++ b/docs/clearcase.html @@ -0,0 +1,259 @@ + + + + +Ant + + + + +
+

Optional tasks

+ + +
+

CCCheckin

+

Description

+Task to perform a Checkin command to ClearCase. +

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeValuesRequired
viewpathPath to the ClearCase view file or directory that the command + will operate onNo
commentSpecify a comment. Only one of comment or cfile may be used.No
commentfileSpecify a file containing a comment. Only one of comment or cfile + may be used.No
nowarnSuppress warning messagesNo
preservetimePreserve the modification timeNo
keepcopyKeeps a copy of the file with a .keep extensionNo
identicalAllows the file to be checked in even if it is identical + to the originalNo
+

Examples

+
+
+<cccheckin viewpath="c:/views/viewdir/afile"
+        commentfile="acomment.txt"/>
+        nowarn="true"
+        identical="true"
+
+
+

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.

+
+

CCCheckout

+

Description

+Task to perform a Checkout command to ClearCase. +

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeValuesRequired
viewpathPath to the ClearCase view file or directory that the command + will operate onNo
reservedSpecifies whether to check out the file as reserved or notYes
outCreates a writable file under a different filenameNo
nodataChecks out the file but does not create an editable file + containing its dataNo
branchSpecify a branch to check out the file toNo
versionAllows checkout of a version other than main latestNo
nowarnSuppress warning messagesNo
commentSpecify a comment. Only one of comment or cfile may be used.No
commentfileSpecify 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"/>
+
+
+

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.

+
+

CCUnCheckout

+

Description

+Task to perform a UnCheckout command to ClearCase. +

Parameters

+ + + + + + + + + + + + + + + + +
AttributeValuesRequired
viewpathPath to the ClearCase view file or directory that the command + will operate onNo
keepcopySpecifies whether to keep a copy of the file with a .keep + extension or notNo
+

Examples

+
+
+<ccuncheckout viewpath="c:/views/viewdir/afile"
+        keepcopy="true"/>
+
+
+

Does a ClearCase uncheckout on the file c:/views/viewdir/afile. +A copy of the file called c:/views/viewdir/afile.keep is kept.

+
+

CCUpdate

+

Description

+Task to perform an Update command to ClearCase. +

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeValuesRequired
viewpathPath to the ClearCase view file or directory that the command + will operate onNo
graphicalDisplays a graphical dialog during the updateNo
logSpecifies a log file for ClearCase to write toNo
overwriteSpecifies whether to overwrite hijacked files or notNo
renameSpecifies that hijacked files should be renamed with a .keep extensionNo
currenttimeSpecifies that modification time should be written as the + current time. Either currenttime or preservetime can be + specified.No
preservetimeSpecifies 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"/>
+
+
+

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.

+ + + + diff --git a/docs/index.html b/docs/index.html index 7ae640665..cd808fe07 100644 --- a/docs/index.html +++ b/docs/index.html @@ -4563,6 +4563,7 @@ it had been located at htdocs/manual/ChangeLog.txt.

  • .NET Tasks
  • ANTLR
  • Cab
  • +
  • Clearcase Tasks
  • EJB Tasks
  • FTP
  • JavaCC
  • diff --git a/src/main/org/apache/tools/ant/taskdefs/defaults.properties b/src/main/org/apache/tools/ant/taskdefs/defaults.properties index 8cdff4980..258938e08 100644 --- a/src/main/org/apache/tools/ant/taskdefs/defaults.properties +++ b/src/main/org/apache/tools/ant/taskdefs/defaults.properties @@ -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 diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCCheckin.java b/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCCheckin.java new file mode 100644 index 000000000..c6de9fa34 --- /dev/null +++ b/src/main/org/apache/tools/ant/taskdefs/optional/clearcase/CCCheckin.java @@ -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 + * . + */ + +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. + *

    + * The following attributes are interpreted: + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
    AttributeValuesRequired
    viewpathPath to the ClearCase view file or directory that the command will operate onNo
    commentSpecify a comment. Only one of comment or cfile may be used.No
    commentfileSpecify a file containing a comment. Only one of comment or cfile may be used.No
    nowarnSuppress warning messagesNo
    preservetimePreserve the modification timeNo
    keepcopyKeeps a copy of the file with a .keep extensionNo
    identicalAllows the file to be checked in even if it is identical to the originalNo
    + * + * @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. + *

    + * 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 + * . + */ + +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. + *

    + * The following attributes are interpretted: + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
    AttributeValuesRequired
    viewpathPath to the ClearCase view file or directory that the command will operate onNo
    reservedSpecifies whether to check out the file as reserved or notYes
    outCreates a writable file under a different filenameNo
    nodataChecks out the file but does not create an editable file containing its dataNo
    branchSpecify a branch to check out the file toNo
    versionAllows checkout of a version other than main latestNo
    nowarnSuppress warning messagesNo
    commentSpecify a comment. Only one of comment or cfile may be used.No
    commentfileSpecify a file containing a comment. Only one of comment or cfile may be used.No
    + * + * @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. + *

    + * 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 + * . + */ + +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. + *

    + * The following attributes are interpretted: + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
    AttributeValuesRequired
    viewpathPath to the ClearCase view file or directory that the command will operate onNo
    keepcopySpecifies whether to keep a copy of the file with a .keep extension or notNo
    + * + * @author Curtis White + */ +public class CCUnCheckout extends ClearCase { + private boolean m_Keep = false; + + /** + * Executes the task. + *

    + * 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 + * . + */ + +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. + *

    + * The following attributes are interpretted: + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
    AttributeValuesRequired
    viewpathPath to the ClearCase view file or directory that the command will operate onNo
    graphicalDisplays a graphical dialog during the updateNo
    logSpecifies a log file for ClearCase to write toNo
    overwriteSpecifies whether to overwrite hijacked files or notNo
    renameSpecifies that hijacked files should be renamed with a .keep extensionNo
    currenttimeSpecifies that modification time should be written as the current time. Either currenttime or preservetime can be specified.No
    preservetimeSpecifies that modification time should preserved from the VOB time. Either currenttime or preservetime can be specified.No
    + * + * @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. + *

    + * 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 + * . + */ + +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. + *

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