Browse Source

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>


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274696 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 22 years ago
parent
commit
e4f004d939
7 changed files with 154 additions and 38 deletions
  1. +7
    -7
      WHATSNEW
  2. +13
    -4
      docs/manual/CoreTasks/apply.html
  3. +35
    -8
      docs/manual/CoreTasks/chmod.html
  4. +8
    -4
      docs/manual/OptionalTasks/attrib.html
  5. +31
    -7
      docs/manual/OptionalTasks/chgrp.html
  6. +29
    -4
      docs/manual/OptionalTasks/chown.html
  7. +31
    -4
      src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java

+ 7
- 7
WHATSNEW View File

@@ -335,13 +335,13 @@ Other changes:
* <mail> has a new attribute encoding. Bugzilla Report 15434. * <mail> has a new attribute encoding. Bugzilla Report 15434.


* <mail> has new attributes user and password for SMTP auth. * <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 * <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 * <zipfileset> can now be defined in the main body of a project
and referred to with refid="xyz". Bugzilla Report 17007. and referred to with refid="xyz". Bugzilla Report 17007.
@@ -404,8 +404,8 @@ Bugzilla Report 19180.
* With the new addsourcefile attribute, you can make <apply> ommit the * With the new addsourcefile attribute, you can make <apply> ommit the
source file names from the command line. Bugzilla Report 13654. 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 * <apply> and <chmod> will display a summary if you set the new
verbose attribute to true. Bugzilla Report 19883. verbose attribute to true. Bugzilla Report 19883.


+ 13
- 4
docs/manual/CoreTasks/apply.html View File

@@ -15,9 +15,10 @@ compatibility.</i></p>
the command is only executed when Ant is run on one of the specified operating the command is only executed when Ant is run on one of the specified operating
systems.</p> systems.</p>
<p>The files and/or directories of a number of <a <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 <p>If you specify a nested <a
href="../CoreTypes/mapper.html">mapper</a> and the <i>dest</i> attribute, 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 the timestamp of each source file is compared to the timestamp of a
@@ -137,7 +138,10 @@ one mapper.</p>
<td valign="top">One of <i>file</i>, <i>dir</i> or <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 <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 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> <td align="center" valign="top">No, default is <i>file</i></td>
</tr> </tr>
<tr> <tr>
@@ -191,6 +195,11 @@ elements to define the files for this task and refer to
<p>You can use any number of nested <code>&lt;filelist&gt;</code> <p>You can use any number of nested <code>&lt;filelist&gt;</code>
elements to define the files for this task and refer to elements to define the files for this task and refer to
<code>&lt;filelist&gt;</code>s defined elsewhere.</p> <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> <h4>arg</h4>
<p>Command line arguments should be specified as nested <p>Command line arguments should be specified as nested
<code>&lt;arg&gt;</code> elements. See <a <code>&lt;arg&gt;</code> elements. See <a


+ 35
- 8
docs/manual/CoreTasks/chmod.html View File

@@ -15,10 +15,12 @@ The permissions are also UNIX style, like the argument for the chmod command.</p
<p>See the section on <a href="../dirtasks.html#directorybasedtasks">directory based <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 tasks</a>, on how the inclusion/exclusion of files works, and how to
write patterns.</p> 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 <p>Starting with Ant 1.6, this task also supports nested <a
href="../CoreTypes/filelist.html">filelist</a>s.</p> href="../CoreTypes/filelist.html">filelist</a>s.</p>
@@ -75,7 +77,10 @@ href="../CoreTypes/filelist.html">filelist</a>s.</p>
<td valign="top">One of <i>file</i>, <i>dir</i> or <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 <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 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> <td align="center" valign="top">No, default is <i>file</i></td>
</tr> </tr>
<tr> <tr>
@@ -100,7 +105,8 @@ href="../CoreTypes/filelist.html">filelist</a>s.</p>
UNIX system.</p> UNIX system.</p>
<blockquote> <blockquote>
<pre> <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> </pre>
</blockquote> </blockquote>
<p>makes all &quot;.sh&quot; files below <code>${dist}/bin</code> <p>makes all &quot;.sh&quot; files below <code>${dist}/bin</code>
@@ -120,8 +126,29 @@ below any directory named trial) writable for members of the same
group on a UNIX system. In addition all files belonging to a FileSet 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 with <code>id</code> <code>other.shared.sources</code> get the same
permissions.</p> 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> </body>
</html> </html>


+ 8
- 4
docs/manual/OptionalTasks/attrib.html View File

@@ -16,10 +16,11 @@ directories. Right now it has effect only under Windows. Each of the
4 possible permissions has its own attribute, matching the arguments 4 possible permissions has its own attribute, matching the arguments
for the attrib command.</p> 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 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> <h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0"> <table border="1" cellpadding="2" cellspacing="0">
@@ -56,7 +57,10 @@ elements.</p>
<td valign="top">type</td> <td valign="top">type</td>
<td valign="top">One of <i>file</i>, <i>dir</i> or <i>both</i>. If set to <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. <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> <td align="center" valign="top">No, default is <i>file</i></td>
</tr> </tr>
<tr> <tr>


