Browse Source

New tasks <chown> and <chgrp>

PR: 9809
Submitted by:	Gus Heck <gus.heck at olin.edu>


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@273508 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 22 years ago
parent
commit
8f788f7a2c
8 changed files with 554 additions and 0 deletions
  1. +2
    -0
      WHATSNEW
  2. +95
    -0
      docs/manual/OptionalTasks/chgrp.html
  3. +94
    -0
      docs/manual/OptionalTasks/chown.html
  4. +2
    -0
      docs/manual/optionaltasklist.html
  5. +2
    -0
      src/main/org/apache/tools/ant/taskdefs/defaults.properties
  6. +123
    -0
      src/main/org/apache/tools/ant/taskdefs/optional/unix/AbstractAccessTask.java
  7. +117
    -0
      src/main/org/apache/tools/ant/taskdefs/optional/unix/Chgrp.java
  8. +119
    -0
      src/main/org/apache/tools/ant/taskdefs/optional/unix/Chown.java

+ 2
- 0
WHATSNEW View File

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

* new task <symlink> that creates and maintains symbolic links.

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

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



+ 95
- 0
docs/manual/OptionalTasks/chgrp.html View File

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

<head>
<meta http-equiv="Content-Language" content="en-us">
<title>Chgrp Task</title>
</head>

<body>

<h2><a name="Chgrp">Chgrp</a></h2>
<h3>Description</h3>

<p>Changes the group of a file or all files inside specified
directories. Right now it has effect only under Unix. The group
atribute is equivalent to the coresponding argument for the chgrp
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 group 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 group must be changed.</td>
</tr>
<tr>
<td valign="top">group</td>
<td valign="top">the new group.</td>
<td valign="top" align="center">Yes</td>
</tr>
<tr>
<td valign="top">parallel</td>
<td valign="top">process all specified files using a single
<code>chgrp</code> command. Defaults to true.</td>
<td valign="top" align="center">No</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 group 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;chgrp file=&quot;${dist}/start.sh&quot; group=&quot;coders&quot;/&gt;</code></p>
</blockquote>
<p>makes the &quot;start.sh&quot; file belong to the coders group on a
UNIX system.</p>
<blockquote>
<pre>
&lt;chgrp owner=&quot;coderjoe&quot;&gt;
&lt;fileset dir=&quot;${dist}/bin&quot; includes=&quot;**/*.sh&quot;/&gt;
&lt;/chgrp&gt;
</pre>
</blockquote>
<p>makes all &quot;.sh&quot; files below <code>${dist}/bin</code>
belong to the coders group on a UNIX system.</p>
<blockquote>
<pre>
&lt;chgrp group=&quot;coders&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;/chgrp&gt;
</pre>
</blockquote>
<p>makes all files below <code>shared/sources1</code> (except those
below any directory named trial) belong to the coders 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
group.</p>

<hr>
<p align="center">Copyright &copy; 2002 Apache Software
Foundation. All rights Reserved.</p>

</body>
</html>


+ 94
- 0
docs/manual/OptionalTasks/chown.html View File

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

<head>
<meta http-equiv="Content-Language" content="en-us">
<title>Chown Task</title>
</head>

<body>

<h2><a name="Chown">Chown</a></h2>
<h3>Description</h3>

<p>Changes the owner of a file or all files inside specified
directories. Right now it has effect only under Unix. The owner
atribute is equivalent to the coresponding argument for the chown
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 owner 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 of which the owner must be changed.</td>
</tr>
<tr>
<td valign="top">owner</td>
<td valign="top">the new owner.</td>
<td valign="top" align="center">Yes</td>
</tr>
<tr>
<td valign="top">parallel</td>
<td valign="top">process all specified files using a single
<code>chown</code> command. Defaults to true.</td>
<td valign="top" align="center">No</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 owner 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;chown file=&quot;${dist}/start.sh&quot; owner=&quot;coderjoe&quot;/&gt;</code></p>
</blockquote>
<p>makes the &quot;start.sh&quot; file belong to coderjoe on a
UNIX system.</p>
<blockquote>
<pre>
&lt;chown owner=&quot;coderjoe&quot;&gt;
&lt;fileset dir=&quot;${dist}/bin&quot; includes=&quot;**/*.sh&quot;/&gt;
&lt;/chown&gt;
</pre>
</blockquote>
<p>makes all &quot;.sh&quot; files below <code>${dist}/bin</code>
belong to coderjoe on a UNIX system.</p>
<blockquote>
<pre>
&lt;chown owner=&quot;coderjoe&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;/chown&gt;
</pre>
</blockquote>
<p>makes all files below <code>shared/sources1</code> (except those
below any directory named trial) belong to coderjoe on a UNIX
system. In addition all files belonging to a FileSet
with <code>id</code> <code>other.shared.sources</code> get the same
owner.</p>
<hr>
<p align="center">Copyright &copy; 2002 Apache Software
Foundation. All rights Reserved.</p>

</body>
</html>


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

