bodewig 00/07/04 02:30:26
Modified: docs index.html
src/main/org/apache/tools/ant/taskdefs Chmod.java
Log:
Make Chmod a MatchingTask.
Submitted by: Mariusz Nowostawski <[EMAIL PROTECTED]>
Revision Changes Path
1.36 +62 -4 jakarta-ant/docs/index.html
Index: index.html
===================================================================
RCS file: /home/cvs/jakarta-ant/docs/index.html,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -r1.35 -r1.36
--- index.html 2000/07/04 08:51:47 1.35
+++ index.html 2000/07/04 09:30:05 1.36
@@ -620,8 +620,18 @@
<hr>
<h2><a name="chmod">Chmod</a></h2>
<h3>Description</h3>
-<p>Changes the permissions of a file. Right now it has efect only under Unix.
+<p>Changes the permissions of a file or all files inside a specified
directory. Right now it has efect only under Unix.
The permissions are also UNIX style, like the argument for the chmod
command.</p>
+<p>It is possible to refine the set of files whose permissions are changed.
This can be
+done with the <i>includes</i>, <i>includesfile</i>, <i>excludes</i>,
<i>excludesfile</i> and <i>defaultexcludes</i>
+attributes. With the <i>includes</i> or <i>includesfile</i> attribute you
specify the files you want to
+have included by using patterns. The <i>exclude</i> or <i>excludesfile</i>
attribute is used to specify
+the files you want to have excluded. This is also done with patterns. And
+finally with the <i>defaultexcludes</i> attribute, you can specify whether
you
+want to use default exclusions or not. See the section on <a
+href="#directorybasedtasks">directory based tasks</a>, on how the
+inclusion/exclusion of files works, and how to write patterns. The patterns
are
+relative to the <i>dir</i> directory.</p>
<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
<tr>
@@ -630,23 +640,71 @@
<td align="center" valign="top"><b>Required</b></td>
</tr>
<tr>
+ <td valign="top">file</td>
+ <td valign="top">the file or single directory of which the permissions
+ must be changed.</td>
+ <td valign="top" valign="middle" rowspan="2">exactly one of the two</td>
+ </tr>
+ <tr>
+ <td valign="top">dir</td>
+ <td valign="top">the directory which holds the files whose permissions
+ must be changed.</td>
+ </tr>
+ <tr>
<td valign="top">src</td>
- <td valign="top">the file of which the permissions must be changed.</td>
- <td valign="top" align="center">Yes</td>
+ <td valign="top">the file or single directory of which the permissions
+ must be changed (<b>deprecated</b>, use <i>file</i> instead).</td>
+ <td valign="top" align="center">No</td>
</tr>
<tr>
<td valign="top">perm</td>
<td valign="top">the new permissions.</td>
<td valign="top" align="center">Yes</td>
</tr>
+ <tr>
+ <td valign="top">includes</td>
+ <td valign="top">comma separated list of patterns of files that must be
+ included. All files are included when omitted.</td>
+ <td valign="top" align="center">No</td>
+ </tr>
+ <tr>
+ <td valign="top">includesfile</td>
+ <td valign="top">the name of a file. Each line of this file is
+ taken to be an include pattern</td>
+ <td valign="top" align="center">No</td>
+ </tr>
+ <tr>
+ <td valign="top">excludes</td>
+ <td valign="top">comma separated list of patterns of files that must be
+ excluded. No files (except default excludes) are excluded when
omitted.</td>
+ <td valign="top" align="center">No</td>
+ </tr>
+ <tr>
+ <td valign="top">excludesfile</td>
+ <td valign="top">the name of a file. Each line of this file is
+ taken to be an exclude pattern</td>
+ <td valign="top" align="center">No</td>
+ </tr>
+ <tr>
+ <td valign="top">defaultexcludes</td>
+ <td valign="top">indicates whether default excludes should be used or not
+ ("yes"/"no"). Default excludes are used when
omitted.</td>
+ <td valign="top" align="center">No</td>
+ </tr>
</table>
<h3>Examples</h3>
<blockquote>
- <p><code><chmod src="${dist}/start.sh" perm="ugo+rx"
+ <p><code><chmod file="${dist}/start.sh"
perm="ugo+rx"
/></code></p>
</blockquote>
<p>makes the "start.sh" file readable and executable for anyone on
a
UNIX system.</p>
+<pre>
+ <chmod dir="${dist}/bin" perm="ugo+rx"
includes="**/*.sh" />
+</pre>
+</blockquote>
+<p>makes all ".sh" files below <code>${dist}/bin</code>
+readable and executable for anyone on a UNIX system.</p>
<hr>
<h2><a name="copydir">Copydir</a></h2>
<h3>Description</h3>
1.3 +47 -14
jakarta-ant/src/main/org/apache/tools/ant/taskdefs/Chmod.java
Index: Chmod.java
===================================================================
RCS file:
/home/cvs/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/Chmod.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Chmod.java 2000/02/28 02:17:57 1.2
+++ Chmod.java 2000/07/04 09:30:21 1.3
@@ -60,33 +60,66 @@
import java.util.*;
/**
+ * Chmod equivalent for unix-like environments.
*
- *
* @author [EMAIL PROTECTED]
+ * @author Mariusz Nowostawski (Marni) <a href="mailto:[EMAIL
PROTECTED]">[EMAIL PROTECTED]</a>
*/
-public class Chmod extends Task {
+public class Chmod extends MatchingTask {
- private File srcFile;
+ private File srcFile; //if we want to chmod a single file or dir
+ private File srcDir; //if we want to chmod a list of files
private String mod;
+ public void setFile(String src) {
+ srcFile = project.resolveFile(src);
+ }
+
+ public void setDir(String src) {
+ srcDir = project.resolveFile(src);
+ }
+
public void setSrc(String src) {
- srcFile = project.resolveFile(src);
+ project.log("The src attribute is deprecated. " +
+ "Please use the file attribute.",
+ Project.MSG_WARN);
+ setFile(src);
}
public void setPerm(String perm) {
- mod=perm;
+ mod=perm;
}
public void execute() throws BuildException {
- try {
- // XXX if OS=unix
- if (System.getProperty("path.separator").equals(":") &&
- !System.getProperty("os.name").startsWith("Mac"))
- Runtime.getRuntime().exec("chmod " + mod + " " + srcFile );
- } catch (IOException ioe) {
- // ignore, but warn
- System.out.println("Error chmod" + ioe.toString() );
- }
+ try {
+ // XXX if OS=unix
+ if (System.getProperty("path.separator").equals(":") &&
+ !System.getProperty("os.name").startsWith("Mac")) {
+
+ if (srcFile != null && srcDir == null) {
+ chmod(srcFile.toString());
+ } else if(srcFile == null && srcDir == null) {
+ project.log("The attribute 'file' or 'dir' needs to be
set.", Project.MSG_WARN);
+ throw new BuildException("Required attribute not set in
Chmod", location);
+ } else if(srcFile == null && srcDir != null) {
+
+ DirectoryScanner ds = getDirectoryScanner(srcDir);
+ String[] files = ds.getIncludedFiles();
+
+ for (int i = 0; i < files.length; i++) {
+ chmod(files[i]);
+ }
+ }
+ }
+ } catch (IOException ioe) {
+ // ignore, but warn
+ project.log("Error in Chmod " + ioe.toString() ,
Project.MSG_WARN);
+ }
+ }
+
+
+ private void chmod(String file) throws BuildException, IOException {
+ Runtime.getRuntime().exec("chmod " + mod + " " + file);
}
}