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-ffa450edef68master
| @@ -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. | ||||
| @@ -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><filelist></code> | <p>You can use any number of nested <code><filelist></code> | ||||
| elements to define the files for this task and refer to | elements to define the files for this task and refer to | ||||
| <code><filelist></code>s defined elsewhere.</p> | <code><filelist></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><dirset></code> | |||||
| elements to define the directories for this task and refer to | |||||
| <code><dirset></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><arg></code> elements. See <a | <code><arg></code> elements. See <a | ||||
| @@ -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><fileset></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><fileset></code> or | |||||
| <code><dirset></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> | ||||
| <chmod dir="${dist}/bin" perm="ugo+rx" includes="**/*.sh"/> | |||||
| <chmod dir="${dist}/bin" perm="ugo+rx" | |||||
| includes="**/*.sh"/> | |||||
| </pre> | </pre> | ||||
| </blockquote> | </blockquote> | ||||
| <p>makes all ".sh" files below <code>${dist}/bin</code> | <p>makes all ".sh" 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 © 2000-2003 Apache Software Foundation. All rights | |||||
| Reserved.</p> | |||||
| <blockquote> | |||||
| <pre> | |||||
| <chmod perm="go-rwx" type="file"> | |||||
| <fileset dir="/web"> | |||||
| <include name="**/*.cgi"/> | |||||
| <include name="**/*.old"/> | |||||
| </fileset> | |||||
| <dirset dir="/web"> | |||||
| <include name="**/private_*"/> | |||||
| </dirset> | |||||
| </chmod> | |||||
| </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 © 2000-2003 Apache Software Foundation. | |||||
| All rights Reserved.</p> | |||||
| </body> | </body> | ||||
| </html> | </html> | ||||
| @@ -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><fileset></code> and <code><filelist></code> | |||||
| elements.</p> | |||||
| nested <code><fileset></code>, <code><dirset></code> and | |||||
| <code><filelist></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> | ||||
| @@ -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><fileset></code> and <code><filelist></code> | |||||
| elements.</p> | |||||
| nested <code><fileset></code>, <code><dirset></code> and | |||||
| <code><filelist></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> | ||||
| <chgrp group="coders"> | |||||
| <fileset dir="${dist}/bin" includes="**/*.sh"/> | |||||
| </chgrp> | |||||
| <chgrp group="coders"> | |||||
| <fileset dir="${dist}/bin" includes="**/*.sh"/> | |||||
| </chgrp> | |||||
| </pre> | </pre> | ||||
| </blockquote> | </blockquote> | ||||
| <p>makes all ".sh" files below <code>${dist}/bin</code> | <p>makes all ".sh" 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> | |||||
| <chgrp group="webdev" type="file"> | |||||
| <fileset dir="/web"> | |||||
| <include name="**/*.test.jsp"/> | |||||
| <include name="**/*.new"/> | |||||
| </fileset> | |||||
| <dirset dir="/web"> | |||||
| <include name="**/test_*"/> | |||||
| </dirset> | |||||
| </chmod> | |||||
| </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 © 2002-2003 Apache Software | <p align="center">Copyright © 2002-2003 Apache Software | ||||
| Foundation. All rights Reserved.</p> | Foundation. All rights Reserved.</p> | ||||
| @@ -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><fileset></code> and <code><filelist></code> | |||||
| elements.</p> | |||||
| nested <code><fileset></code>, <code><dirset></code> and | |||||
| <code><filelist></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> | |||||
| <chown owner="webadmin" type="file"> | |||||
| <fileset dir="/web"> | |||||
| <include name="**/*.cgi"/> | |||||
| <include name="**/*.old"/> | |||||
| </fileset> | |||||
| <dirset dir="/web"> | |||||
| <include name="**/private_*"/> | |||||
| </dirset> | |||||
| </chmod> | |||||
| </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 © 2002-2003 Apache Software | <p align="center">Copyright © 2002-2003 Apache Software | ||||
| Foundation. All rights Reserved.</p> | Foundation. All rights Reserved.</p> | ||||
| @@ -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++; | ||||