bodewig     2003/06/24 02:16:11

  Modified:    .        WHATSNEW
               docs/manual/CoreTasks apply.html chmod.html
               docs/manual/OptionalTasks attrib.html chgrp.html chown.html
               src/main/org/apache/tools/ant/taskdefs ExecuteOn.java
  Log:
  Add support for nested dirsets to <apply> and thus to a couple of
  subclass-tasks as well.
  
  PR: 20687
  Submitted by: Gus Heck <gus dot heck at olin dot edu>
  
  Revision  Changes    Path
  1.443     +7 -7      ant/WHATSNEW
  
  Index: WHATSNEW
  ===================================================================
  RCS file: /home/cvs/ant/WHATSNEW,v
  retrieving revision 1.442
  retrieving revision 1.443
  diff -u -r1.442 -r1.443
  --- WHATSNEW  24 Jun 2003 08:44:02 -0000      1.442
  +++ WHATSNEW  24 Jun 2003 09:16:10 -0000      1.443
  @@ -335,13 +335,13 @@
   * <mail> has a new attribute encoding. Bugzilla Report 15434.
   
   * <mail> has new attributes user and password for SMTP auth.
  -maillogger can also use this.
  -The implementation only with JavaMail (encoding="MIME").
  -Implementation with plain mail remains to do.
  -Bugzilla Report 5969.
  +  maillogger can also use this.
  +  The implementation only works with JavaMail (encoding="MIME").
  +  Implementation with plain mail remains to do.
  +  Bugzilla Report 5969.
   
   * <mail> and mailloger support SMTP over TLS/SSL
  -Bugzilla Report 19180.
  +  Bugzilla Report 19180.
   
   * <zipfileset> can now be defined in the main body of a project
     and referred to with refid="xyz". Bugzilla Report 17007.
  @@ -404,8 +404,8 @@
   * With the new addsourcefile attribute, you can make <apply> ommit the
     source file names from the command line.  Bugzilla Report 13654.
   
  -* <apply> and <chmod> now support nested <filelist>s as well.
  -  Bugzilla Report 15929.
  +* <apply> and <chmod> now support nested <filelist>s as well as <dirset>s.
  +  Bugzilla Reports 15929 and 20687.
   
   * <apply> and <chmod> will display a summary if you set the new
     verbose attribute to true.  Bugzilla Report 19883.
  
  
  
  1.22      +13 -4     ant/docs/manual/CoreTasks/apply.html
  
  Index: apply.html
  ===================================================================
  RCS file: /home/cvs/ant/docs/manual/CoreTasks/apply.html,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- apply.html        19 May 2003 12:18:08 -0000      1.21
  +++ apply.html        24 Jun 2003 09:16:10 -0000      1.22
  @@ -15,9 +15,10 @@
   the command is only executed when Ant is run on one of the specified 
operating
   systems.</p>
   <p>The files and/or directories of a number of <a
  -href="../CoreTypes/fileset.html">FileSet</a>s or <a
  -href="../CoreTypes/filelist.html">FileList</a>s are passed as arguments
  -to the system command.</p>
  +href="../CoreTypes/fileset.html">FileSet</a>s, <a
  +href="../CoreTypes/dirset.html">DirSet</a>s (<em>since Ant 1.6</em>)
  +or <a href="../CoreTypes/filelist.html">FileList</a>s (<em>since Ant
  +1.6</em>) are passed as arguments to the system command.</p>
   <p>If you specify a nested <a
   href="../CoreTypes/mapper.html">mapper</a> and the <i>dest</i> attribute,
   the timestamp of each source file is compared to the timestamp of a
  @@ -137,7 +138,10 @@
       <td valign="top">One of <i>file</i>, <i>dir</i> or
         <i>both</i>. If set to <i>file</i>, only the names of plain
         files will be sent to the command. If set to <i>dir</i>, only
  -      the names of directories are considered.</td>
  +      the names of directories are considered.<br>
  +      <strong>Note:</strong> The type attribute does not apply to
  +      nested <i>dirset</i>s - <i>dirset</i>s always implicitly
  +      assume type to be <i>dir</i>.</td>
       <td align="center" valign="top">No, default is <i>file</i></td>
     </tr>
     <tr>
  @@ -191,6 +195,11 @@
   <p>You can use any number of nested <code>&lt;filelist&gt;</code>
   elements to define the files for this task and refer to
   <code>&lt;filelist&gt;</code>s defined elsewhere.</p>
  +<h4>dirset</h4>
  +<p><em>Since Ant 1.6</em></p>
  +<p>You can use any number of nested <code>&lt;dirset&gt;</code>
  +elements to define the directories for this task and refer to
  +<code>&lt;dirset&gt;</code>s defined elsewhere.</p>
   <h4>arg</h4>
   <p>Command line arguments should be specified as nested
   <code>&lt;arg&gt;</code> elements. See <a
  
  
  
  1.14      +35 -8     ant/docs/manual/CoreTasks/chmod.html
  
  Index: chmod.html
  ===================================================================
  RCS file: /home/cvs/ant/docs/manual/CoreTasks/chmod.html,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- chmod.html        23 May 2003 13:40:36 -0000      1.13
  +++ chmod.html        24 Jun 2003 09:16:10 -0000      1.14
  @@ -15,10 +15,12 @@
   <p>See the section on <a 
