ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Stephane Bailliez" <sbaill...@apache.org>
Subject Re: Enhance Clear case tasks
Date Wed, 30 Oct 2002 20:22:45 GMT
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" <of_jakarta@gmx.net>
To: <ant-dev@jakarta.apache.org>
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 apache@apache.org.
>  *
>  * 5. Products derived from this software may not be called "Apache"
>  *    nor may "Apache" appear in their names without prior written
>  *    permission of the Apache Group.
>  *
>  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
>  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
>  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
>  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
>  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
>  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
>  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
>  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
>  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
>  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
>  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
>  * SUCH DAMAGE.
>  * ====================================================================
>  *
>  * This software consists of voluntary contributions made by many
>  * individuals on behalf of the Apache Software Foundation.  For more
>  * information on the Apache Software Foundation, please see
>  * <http://www.apache.org/>.
>  */
>
> package org.apache.tools.ant.taskdefs.optional.clearcase;
>
> import 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 apache@apache.org.
>  *
>  * 5. Products derived from this software may not be called "Apache"
>  *    nor may "Apache" appear in their names without prior written
>  *    permission of the Apache Group.
>  *
>  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
>  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
>  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
>  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
>  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
>  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
>  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
>  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
>  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
>  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
>  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
>  * SUCH DAMAGE.
>  * ====================================================================
>  *
>  * This software consists of voluntary contributions made by many
>  * individuals on behalf of the Apache Software Foundation.  For more
>  * information on the Apache Software Foundation, please see
>  * <http://www.apache.org/>.
>  */
>
> package org.apache.tools.ant.taskdefs.optional.clearcase;
>
> import org.apache.tools.ant.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 apache@apache.org.
>  *
>  * 5. Products derived from this software may not be called "Apache"
>  *    nor may "Apache" appear in their names without prior written
>  *    permission of the Apache Group.
>  *
>  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
>  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
>  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
>  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
>  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
>  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
>  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
>  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
>  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
>  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
>  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
>  * SUCH DAMAGE.
>  * ====================================================================
>  *
>  * This software consists of voluntary contributions made by many
>  * individuals on behalf of the Apache Software Foundation.  For more
>  * information on the Apache Software Foundation, please see
>  * <http://www.apache.org/>.
>  */
>
> package org.apache.tools.ant.taskdefs.optional.clearcase;
>
> import org.apache.tools.ant.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 apache@apache.org.
>  *
>  * 5. Products derived from this software may not be called "Apache"
>  *    nor may "Apache" appear in their names without prior written
>  *    permission of the Apache Group.
>  *
>  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
>  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
>  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
>  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
>  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
>  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
>  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
>  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
>  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
>  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
>  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
>  * SUCH DAMAGE.
>  * ====================================================================
>  *
>  * This software consists of voluntary contributions made by many
>  * individuals on behalf of the Apache Software Foundation.  For more
>  * information on the Apache Software Foundation, please see
>  * <http://www.apache.org/>.
>  */
>
> package org.apache.tools.ant.taskdefs.optional.clearcase;
>
> import 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 apache@apache.org.
>  *
>  * 5. Products derived from this software may not be called "Apache"
>  *    nor may "Apache" appear in their names without prior written
>  *    permission of the Apache Group.
>  *
>  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
>  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
>  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
>  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
>  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
>  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
>  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
>  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
>  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
>  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
>  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
>  * SUCH DAMAGE.
>  * ====================================================================
>  *
>  * This software consists of voluntary contributions made by many
>  * individuals on behalf of the Apache Software Foundation.  For more
>  * information on the Apache Software Foundation, please see
>  * <http://www.apache.org/>.
>  */
>
> package org.apache.tools.ant.taskdefs;
>
> 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:ajkuiper@wxs.nl">ajkuiper@wxs.nl</a>
>  * @author Stefano Mazzocchi
>  *         <a href="mailto:stefano@apache.org">stefano@apache.org</a>
>  * @author Sam Ruby <a href="mailto:rubys@us.ibm.com">rubys@us.ibm.com</a>
>  * @author Jon S. Stevens <a
href="mailto:jon@clearink.com">jon@clearink.com</a>
>  * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
>  * @author <a href="mailto:bruce@callenish.com">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:ant-dev-unsubscribe@jakarta.apache.org>
> For additional commands, e-mail: <mailto:ant-dev-help@jakarta.apache.org>


--
To unsubscribe, e-mail:   <mailto:ant-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:ant-dev-help@jakarta.apache.org>


Mime
View raw message