Thanks for submitting these tasks. Small point though: - No JDK 1.2+ stuff (List, Iterator, etc...) for now. - No System.out, use log(...)
I would be grateful if you could enter these into bugzilla http://nagoya.apache.org/bugzilla I will take a look at what you did (btw I would have prefered cvs diff -u but I will arrange) If you're adventurous you can check: http://cvs.apache.org/viewcvs.cgi/jakarta-ant/proposal/sandbox/clearcase/ This is some code (not working) that I wrote quickly a long time ago to supposedly provide a better support for clearcase, but I did not continue because obviouslly it did not interest many people and I think it would be better to reuse existing clearcase code like http://www.rational.com/support/downloadcenter/addins/clearcase/plugins/inde x.jsp or http://sourceforge.net/projects/eclipse-ccase Plus now I'm no more a CC user. ----- Original Message ----- From: "Oscar Forero" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Wednesday, October 30, 2002 8:55 PM Subject: Enhance Clear case tasks > Hello, > > My name is Oscar Forero, I am a Java Developer in germany and we are > starting to use Ant in our development enviroment, this week I was ask > to do a change that will involve change a lot of classe, and I try to do > the script with ant. To say it short ... I hit some limitations, like > for example the Clear Case tasks don�t work with file sets, which make > very dificult to do any real work with them, I also see that the Fileset > elements always create a new instance of a DirectoryScanner which mean > that for every task a deepscan wil be performed, which leads to very > poor performance, and that is not possible to use fileset in Replace ... > > To solve this I propose: > > Enhance CC tasks to use Filesets. > Add a setRecyclable property to the Abstract File set, that will reuse a > directory scanner if true. > Add a setFileSetRef property to the MatchingTask class, and use a > reference to a fileset instead of the internal fileset is is set. > > I did this changes and tested in my machine, it works and enhnace the > speed of script that have to perform different tasks on the same file > sets, this also solve the problem that the selection for the check out > probably will not return the same files, this is an example of the kind > of script that will benefit: > > Check out 1000 files > Replace > Check in 1000 files > > > I attached the changed files, I will really appreciate if those changes > are accepted ... or taking into considerations. > > Best regards, > > Oscar Forero. > ---------------------------------------------------------------------------- ---- > /* > * The Apache Software License, Version 1.1 > * > * Copyright (c) 2000,2002 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 [EMAIL PROTECTED] > * > * 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 java.util.Iterator; > import java.util.List; > import org.apache.tools.ant.BuildException; > import org.apache.tools.ant.DirectoryScanner; > import org.apache.tools.ant.Project; > import org.apache.tools.ant.types.Commandline; > import org.apache.tools.ant.types.FileSet; > > > > > /** > * Performs ClearCase checkout. > * > * <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 > * @author Oscar Forero > */ > 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; > > /** > * Check the command line options. > */ > protected void checkOptions(Commandline cmd) { > cmd.createArgument().setValue(COMMAND_CHECKOUT); > // 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()); > } > > /** > * If true, checks out the file as reserved. > * > * @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; > } > > /** > * Creates a writable file under a different filename. > * > * @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; > } > > /** > * If true, checks out the file but does not create an > * editable file containing its data. > * > * @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; > } > > /** > * Specify a branch to check out the file to. > * > * @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; > } > > /** > * If true, allows checkout of a version other than main latest. > * > * @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; > } > > /** > * If true, warning messages are suppressed. > * > * @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; > } > > /** > * Sets the 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; > } > > /** > * Specifies a file containing a comment. > * > * @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"; > > } > > ---------------------------------------------------------------------------- ---- > /* > * The Apache Software License, Version 1.1 > * > * Copyright (c) 2000,2002 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 [EMAIL PROTECTED] > * > * 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.BuildException; > import org.apache.tools.ant.Project; > import org.apache.tools.ant.types.Commandline; > > > > > /** > * Performs ClearCase UnCheckout command. > * > * <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 > * @author Oscar Forero > */ > public class CCUnCheckout extends ClearCase { > private boolean m_Keep = false; > > /** > * Check the command line options. > */ > protected void checkOptions(Commandline cmd) { > cmd.createArgument().setValue(COMMAND_UNCHECKOUT); > // ClearCase items > if (getKeepCopy()) { > // -keep > cmd.createArgument().setValue(FLAG_KEEPCOPY); > } else { > // -rm > cmd.createArgument().setValue(FLAG_RM); > } > > // viewpath > cmd.createArgument().setValue(getViewPath()); > } > > /** > * If true, keep a copy of the file with a .keep extension. > * > * @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"; > > } > > ---------------------------------------------------------------------------- ---- > /* > * The Apache Software License, Version 1.1 > * > * Copyright (c) 2000,2002 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 [EMAIL PROTECTED] > * > * 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.BuildException; > import org.apache.tools.ant.Project; > import org.apache.tools.ant.types.Commandline; > > > > > > /** > * Performs a ClearCase Update command. > * > * <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 > * @author Oscar Forero > */ > 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; > > /** > * Check the command line options. > */ > protected void checkOptions(Commandline cmd) { > cmd.createArgument().setValue(COMMAND_UPDATE); > > // 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()); > } > > /** > * If true, displays a graphical dialog during the update. > * > * @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; > } > > /** > * If true, overwrite hijacked files. > * > * @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; > } > > /** > * If true, hijacked files are renamed with a .keep extension. > * > * @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; > } > > /** > * If true, modification time should be written as the current time. > * Either currenttime or preservetime can be specified. > * > * @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; > } > > /** > * If true, modification time should be preserved from the VOB time. > * Either currenttime or preservetime can be specified. > * > * @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; > } > > /** > * Sets the log file where cleartool records > * 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 > * > * @param cmd 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"; > > } > > ---------------------------------------------------------------------------- ---- > /* > * The Apache Software License, Version 1.1 > * > * Copyright (c) 2000,2002 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 [EMAIL PROTECTED] > * > * 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 java.io.File; > import java.util.Iterator; > import java.util.List; > import java.util.Vector; > > import org.apache.tools.ant.Task; > import org.apache.tools.ant.Project; > import org.apache.tools.ant.BuildException; > import org.apache.tools.ant.DirectoryScanner; > import org.apache.tools.ant.taskdefs.Execute; > import org.apache.tools.ant.taskdefs.LogStreamHandler; > import org.apache.tools.ant.types.Commandline; > import org.apache.tools.ant.types.FileSet; > > > /** > * 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 > * @author Oscar Forero > */ > public abstract class ClearCase extends Task { > private String m_ClearToolDir = ""; > private String m_viewPath = null; > > protected Vector filesets = new Vector(); > protected int verbosity = Project.MSG_VERBOSE; > > /** > * Adds a set of files to copy. > */ > public void addFileset(FileSet set) { > filesets.addElement(set); > } > > /** > * 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; > } > > /** > * Used to force listing of all names of files. > */ > public void setVerbose(boolean verbose) { > if (verbose) { > this.verbosity = Project.MSG_INFO; > } else { > this.verbosity = Project.MSG_VERBOSE; > } > } > > 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); > } > } > > > /** > * Abstract to be defined by Subclasses it will have to determine the Clear > * Case command to execute and the required parameters in every case. > */ > abstract protected void checkOptions(Commandline cmd); > > /** > * Execute an Clear Case Command for a given file. > * <p> > * Builds a command line to execute cleartool and then calls Exec's run method > * to execute the command line. > */ > private void execute(String sFile) { > setViewPath(sFile); > > // build the command line from what we got the format is > // cleartool checkout [options...] [viewpath ...] > // as specified in the CLEARTOOL.EXE help > Commandline commandLine = new Commandline(); > int result = 0; > commandLine.setExecutable(getClearToolCommand()); > > checkOptions(commandLine); > > // For debugging > log(commandLine.toString(), verbosity); > > result = run(commandLine); > if (result != 0) { > String msg = "Failed executing: " + commandLine.toString(); > throw new BuildException(msg, location); > } > } > > /** > * Executes the task. > * <p> > * If the task contains FileSet elements will execute the task in all the > * elements identified by they. If not will execute using the ViewPath > * property. > */ > public void execute() throws BuildException { > if( !hasFileSets() ) { > if (getViewPath() == null) { > execute(getProject().getBaseDir().getPath()); > } else { > execute(getViewPath()); > } > } else { > List rClearObjects = getClearCaseObjects(); > Iterator rIterator = rClearObjects.iterator(); > while( rIterator.hasNext() ) { > String sName = (String) rIterator.next(); > execute(sName); > } > } > } > > protected List getClearCaseObjects() { > Vector rFiles = new Vector(); > for (int i = 0; i < filesets.size(); i++) { > System.out.println("Filesets present, processing files"); > FileSet fs = (FileSet) filesets.elementAt(i); > DirectoryScanner ds = fs.getDirectoryScanner(project); > > String[] srcFiles = ds.getIncludedFiles(); > for(int j=0 ; j<srcFiles.length ; j++) { > rFiles.add(fs.getDir(project).getAbsolutePath() + File.separator + srcFiles[j]); > } > String[] srcDirs = ds.getIncludedDirectories(); > for(int j=0 ; j<srcDirs.length ; j++) { > rFiles.add(srcDirs[j]); > } > } > return rFiles; > } > > protected boolean hasFileSets() { > return (filesets.size() > 0); > } > > /** > * 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"; > > } > > ---------------------------------------------------------------------------- ---- > /* > * The Apache Software License, Version 1.1 > * > * Copyright (c) 2000-2002 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 [EMAIL PROTECTED] > * > * 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; > > import org.apache.tools.ant.Task; > import org.apache.tools.ant.DirectoryScanner; > import org.apache.tools.ant.Project; > import org.apache.tools.ant.types.FileSet; > import org.apache.tools.ant.types.PatternSet; > import org.apache.tools.ant.types.selectors.*; > > import java.io.File; > import java.util.StringTokenizer; > import java.util.Enumeration; > import org.apache.tools.ant.types.Reference; > > /** > * This is an abstract task that should be used by all those tasks that > * require to include or exclude files based on pattern matching. > * > * @author Arnout J. Kuiper > * <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> > * @author Stefano Mazzocchi > * <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> > * @author Sam Ruby <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> > * @author Jon S. Stevens <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> > * @author <a href="mailto:[EMAIL PROTECTED]">Stefan Bodewig</a> > * @author <a href="mailto:[EMAIL PROTECTED]">Bruce Atherton</a> > * @author Oscar Forero > * @since Ant 1.1 > */ > > public abstract class MatchingTask extends Task implements SelectorContainer { > > private String sFileSetRef = null; > private FileSet internalFileset = null; > > protected boolean useDefaultExcludes = true; > protected FileSet fileset = new FileSet(); > > /** > * @see org.apache.tools.ant.ProjectComponent#setProject > */ > public void setProject(Project project) { > super.setProject(project); > fileset.setProject(project); > } > > /** > * add a name entry on the include list > */ > public PatternSet.NameEntry createInclude() { > return fileset.createInclude(); > } > > /** > * add a name entry on the include files list > */ > public PatternSet.NameEntry createIncludesFile() { > return fileset.createIncludesFile(); > } > > /** > * add a name entry on the exclude list > */ > public PatternSet.NameEntry createExclude() { > return fileset.createExclude(); > } > > /** > * add a name entry on the include files list > */ > public PatternSet.NameEntry createExcludesFile() { > return fileset.createExcludesFile(); > } > > /** > * add a set of patterns > */ > public PatternSet createPatternSet() { > return fileset.createPatternSet(); > } > > /** > * Sets the set of include patterns. Patterns may be separated by a comma > * or a space. > * > * @param includes the string containing the include patterns > */ > public void setIncludes(String includes) { > fileset.setIncludes(includes); > } > > /** > * Set this to be the items in the base directory that you want to be > * included. You can also specify "*" for the items (ie: items="*") > * and it will include all the items in the base directory. > * > * @param itemString the string containing the files to include. > */ > public void XsetItems(String itemString) { > log("The items attribute is deprecated. " + > "Please use the includes attribute.", > Project.MSG_WARN); > if (itemString == null || itemString.equals("*") > || itemString.equals(".")) { > createInclude().setName("**"); > } else { > StringTokenizer tok = new StringTokenizer(itemString, ", "); > while (tok.hasMoreTokens()) { > String pattern = tok.nextToken().trim(); > if (pattern.length() > 0) { > createInclude().setName(pattern + "/**"); > } > } > } > } > > /** > * Sets the set of exclude patterns. Patterns may be separated by a comma > * or a space. > * > * @param excludes the string containing the exclude patterns > */ > public void setExcludes(String excludes) { > fileset.setExcludes(excludes); > } > > /** > * List of filenames and directory names to not include. They should be > * either , or " " (space) separated. The ignored files will be logged. > * > * @param ignoreString the string containing the files to ignore. > */ > public void XsetIgnore(String ignoreString) { > log("The ignore attribute is deprecated." + > "Please use the excludes attribute.", > Project.MSG_WARN); > if (ignoreString != null && ignoreString.length() > 0) { > StringTokenizer tok = new StringTokenizer(ignoreString, ", ", > false); > while (tok.hasMoreTokens()) { > createExclude().setName("**/" + tok.nextToken().trim() + "/**"); > } > } > } > > /** > * Sets whether default exclusions should be used or not. > * > * @param useDefaultExcludes "true"|"on"|"yes" when default exclusions > * should be used, "false"|"off"|"no" when they > * shouldn't be used. > */ > public void setDefaultexcludes(boolean useDefaultExcludes) { > this.useDefaultExcludes = useDefaultExcludes; > } > > /** > * Returns the directory scanner needed to access the files to process. > */ > protected DirectoryScanner getDirectoryScanner(File baseDir) { > if(this.internalFileset == null) { > fileset.setDir(baseDir); > fileset.setDefaultexcludes(useDefaultExcludes); > return fileset.getDirectoryScanner(project); > } else { > return this.internalFileset.getDirectoryScanner(project); > } > } > > /** > * Sets a reference to a FileSet element, if set will ignore internal > * select elements. This allows to use the same FileSet on diferent tasks. > */ > public void setFileSetRef(String sFileSetRef) { > this.sFileSetRef = sFileSetRef; > this.internalFileset = new FileSet(); > this.internalFileset.setRefid(new Reference(sFileSetRef)); > } > > /** > * Return the value of the Reference to a FileSet element. Null if is not set. > */ > public String getFileSetRef() { > return this.sFileSetRef; > } > > /** > * Sets the name of the file containing the includes patterns. > * > * @param includesfile A string containing the filename to fetch > * the include patterns from. > */ > public void setIncludesfile(File includesfile) { > fileset.setIncludesfile(includesfile); > } > > /** > * Sets the name of the file containing the includes patterns. > * > * @param excludesfile A string containing the filename to fetch > * the include patterns from. > */ > public void setExcludesfile(File excludesfile) { > fileset.setExcludesfile(excludesfile); > } > > /** > * Sets case sensitivity of the file system > * > * @param isCaseSensitive "true"|"on"|"yes" if file system is case > * sensitive, "false"|"off"|"no" when not. > */ > public void setCaseSensitive(boolean isCaseSensitive) { > fileset.setCaseSensitive(isCaseSensitive); > } > > /** > * Sets whether or not symbolic links should be followed. > * > * @param followSymlinks whether or not symbolic links should be followed > */ > public void setFollowSymlinks(boolean followSymlinks) { > fileset.setFollowSymlinks(followSymlinks); > } > > /** > * Indicates whether there are any selectors here. > * > * @return whether any selectors are in this container > */ > public boolean hasSelectors() { > return fileset.hasSelectors(); > } > > /** > * Gives the count of the number of selectors in this container > * > * @return the number of selectors in this container > */ > public int selectorCount() { > return fileset.selectorCount(); > } > > /** > * Returns the set of selectors as an array. > * > * @return an array of selectors in this container > */ > public FileSelector[] getSelectors(Project p) { > return fileset.getSelectors(p); > } > > /** > * Returns an enumerator for accessing the set of selectors. > * > * @return an enumerator that goes through each of the selectors > */ > public Enumeration selectorElements() { > return fileset.selectorElements(); > } > > /** > * Add a new selector into this container. > * > * @param selector the new selector to add > * @return the selector that was added > */ > public void appendSelector(FileSelector selector) { > fileset.appendSelector(selector); > } > > /* Methods below all add specific selectors */ > > /** > * add a "Select" selector entry on the selector list > */ > public void addSelector(SelectSelector selector) { > fileset.addSelector(selector); > } > > /** > * add an "And" selector entry on the selector list > */ > public void addAnd(AndSelector selector) { > fileset.addAnd(selector); > } > > /** > * add an "Or" selector entry on the selector list > */ > public void addOr(OrSelector selector) { > fileset.addOr(selector); > } > > /** > * add a "Not" selector entry on the selector list > */ > public void addNot(NotSelector selector) { > fileset.addNot(selector); > } > > /** > * add a "None" selector entry on the selector list > */ > public void addNone(NoneSelector selector) { > fileset.addNone(selector); > } > > /** > * add a majority selector entry on the selector list > */ > public void addMajority(MajoritySelector selector) { > fileset.addMajority(selector); > } > > /** > * add a selector date entry on the selector list > */ > public void addDate(DateSelector selector) { > fileset.addDate(selector); > } > > /** > * add a selector size entry on the selector list > */ > public void addSize(SizeSelector selector) { > fileset.addSize(selector); > } > > /** > * add a selector filename entry on the selector list > */ > public void addFilename(FilenameSelector selector) { > fileset.addFilename(selector); > } > > /** > * add an extended selector entry on the selector list > */ > public void addCustom(ExtendSelector selector) { > fileset.addCustom(selector); > } > > /** > * add a contains selector entry on the selector list > */ > public void addContains(ContainsSelector selector) { > fileset.addContains(selector); > } > > /** > * add a present selector entry on the selector list > */ > public void addPresent(PresentSelector selector) { > fileset.addPresent(selector); > } > > /** > * add a depth selector entry on the selector list > */ > public void addDepth(DepthSelector selector) { > fileset.addDepth(selector); > } > > /** > * add a depends selector entry on the selector list > */ > public void addDepend(DependSelector selector) { > fileset.addDepend(selector); > } > } > ---------------------------------------------------------------------------- ---- > <?xml version="1.0" encoding="UTF-8"?> > <project basedir="." default="all" name="changeme"> > <property name="Select" value="libertis/*.txt"/> > <property name="Base" value="L:/BDL000515-028_task/emis_java_files2"/> > <property name="from" value="test"/> > <property name="to" value="succesful test"/> > > <fileset id="files" dir="${Base}" includes="${Select}"> > <contains text="${from}"/> > </fileset> > > <target name="all"> > <sequential> > <cccheckout verbose="true"> > <fileset refid="files"/> > </cccheckout> > <ccuncheckout verbose="true"> > <fileset refid="files"/> > </ccuncheckout> > </sequential> > <sequential> > <cccheckout verbose="true"> > <fileset refid="files"/> > </cccheckout> > <replace dir="${Base}" token="${from}" value="${to}"> > <include name="${Select}" /> > <contains text="${from}" /> > </replace> > <cccheckin verbose="true"> > <fileset refid="files"/> > </cccheckin> > </sequential> > </target> > </project> > > ---------------------------------------------------------------------------- ---- > -- > To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> > For additional commands, e-mail: <mailto:[EMAIL PROTECTED]> -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
