Browse Source

New task <attrib>

Submitted by:	Shiraz Kanga <SKanga at ingenuus.com>,
                J�r�me Lacoste <jerome.lacoste at smartcardsystem.com>

seventeen months ago 8-)


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@273509 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 22 years ago
parent
commit
beaeb40c3d
5 changed files with 259 additions and 0 deletions
  1. +2
    -0
      WHATSNEW
  2. +97
    -0
      docs/manual/OptionalTasks/attrib.html
  3. +1
    -0
      docs/manual/optionaltasklist.html
  4. +1
    -0
      src/main/org/apache/tools/ant/taskdefs/defaults.properties
  5. +158
    -0
      src/main/org/apache/tools/ant/taskdefs/optional/windows/Attrib.java

+ 2
- 0
WHATSNEW View File

@@ -91,6 +91,8 @@ Other changes:

* new tasks <chown> and <chgrp> which are wrappers of the Unix commands.

* new task <attrib> to change file attributes on Windows systems.

Changes from Ant 1.5.1Beta1 to 1.5.1
====================================



+ 97
- 0
docs/manual/OptionalTasks/attrib.html View File

@@ -0,0 +1,97 @@
<html>

<head>
<meta http-equiv="Content-Language" content="en-us">
<title>Ant User Manual</title>
</head>

<body>

<h2><a name="attrib">Attrib</a></h2>
<h3>Description</h3>

<p>Changes the attributes of a file or all files inside specified
directories. Right now it has effect only under Windows. Each of the
4 possible permissions has its own attribute, matching the arguments
for the attrib command.</p>

<p><a href="../CoreTypes/fileset.html">FileSet</a> can be specified
using nested <code>&lt;fileset&gt;</code> elements.</p>