href="../dirtasks.html#directorybasedtasks">directory based
   tasks</a>, on how the inclusion/exclusion of files works, and how to
   write patterns.</p>
  -<p>This task holds an implicit <a 
href="../CoreTypes/fileset.html">FileSet</a> and
  -supports all of FileSet's attributes and nested elements
  -directly. More FileSets can be specified using nested
  -<code>&lt;fileset&gt;</code> elements.</p>
  +
  +<p>This task holds an implicit <a
  +href="../CoreTypes/fileset.html">FileSet</a> and supports all of
  +FileSet's attributes and nested elements directly. More sets can be
  +specified using nested <code>&lt;fileset&gt;</code> or
  +<code>&lt;dirset&gt;</code> (<em>since Ant 1.6</em>) elements. </p>
   
   <p>Starting with Ant 1.6, this task also supports nested <a
   href="../CoreTypes/filelist.html">filelist</a>s.</p>
  @@ -75,7 +77,10 @@
       <td valign="top">One of <i>file</i>, <i>dir</i> or
         <i>both</i>. If set to <i>file</i>, only the permissions of
         plain files are going to be changed. If set to <i>dir</i>, only
  -      the directories are considered.</td>
  +      the directories are considered.<br>
  +      <strong>Note:</strong> The type attribute does not apply to
  +      nested <i>dirset</i>s - <i>dirset</i>s always implicitly
  +      assume type to be <i>dir</i>.</td>
       <td align="center" valign="top">No, default is <i>file</i></td>
     </tr>
     <tr>
  @@ -100,7 +105,8 @@
   UNIX system.</p>
   <blockquote>
   <pre>
  -    &lt;chmod dir=&quot;${dist}/bin&quot; perm=&quot;ugo+rx&quot; 
includes=&quot;**/*.sh&quot;/&gt;
  +&lt;chmod dir=&quot;${dist}/bin&quot; perm=&quot;ugo+rx&quot; 
  +       includes=&quot;**/*.sh&quot;/&gt;
   </pre>
   </blockquote>
   <p>makes all &quot;.sh&quot; files below <code>${dist}/bin</code>
  @@ -120,8 +126,29 @@
   group on a UNIX system. In addition all files belonging to a FileSet
   with <code>id</code> <code>other.shared.sources</code> get the same
   permissions.</p>
  -<hr><p align="center">Copyright &copy; 2000-2003 Apache Software Foundation. 