+ 31
- 7
docs/manual/OptionalTasks/chgrp.html View File

@@ -16,10 +16,11 @@ directories. Right now it has effect only under Unix. The group
atribute is equivalent to the coresponding argument for the chgrp atribute is equivalent to the coresponding argument for the chgrp
command.</p> 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 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> <h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0"> <table border="1" cellpadding="2" cellspacing="0">
@@ -51,7 +52,10 @@ elements.</p>
<td valign="top">One of <i>file</i>, <i>dir</i> or <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 <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 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> <td align="center" valign="top">No, default is <i>file</i></td>
</tr> </tr>
<tr> <tr>
@@ -78,9 +82,9 @@ elements.</p>
UNIX system.</p> UNIX system.</p>
<blockquote> <blockquote>
<pre> <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> </pre>
</blockquote> </blockquote>
<p>makes all &quot;.sh&quot; files below <code>${dist}/bin</code> <p>makes all &quot;.sh&quot; files below <code>${dist}/bin</code>
@@ -101,6 +105,26 @@ system. In addition all files belonging to a FileSet
with <code>id</code> <code>other.shared.sources</code> get the same with <code>id</code> <code>other.shared.sources</code> get the same
group.</p> 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> <hr>
<p align="center">Copyright &copy; 2002-2003 Apache Software <p align="center">Copyright &copy; 2002-2003 Apache Software
Foundation. All rights Reserved.</p> Foundation. All rights Reserved.</p>


+ 29
- 4
docs/manual/OptionalTasks/chown.html View File

@@ -16,10 +16,12 @@ directories. Right now it has effect only under Unix. The owner
atribute is equivalent to the coresponding argument for the chown atribute is equivalent to the coresponding argument for the chown
command.</p> 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 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> <h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0"> <table border="1" cellpadding="2" cellspacing="0">
@@ -51,7 +53,10 @@ elements.</p>
<td valign="top">One of <i>file</i>, <i>dir</i> or <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 <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 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> <td align="center" valign="top">No, default is <i>file</i></td>
</tr> </tr>
<tr> <tr>
@@ -100,6 +105,26 @@ below any directory named trial) belong to coderjoe on a UNIX
system. In addition all files belonging to a FileSet system. In addition all files belonging to a FileSet
with <code>id</code> <code>other.shared.sources</code> get the same with <code>id</code> <code>other.shared.sources</code> get the same
owner.</p> 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> <hr>
<p align="center">Copyright &copy; 2002-2003 Apache Software <p align="center">Copyright &copy; 2002-2003 Apache Software
Foundation. All rights Reserved.</p> Foundation. All rights Reserved.</p>


+ 31
- 4
src/main/org/apache/tools/ant/taskdefs/ExecuteOn.java View File

@@ -62,6 +62,8 @@ import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DirectoryScanner; import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.Project; import org.apache.tools.ant.Project;
import org.apache.tools.ant.types.Commandline; 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.EnumeratedAttribute;
import org.apache.tools.ant.types.FileList; import org.apache.tools.ant.types.FileList;
import org.apache.tools.ant.types.FileSet; import org.apache.tools.ant.types.FileSet;
@@ -81,7 +83,8 @@ import org.apache.tools.ant.util.SourceFileScanner;
*/ */
public class ExecuteOn extends ExecTask { 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 Vector filelists = new Vector();
private boolean relative = false; private boolean relative = false;
private boolean parallel = false; private boolean parallel = false;
@@ -109,6 +112,20 @@ public class ExecuteOn extends ExecTask {
filesets.addElement(set); filesets.addElement(set);
} }


/**
* 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. * Source files to operate upon.
*/ */
@@ -274,11 +291,21 @@ public class ExecuteOn extends ExecTask {
Vector fileNames = new Vector(); Vector fileNames = new Vector();
Vector baseDirs = new Vector(); Vector baseDirs = new Vector();
for (int i = 0; i < filesets.size(); i++) { 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()); File base = fs.getDir(getProject());
DirectoryScanner ds = fs.getDirectoryScanner(getProject()); DirectoryScanner ds = fs.getDirectoryScanner(getProject());


if (!"dir".equals(type)) {
if (!"dir".equals(currentType)) {
String[] s = getFiles(base, ds); String[] s = getFiles(base, ds);
for (int j = 0; j < s.length; j++) { for (int j = 0; j < s.length; j++) {
totalFiles++; totalFiles++;
@@ -287,7 +314,7 @@ public class ExecuteOn extends ExecTask {
} }
} }


if (!"file".equals(type)) {
if (!"file".equals(currentType)) {
String[] s = getDirs(base, ds);; String[] s = getDirs(base, ds);;
for (int j = 0; j < s.length; j++) { for (int j = 0; j < s.length; j++) {
totalDirs++; totalDirs++;


Loading…
Cancel
Save