<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
<tr>
<td valign="top"><b>Attribute</b></td>
<td valign="top"><b>Description</b></td>
<td align="center" valign="top"><b>Required</b></td>
</tr>
<tr>
<td valign="top">file</td>
<td valign="top">the file of which the permissions must be
changed.</td>
<td valign="top" valign="middle" rowspan="2">one of the two or
nested <code>&lt;fileset&gt;</code> elements.</td>
</tr>
<tr>
<td valign="top">dir</td>
<td valign="top">the directory whose permissions must be
changed.</td>
</tr>
<tr>
<td valign="top">readonly</td>
<td valign="top">the readonly permission.</td>
<td valign="top" rowspan="4">at least one of the four. </td>
</tr>
<tr>
<td valign="top">archive</td>
<td valign="top">the archive permission.</td>
</tr>
<tr>
<td valign="top">system</td>
<td valign="top">the system permission.</td>
</tr>
<tr>
<td valign="top">hidden</td>
<td valign="top">the hidden permission.</td>
</tr>
<tr>
<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>
<td align="center" valign="top">No, default is <i>file</i></td>
</tr>
</table>
<h3>Examples</h3>
<blockquote>
<p><code>&lt;attrib file=&quot;${dist}/run.bat&quot; readonly=&quot;true&quot; hidden=&quot;true&quot;/&gt;</code></p>
</blockquote>
<p>makes the &quot;run.bat&quot; file read-only and hidden.</p>
<blockquote>
<pre>&lt;attrib readonly=&quot;false&quot;&gt;
&lt;fileset dir=&quot;${meta.inf}&quot; includes=&quot;**/*.xml&quot;/&gt;
&lt;attrib&gt;
</pre>
</blockquote>
<p>makes all &quot;.xml&quot; files below <code>${meta.inf}</code> readable.</p>
<blockquote>
<pre>
&lt;attrib readonly=&quot;true&quot; archive=&quot;true&quot;&gt;
&lt;fileset dir=&quot;shared/sources1&quot;&gt;
&lt;exclude name=&quot;**/trial/**&quot;/&gt;
&lt;/fileset&gt;
&lt;fileset refid=&quot;other.shared.sources&quot;/&gt;
&lt;/attrib&gt;
</pre>
</blockquote>
<p>makes all files below <code>shared/sources1</code> (except those below any
directory named trial) read-only and archived. In addition all files belonging
to a FileSet with <code>id</code> <code>other.shared.sources</code> get the
same attributes.</p>
<hr>
<p align="center">Copyright &copy; 2002 Apache Software
Foundation. All rights Reserved.</p>

</body>
</html>


+ 1
- 0
docs/manual/optionaltasklist.html View File

@@ -17,6 +17,7 @@
<h3>Optional Tasks</h3>
<a href="OptionalTasks/dotnet.html">.NET Tasks</a><br>
<a href="OptionalTasks/antlr.html">ANTLR</a><br>
<a href="OptionalTasks/attrib.html">Attrib</a><br>
<a href="OptionalTasks/cab.html">Cab</a><br>
<a href="OptionalTasks/chgrp.html">Chgrp</a><br>
<a href="OptionalTasks/chown.html">Chown</a><br>


+ 1
- 0
src/main/org/apache/tools/ant/taskdefs/defaults.properties View File

@@ -174,6 +174,7 @@ vbc=org.apache.tools.ant.taskdefs.optional.dotnet.VisualBasicCompile
symlink=org.apache.tools.ant.taskdefs.optional.unix.Symlink
chgrp=org.apache.tools.ant.taskdefs.optional.unix.Chgrp
chown=org.apache.tools.ant.taskdefs.optional.unix.Chown
attrib=org.apache.tools.ant.taskdefs.optional.windows.Attrib

# deprecated ant tasks (kept for back compatibility)
starteam=org.apache.tools.ant.taskdefs.optional.scm.AntStarTeamCheckOut


+ 158
- 0
src/main/org/apache/tools/ant/taskdefs/optional/windows/Attrib.java View File

@@ -0,0 +1,158 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 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.windows;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.taskdefs.ExecuteOn;
import org.apache.tools.ant.taskdefs.condition.Os;
import org.apache.tools.ant.types.FileSet;

import java.io.File;

/**
* Attrib equivalent for Win32 environments.
* Note: Attrib parameters /S and /D are not handled.
*
* @author skanga@bigfoot.com
* @author <a href="mailto:Jerome@jeromelacoste.com">Jerome Lacoste</a>
*/
public class Attrib extends ExecuteOn {

private static final String ATTR_READONLY = "R";
private static final String ATTR_ARCHIVE = "A";
private static final String ATTR_SYSTEM = "S";
private static final String ATTR_HIDDEN = "H";
private static final String SET = "+";
private static final String UNSET = "-";
private boolean haveAttr = false;

public Attrib() {
super.setExecutable("attrib");
super.setParallel(false);
}

public void setFile(File src) {
FileSet fs = new FileSet();
fs.setDir(new File(src.getParent()));
fs.createInclude().setName(src.getName());
addFileset(fs);
}

public void setDir(File src) {
FileSet fs = new FileSet();
fs.setDir(new File(src.getParent()));
fs.createInclude().setName(src.getName());
addFileset(fs);
}

/** set the ReadOnly file attribute */
public void setReadonly(boolean value) {
addArg(value, ATTR_READONLY);
}

/** set the Archive file attribute */
public void setArchive(boolean value) {
addArg(value, ATTR_ARCHIVE);
}

/** set the System file attribute */
public void setSystem(boolean value) {
addArg(value, ATTR_SYSTEM);
}

/** set the Hidden file attribute */
public void setHidden(boolean value) {
addArg(value, ATTR_HIDDEN);
}
protected void checkConfiguration() {
if (!haveAttr()) {
throw new BuildException("Missing attribute parameter",
getLocation());
}
super.checkConfiguration();
}

public void setExecutable(String e) {
throw new BuildException(taskType +
" doesn\'t support the executable attribute",
getLocation());
}

public void setCommand(String e) {
throw new BuildException(taskType +
" doesn\'t support the command attribute",
getLocation());
}

protected boolean isValidOs() {
return Os.isFamily("windows") && super.isValidOs();
}

private static String getSignString(boolean attr) {
return (attr == true ? SET : UNSET);
}
private void addArg(boolean sign, String attribute) {
createArg().setValue(getSignString(sign) + attribute);
haveAttr = true;
}
private boolean haveAttr() {
return haveAttr;
}

}

Loading…
Cancel
Save