All rights
  -Reserved.</p>
  +
  +<blockquote>
  +<pre>
  +&lt;chmod perm=&quot;go-rwx&quot; type=&quot;file&quot;&gt;
  +  &lt;fileset dir=&quot;/web&quot;&gt;
  +    &lt;include name=&quot;**/*.cgi&quot;/&gt;
  +    &lt;include name=&quot;**/*.old&quot;/&gt;
  +  &lt;/fileset&gt;
  +  &lt;dirset dir=&quot;/web&quot;&gt;
  +    &lt;include name=&quot;**/private_*&quot;/&gt;
  +  &lt;/dirset&gt;
  +&lt;/chmod&gt;
  +</pre>
  +</blockquote>
  +
  +<p>keeps non-owners from touching cgi scripts, files with a <code>.old</code>
  +extension or directories begining with <code>private_</code>. A directory 
  +ending in <code>.old</code> or a file begining with private_ would remain
  +unaffected.</p>
  +
  +<hr>
  +<p align="center">Copyright &copy; 2000-2003 Apache Software Foundation. 
  +All rights Reserved.</p>
   
   </body>
   </html>
  
  
  
  1.5       +8 -4      ant/docs/manual/OptionalTasks/attrib.html
  
  Index: attrib.html
  ===================================================================
  RCS file: /home/cvs/ant/docs/manual/OptionalTasks/attrib.html,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- attrib.html       23 May 2003 13:40:36 -0000      1.4
  +++ attrib.html       24 Jun 2003 09:16:10 -0000      1.5
  @@ -16,10 +16,11 @@
   4 possible permissions has its own attribute, matching the arguments
   for the attrib command.</p>
   
  -<p><a href="../CoreTypes/fileset.html">FileSet</a>s or <a
  +<p><a href="../CoreTypes/fileset.html">FileSet</a>s, 
  +<a href="../CoreTypes/dirset.html">DirSet</a>s or <a
   href="../CoreTypes/filelist.html">FileList</a>s can be specified using
  -nested <code>&lt;fileset&gt;</code> and <code>&lt;filelist&gt;</code>
  -elements.</p>
  +nested <code>&lt;fileset&gt;</code>, <code>&lt;dirset&gt;</code> and 
  +<code>&lt;filelist&gt;</code> elements.</p>
   
   <h3>Parameters</h3>
   <table border="1" cellpadding="2" cellspacing="0">
  @@ -56,7 +57,10 @@
       <td valign="top">type</td>
       <td valign="top">One of <i>file</i>, <i>dir</i> or <i>both</i>. If set to
         <i>file</i>, only the permissions of plain files are going to be 
changed.
  -      If set to <i>dir</i>, only the directories are considered.</td>
  +      If set to <i>dir</i>, only the directories are considered.<br>
  +      <strong>Note:</strong> The type attribute does not apply to
  +      nested <i>dirset</i>s - <i>dirset</i>s always implicitly
  +      assume type to be <i>dir</i>.</td>
       <td align="center" valign="top">No, default is <i>file</i></td>
     </tr>
     <tr>
  
  
  
  1.4       +31 -7     ant/docs/manual/OptionalTasks/chgrp.html
  
  Index: chgrp.html
  ===================================================================
  RCS file: /home/cvs/ant/docs/manual/OptionalTasks/chgrp.html,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- chgrp.html        21 May 2003 08:55:35 -0000      1.3
  +++ chgrp.html        24 Jun 2003 09:16:10 -0000      1.4
  @@ -16,10 +16,11 @@
   atribute is equivalent to the coresponding argument for the chgrp
   command.</p>
   
  -<p><a href="../CoreTypes/fileset.html">FileSet</a>s or <a
  +<p><a href="../CoreTypes/fileset.html">FileSet</a>s, 
  +<a href="../CoreTypes/dirset.html">DirSet</a>s or <a
   href="../CoreTypes/filelist.html">FileList</a>s can be specified using
  -nested <code>&lt;fileset&gt;</code> and <code>&lt;filelist&gt;</code>
  -elements.</p>
  +nested <code>&lt;fileset&gt;</code>, <code>&lt;dirset&gt;</code> and 
  +<code>&lt;filelist&gt;</code> elements.</p>
   
   <h3>Parameters</h3>
   <table border="1" cellpadding="2" cellspacing="0">
  @@ -51,7 +52,10 @@
       <td valign="top">One of <i>file</i>, <i>dir</i> or
         <i>both</i>. If set to <i>file</i>, only the group of
         plain files are going to be changed. If set to <i>dir</i>, only
  -      the directories are considered.</td>
  +      the directories are considered.<br>
  +      <strong>Note:</strong> The type attribute does not apply to
  +      nested <i>dirset</i>s - <i>dirset</i>s always implicitly
  +      assume type to be <i>dir</i>.</td>
       <td align="center" valign="top">No, default is <i>file</i></td>
     </tr>
     <tr>
  @@ -78,9 +82,9 @@
   UNIX system.</p>
   <blockquote>
   <pre>
  -    &lt;chgrp group=&quot;coders&quot;&gt;
  -      &lt;fileset dir=&quot;${dist}/bin&quot; 
