diff --git a/WHATSNEW b/WHATSNEW index 054242e25..371512219 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -91,6 +91,8 @@ Other changes: * new tasks and which are wrappers of the Unix commands. +* new task to change file attributes on Windows systems. + Changes from Ant 1.5.1Beta1 to 1.5.1 ==================================== diff --git a/docs/manual/OptionalTasks/attrib.html b/docs/manual/OptionalTasks/attrib.html new file mode 100644 index 000000000..f71f93852 --- /dev/null +++ b/docs/manual/OptionalTasks/attrib.html @@ -0,0 +1,97 @@ + + + + +Ant User Manual + + + + +

Attrib

+

Description

+ +

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.

+ +

FileSet can be specified +using nested <fileset> elements.

+ +

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescriptionRequired
filethe file of which the permissions must be + changed.one of the two or + nested <fileset> elements.
dirthe directory whose permissions must be + changed.
readonlythe readonly permission.at least one of the four.
archivethe archive permission.
systemthe system permission.
hiddenthe hidden permission.
typeOne of file, dir or both. If set to + file, only the permissions of plain files are going to be changed. + If set to dir, only the directories are considered.No, default is file
+

Examples

+
+

<attrib file="${dist}/run.bat" readonly="true" hidden="true"/>

+
+

makes the "run.bat" file read-only and hidden.

+
+
<attrib readonly="false">
+  <fileset dir="${meta.inf}" includes="**/*.xml"/>
+<attrib>
+
+
+

makes all ".xml" files below ${meta.inf} readable.

+
+
+<attrib readonly="true" archive="true">
+  <fileset dir="shared/sources1">
+    <exclude name="**/trial/**"/>
+  </fileset>
+  <fileset refid="other.shared.sources"/>
+</attrib>
+
+
+

makes all files below shared/sources1 (except those below any + directory named trial) read-only and archived. In addition all files belonging + to a FileSet with id other.shared.sources get the + same attributes.

+
+

Copyright © 2002 Apache Software +Foundation. All rights Reserved.

+ + + + diff --git a/docs/manual/optionaltasklist.html b/docs/manual/optionaltasklist.html index 638dafb43..34758bcc4 100644 --- a/docs/manual/optionaltasklist.html +++ b/docs/manual/optionaltasklist.html @@ -17,6 +17,7 @@

Optional Tasks

.NET Tasks
ANTLR
+Attrib
Cab
Chgrp
Chown
diff --git a/src/main/org/apache/tools/ant/taskdefs/defaults.properties b/src/main/org/apache/tools/ant/taskdefs/defaults.properties index caa877ad4..153adc976 100644 --- a/src/main/org/apache/tools/ant/taskdefs/defaults.properties +++ b/src/main/org/apache/tools/ant/taskdefs/defaults.properties @@ -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 diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/windows/Attrib.java b/src/main/org/apache/tools/ant/taskdefs/optional/windows/Attrib.java new file mode 100644 index 000000000..4df666a1d --- /dev/null +++ b/src/main/org/apache/tools/ant/taskdefs/optional/windows/Attrib.java @@ -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 + * . + */ + +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 Jerome Lacoste + */ +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; + } + +}