@@ -18,6 +18,8 @@
<a href="OptionalTasks/dotnet.html">.NET Tasks</a><br>
<a href="OptionalTasks/antlr.html">ANTLR</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>
<a href="OptionalTasks/clearcase.html">Clearcase Tasks</a><br>
<a href="OptionalTasks/ccm.html">Continuus/Synergy Tasks</a><br>
<a href="OptionalTasks/depend.html">Depend</a><br>


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

@@ -172,6 +172,8 @@ jarlib-resolve=org.apache.tools.ant.taskdefs.optional.extension.JarLibResolveTas
setproxy=org.apache.tools.ant.taskdefs.optional.net.SetProxy
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

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


+ 123
- 0
src/main/org/apache/tools/ant/taskdefs/optional/unix/AbstractAccessTask.java View File

@@ -0,0 +1,123 @@
/*
* 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/>.
*/

/*
* Since the initial version of this file was deveolped on the clock on
* an NSF grant I should say the following boilerplate:
*
* This material is based upon work supported by the National Science
* Foundaton under Grant No. EIA-0196404. Any opinions, findings, and
* conclusions or recommendations expressed in this material are those
* of the author and do not necessarily reflect the views of the
* National Science Foundation.
*/

package org.apache.tools.ant.taskdefs.optional.unix;

import java.io.File;

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

/**
* @author Patrick G. Heck <a href="mailto:gus.heck@olin.edu">gus.heck@olin.edu</a>
* @since Ant 1.6
*
* @ant.task category="filesystem"
*/
public abstract class AbstractAccessTask
extends org.apache.tools.ant.taskdefs.ExecuteOn {

/**
* Chmod task for setting file and directory permissions.
*/
public AbstractAccessTask() {
super.setParallel(true);
super.setSkipEmptyFilesets(true);
}

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);
}

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

public void setSkipEmptyFilesets(boolean skip) {
throw new BuildException(taskType + " doesn\'t support the "
+ "skipemptyfileset attribute",
getLocation());
}

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

+ 117
- 0
src/main/org/apache/tools/ant/taskdefs/optional/unix/Chgrp.java View File

@@ -0,0 +1,117 @@
/*
* 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/>.
*/

/*
* Since the initial version of this file was deveolped on the clock on
* an NSF grant I should say the following boilerplate:
*
* This material is based upon work supported by the National Science
* Foundaton under Grant No. EIA-0196404. Any opinions, findings, and
* conclusions or recommendations expressed in this material are those
* of the author and do not necessarily reflect the views of the
* National Science Foundation.
*/

package org.apache.tools.ant.taskdefs.optional.unix;

import org.apache.tools.ant.BuildException;

/**
* Chgrp equivalent for unix-like environments.
*
* @author Patrick G. Heck
* <a href="mailto:gus.heck@olin.edu">gus.heck@olin.edu</a>
*
* @since Ant 1.6
*
* @ant.task category="filesystem"
*/
public class Chgrp extends AbstractAccessTask {

private boolean haveGroup = false;

/**
* Chgrp task for setting unix group of a file.
*/
public Chgrp() {
super.setExecutable("chgrp");
}

/**
* Set the group atribute.
*
* @param group The new group for the file(s) or directory(ies)
*/
public void setGroup(String group) {
createArg().setValue(group);
haveGroup = true;
}

protected void checkConfiguration() {
if (!haveGroup) {
throw new BuildException("Required attribute group not set in "+
"chgrp", getLocation());
}
super.checkConfiguration();
}

/**
* We don't want to expose the executable atribute, so overide it.
*/
public void setExecutable(String e) {
throw new BuildException(taskType +
" doesn\'t support the executable attribute",
getLocation());
}
}

+ 119
- 0
src/main/org/apache/tools/ant/taskdefs/optional/unix/Chown.java View File

@@ -0,0 +1,119 @@
/*
* 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/>.
*/

/*
* Since the initial version of this file was deveolped on the clock on
* an NSF grant I should say the following boilerplate:
*
* This material is based upon work supported by the National Science
* Foundaton under Grant No. EIA-0196404. Any opinions, findings, and
* conclusions or recommendations expressed in this material are those
* of the author and do not necessarily reflect the views of the
* National Science Foundation.
*/

package org.apache.tools.ant.taskdefs.optional.unix;

import java.io.File;

import org.apache.tools.ant.BuildException;

/**
* Chown equivalent for unix-like environments.
*
* @author Patrick G. Heck
* <a href="mailto:gus.heck@olin.edu">gus.heck@olin.edu</a>
*
* @since Ant 1.6
*
* @ant.task category="filesystem"
*/
public class Chown extends AbstractAccessTask {

private boolean haveOwner = false;

/**
* Chown task for setting file and directory permissions.
*/
public Chown() {
super.setExecutable("chown");
}

/**
* Set the owner atribute.
*
* @param owner The new owner for the file(s) or directory(ies)
*/
public void setOwner(String owner) {
createArg().setValue(owner);
haveOwner = true;
}

protected void checkConfiguration() {
if (!haveOwner) {
throw new BuildException("Required attribute owner not set in" +
" chown", getLocation());
}
super.checkConfiguration();
}

/**
* We don't want to expose the executable atribute, so overide it.
*/
public void setExecutable(String e) {
throw new BuildException(taskType +
" doesn\'t support the executable attribute",
getLocation());
}
}

Loading…
Cancel
Save