includes=&quot;**/*.sh&quot;/&gt;
  -    &lt;/chgrp&gt;
  +&lt;chgrp group=&quot;coders&quot;&gt;
  +  &lt;fileset dir=&quot;${dist}/bin&quot; includes=&quot;**/*.sh&quot;/&gt;
  +&lt;/chgrp&gt;
   </pre>
   </blockquote>
   <p>makes all &quot;.sh&quot; files below <code>${dist}/bin</code>
  @@ -100,6 +104,26 @@
   system. In addition all files belonging to a FileSet
   with <code>id</code> <code>other.shared.sources</code> get the same
   group.</p>
  +
  +<blockquote>
  +<pre>
  +&lt;chgrp group=&quot;webdev&quot; type=&quot;file&quot;&gt;
  +  &lt;fileset dir=&quot;/web&quot;&gt;
  +    &lt;include name=&quot;**/*.test.jsp&quot;/&gt;
  +    &lt;include name=&quot;**/*.new&quot;/&gt;
  +  &lt;/fileset&gt;
  +  &lt;dirset dir=&quot;/web&quot;&gt;
  +    &lt;include name=&quot;**/test_*&quot;/&gt;
  +  &lt;/dirset&gt;
  +&lt;/chmod&gt;
  +</pre>
  +</blockquote>
  +
  +<p>makes all <code>.test.jsp</code>, and <code>.new</code> files belong to 
  +group webdev. Directories begining with <code>test_</code> also will belong 
  +to webdev, but if there is a directory that ends in <code>.new</code> or a 
file
  +that begins with <code>test_</code> it will be unaffected.</p>
  +
   
   <hr>
   <p align="center">Copyright &copy; 2002-2003 Apache Software
  
  
  
  1.4       +29 -4     ant/docs/manual/OptionalTasks/chown.html
  
  Index: chown.html
  ===================================================================
  RCS file: /home/cvs/ant/docs/manual/OptionalTasks/chown.html,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- chown.html        21 May 2003 08:55:35 -0000      1.3
  +++ chown.html        24 Jun 2003 09:16:10 -0000      1.4
  @@ -16,10 +16,12 @@
   atribute is equivalent to the coresponding argument for the chown
   command.</p>
   
  -<p><a href="../CoreTypes/fileset.html">FileSet</a>s or <a
  +<p><a href="../CoreTypes/fileset.html">FileSet</a>s, 
  +<a href="../CoreTypes/dirset.html">DirSet</a>s or <a
   href="../CoreTypes/filelist.html">FileList</a>s can be specified using
  -nested <code>&lt;fileset&gt;</code> and <code>&lt;filelist&gt;</code>
  -elements.</p>
  +nested <code>&lt;fileset&gt;</code>, <code>&lt;dirset&gt;</code> and 
  +<code>&lt;filelist&gt;</code> elements.</p>
  +
   
   <h3>Parameters</h3>
   <table border="1" cellpadding="2" cellspacing="0">
  @@ -51,7 +53,10 @@
       <td valign="top">One of <i>file</i>, <i>dir</i> or
         <i>both</i>. If set to <i>file</i>, only the owner of
         plain files are going to be changed. If set to <i>dir</i>, only
  -      the directories are considered.</td>
  +      the directories are considered.<br>
  +      <strong>Note:</strong> The type attribute does not apply to
  +      nested <i>dirset</i>s - <i>dirset</i>s always implicitly
  +      assume type to be <i>dir</i>.</td>
       <td align="center" valign="top">No, default is <i>file</i></td>
     </tr>
     <tr>
  @@ -100,6 +105,26 @@
   system. In addition all files belonging to a FileSet
   with <code>id</code> <code>other.shared.sources</code> get the same
   owner.</p>
  +
  +<blockquote>
  +<pre>
  +&lt;chown owner=&quot;webadmin&quot; type=&quot;file&quot;&gt;
  +  &lt;fileset dir=&quot;/web&quot;&gt;
  +    &lt;include name=&quot;**/*.cgi&quot;/&gt;
  +    &lt;include name=&quot;**/*.old&quot;/&gt;
  +  &lt;/fileset&gt;
  +  &lt;dirset dir=&quot;/web&quot;&gt;
  +    &lt;include name=&quot;**/private_*&quot;/&gt;
  +  &lt;/dirset&gt;
  +&lt;/chmod&gt;
  +</pre>
  +</blockquote>
  +
  +<p>makes cgi scripts, files with a <code>.old</code> extension or
  +directories begining with <code>private_</code> belong to the user named
  +webadmin. A directory ending in <code>.old</code> or a file begining with 
  +<code>private_</code> would remain unaffected.</p>
  +
   <hr>
   <p align="center">Copyright &copy; 2002-2003 Apache Software
   Foundation. All rights Reserved.</p>
  
  
  
  1.40      +31 -4     ant/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java
  
  Index: ExecuteOn.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java,v
  retrieving revision 1.39
  retrieving revision 1.40
  diff -u -r1.39 -r1.40
  --- ExecuteOn.java    19 May 2003 12:18:08 -0000      1.39
  +++ ExecuteOn.java    24 Jun 2003 09:16:10 -0000      1.40
  @@ -62,6 +62,8 @@
   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.AbstractFileSet;
  +import org.apache.tools.ant.types.DirSet;
   import org.apache.tools.ant.types.EnumeratedAttribute;
   import org.apache.tools.ant.types.FileList;
   import org.apache.tools.ant.types.FileSet;
  @@ -81,7 +83,8 @@
    */
   public class ExecuteOn extends ExecTask {
   
  -    protected Vector filesets = new Vector();
  +    protected Vector filesets = new Vector(); // contains AbstractFileSet
  +                                              // (both DirSet and FileSet)
       private Vector filelists = new Vector();
       private boolean relative = false;
       private boolean parallel = false;
  @@ -110,6 +113,20 @@
       }
   
       /**
  +     * Adds directories to operate on.
  +     *
  +     * <p><em>Note that the directories will be added to the build
  +     * path in no particular order, so if order is significant, one
  +     * should use a file list instead!</em></p>
  +     *
  +     * @param  set the DirSet to add.
  +     *
  +     * @since Ant 1.6
  +     */
  +    public void addDirset(DirSet set) {
  +        filesets.addElement(set);        
  +    }
  +    /**
        * Source files to operate upon.
        */
       public void addFilelist(FileList list) {
  @@ -274,11 +291,21 @@
               Vector fileNames = new Vector();
               Vector baseDirs = new Vector();
               for (int i = 0; i < filesets.size(); i++) {
  -                FileSet fs = (FileSet) filesets.elementAt(i);
  +                String currentType = type;
  +                AbstractFileSet fs = (AbstractFileSet) filesets.elementAt(i);
  +                if (fs instanceof DirSet) {
  +                    if (!"dir".equals(type)) {
  +                        log("Found a nested dirset but type is " + type + ". 
" 
  +                            + "Temporarily switching to type=\"dir\" on the" 
+
  +                            " assumption that you really did mean" +
  +                            " <dirset> not <fileset>.", Project.MSG_DEBUG);
  +                        currentType = "dir";
  +                    }
  +                }
                   File base = fs.getDir(getProject());
                   DirectoryScanner ds = fs.getDirectoryScanner(getProject());
   
  -                if (!"dir".equals(type)) {
  +                if (!"dir".equals(currentType)) {
                       String[] s = getFiles(base, ds);
                       for (int j = 0; j < s.length; j++) {
                           totalFiles++;
  @@ -287,7 +314,7 @@
                       }
                   }
   
  -                if (!"file".equals(type)) {
  +                if (!"file".equals(currentType)) {
                       String[] s = getDirs(base, ds);;
                       for (int j = 0; j < s.length; j++) {
                           totalDirs++;
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to