Browse Source

A new task that allows users to modify the list of default excludes.

PR: 12700
Submitted by:	Gus Heck <gus dot heck at olin dot edu>


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274554 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 22 years ago
parent
commit
f1bc629e34
9 changed files with 439 additions and 28 deletions
  1. +3
    -0
      WHATSNEW
  2. +73
    -0
      docs/manual/CoreTasks/defaultexcludes.html
  3. +1
    -0
      docs/manual/coretasklist.html
  4. +8
    -2
      docs/manual/dirtasks.html
  5. +19
    -0
      src/etc/testcases/taskdefs/defaultexcludes.xml
  6. +66
    -26
      src/main/org/apache/tools/ant/DirectoryScanner.java
  7. +139
    -0
      src/main/org/apache/tools/ant/taskdefs/DefaultExcludes.java
  8. +1
    -0
      src/main/org/apache/tools/ant/taskdefs/defaults.properties
  9. +129
    -0
      src/testcases/org/apache/tools/ant/taskdefs/DefaultExcludesTest.java

+ 3
- 0
WHATSNEW View File

@@ -302,6 +302,9 @@ Other changes:
in <vajload> by using special wildcard characters. Also fixes
Bugzilla Report 2236.

* Users can now modify the list of default excludes using the new
defaultexcludes task. Bugzilla Report 12700.

Changes from Ant 1.5.2 to Ant 1.5.3
===================================



+ 73
- 0
docs/manual/CoreTasks/defaultexcludes.html View File

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

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

<body>

<h2><a name="echo">DefaultExcludes</a></h2>

<p><em>since Ant 1.6</em></p>

<h3>Description</h3>
<p>Alters the default excludes for all subsequent processing in the
build, and prints out the current default excludes if desired.

<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">echo</td>
<td valign="top">whether or not to print out the default excludes.(defaults to false)</td>
<td valign="top" align="center">atribute "true" required if no
other argument specified</td>
</tr>
<tr>
<td valign="top">add</td>
<td valign="top">the pattern to add to the default excludes</td>
<td valign="top" align="center">if no other atribute is specified</td>
</tr>
<tr>
<td valign="top">remove</td>
<td valign="top">remove the specified pattern from the default excludes</td>
<td valign="top" align="center">if no other atribute is specified</td>
</tr>
</table>

<h3>Examples</h3>

<p>Print out the default excludes</p>

<pre> &lt;defaultexcludes echo=&quot;true&quot;/&gt;</pre>

<p>Print out the default excludes and exclude all *.bak files in
<strong>all</strong> further processing</p>

<pre> &lt;defaultexcludes echo=&quot;true&quot; add=&quot;**/*.bak&quot;/&gt;</pre>

<p>Silently allow several fileset based tasks to operate on emacs
backup files and then restore normal behavior</p>

<pre>
&lt;defaultexcludes remove=&quot;**/*~&quot;/&gt;

(do several fileset based tasks here)

&lt;defaultexcludes add=&quot;**/*~&quot;/&gt;
</pre>


<hr>

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

</body>
</html>


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

@@ -36,6 +36,7 @@
<a href="CoreTasks/changelog.html">CvsChangeLog</a><br>
<a href="CoreTasks/cvspass.html">CVSPass</a><br>
<a href="CoreTasks/cvstagdiff.html">CvsTagDiff</a><br>
<a href="CoreTasks/defaultexcludes.html">Defaultexcludes</a><br>
<a href="CoreTasks/delete.html">Delete</a><br>
<a href="CoreTasks/deltree.html"><i>Deltree</i></a><br>
<a href="CoreTasks/dependset.html">Dependset</a><br>


+ 8
- 2
docs/manual/dirtasks.html View File

@@ -261,8 +261,14 @@ directory-based tasks. They are:</p>
**/.svn/**
**/.DS_Store
</pre>
<p>If you do not want these default excludes applied, you may disable them
with the <code>defaultexcludes=&quot;no&quot;</code> attribute.</p>
<p>If you do not want these default excludes applied, you may disable
them with the <code>defaultexcludes=&quot;no&quot;</code>
attribute.</p>

<p>This is the default list, note that you can modify the list of
default excludes by using the <a
href="CoreTasks/defaultexcludes.html">defaultexcludes</a> task.</p>

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


+ 19
- 0
src/etc/testcases/taskdefs/defaultexcludes.xml View File

@@ -0,0 +1,19 @@
<?xml version="1.0"?>

<project name="echo-test" basedir="." default="test1">

<target name="test1">
<defaultexcludes echo="true"/>
</target>

<target name="test2">
<defaultexcludes add="foo" echo="true"/>
<defaultexcludes remove="foo" echo="false"/>
</target>

<target name="test3">
<defaultexcludes remove="**/CVS" echo="true"/>
<defaultexcludes add="**/CVS" echo="false"/>
</target>

</project>

+ 66
- 26
src/main/org/apache/tools/ant/DirectoryScanner.java View File

@@ -155,38 +155,34 @@ import org.apache.tools.ant.util.FileUtils;
public class DirectoryScanner
implements FileScanner, SelectorScanner, ResourceFactory {


/**
* Patterns which should be excluded by default.
*
* @see #addDefaultExcludes()
*/
protected static final String[] DEFAULTEXCLUDES = {
// Miscellaneous typical temporary files
"**/*~",
"**/#*#",
"**/.#*",
"**/%*%",
"**/._*",
private static Vector defaultExcludes = new Vector();

// CVS
"**/CVS",
"**/CVS/**",
"**/.cvsignore",
static {
defaultExcludes.add("**/*~");
defaultExcludes.add("**/#*#");
defaultExcludes.add("**/.#*");
defaultExcludes.add("**/%*%");
defaultExcludes.add("**/._*");

// SCCS
"**/SCCS",
"**/SCCS/**",
defaultExcludes.add("**/CVS");
defaultExcludes.add("**/CVS/**");
defaultExcludes.add("**/.cvsignore");

// Visual SourceSafe
"**/vssver.scc",
defaultExcludes.add("**/SCCS");
defaultExcludes.add("**/SCCS/**");

// Subversion
"**/.svn",
"**/.svn/**",
defaultExcludes.add("**/vssver.scc");

// Mac
"**/.DS_Store"
};
defaultExcludes.add("**/.svn");
defaultExcludes.add("**/.svn/**");
defaultExcludes.add("**/.DS_Store");
}

/** The base directory to be scanned. */
protected File basedir;
@@ -381,6 +377,48 @@ public class DirectoryScanner
return SelectorUtils.match(pattern, str, isCaseSensitive);
}


/**
* Get the list of patterns that should be excluded by default.
*
* @return An array of <code>String</code> based on the current
* contents of the <code>defaultExcludes</code>
* <code>Vector</code>.
*/
public static String[] getDefaultExcludes() {
return (String[]) defaultExcludes.toArray(new String[defaultExcludes.size()]);
}

/**
* Add a pattern to the default excludes unless it is already a
* default exclude.
*
* @param s A string to add as an exclude pattern.
* @return <code>true</code> if the string was added
* <code>false</code> if it already
* existed.
*/
public static boolean addDefaultExclude(String s){
if (defaultExcludes.indexOf(s) == -1) {
defaultExcludes.add(s);
return true;
}
return false;
}

/**
* Remove a string if it is a default exclude.
*
* @param s The string to attempt to remove.
* @return <code>true</code> if <code>s</code> was a default
* exclude (and thus was removed),
* <code>false</code> if <code>s</code> was not
* in the default excludes list to begin with
*/
public static boolean removeDefaultExclude(String s) {
return defaultExcludes.remove(s);
}

/**
* Sets the base directory to be scanned. This is the directory which is
* scanned recursively. All '/' and '\' characters are replaced by
@@ -938,13 +976,15 @@ public class DirectoryScanner
public void addDefaultExcludes() {
int excludesLength = excludes == null ? 0 : excludes.length;
String[] newExcludes;
newExcludes = new String[excludesLength + DEFAULTEXCLUDES.length];
newExcludes = new String[excludesLength + defaultExcludes.size()];
if (excludesLength > 0) {
System.arraycopy(excludes, 0, newExcludes, 0, excludesLength);
}
for (int i = 0; i < DEFAULTEXCLUDES.length; i++) {
newExcludes[i + excludesLength] = DEFAULTEXCLUDES[i].replace('/',
File.separatorChar).replace('\\', File.separatorChar);
String[] defaultExcludesTemp = getDefaultExcludes();
for (int i = 0; i < defaultExcludesTemp.length; i++) {
newExcludes[i + excludesLength] = defaultExcludesTemp[i].
replace('/', File.separatorChar).
replace('\\', File.separatorChar);
}
excludes = newExcludes;
}


+ 139
- 0
src/main/org/apache/tools/ant/taskdefs/DefaultExcludes.java View File

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

import org.apache.tools.ant.Task;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.types.EnumeratedAttribute;
/**
* Alters the default excludes for the <strong>entire</strong> build..
*
* @author Gus Heck &lt;gus.heck@olin.edu&gt;
*
* @since Ant 1.6
*
* @ant.task category="utility"
*/
public class DefaultExcludes extends Task {
private String add = "";
private String remove = "";

private boolean echo = false;
// by default, messages are always displayed
private int logLevel = Project.MSG_WARN;
/**
* Does the work.
*
* @exception BuildException if someting goes wrong with the build
*/
public void execute() throws BuildException {
if (add.equals("") && remove.equals("") && (echo == false)) {
throw new BuildException("<defaultexcludes> task must set "+
"at least one atribute (echo=\"false\""+
" doesn't count since that is the "+
"default");
}
if (!add.equals("")) {
DirectoryScanner.addDefaultExclude(add);
}
if (!remove.equals("")) {
DirectoryScanner.removeDefaultExclude(remove);
}
if (echo == true) {
StringBuffer message = new StringBuffer("Current Default "+
"Excludes:\n");
String[] excludes = DirectoryScanner.getDefaultExcludes();
for (int i=0;i<excludes.length;i++) {
message.append(" " + excludes[i] + "\n");
}
log(message.toString(), logLevel);
}
}

/**
* Pattern to add to the default excludes
*
* @param add Sets the value for the pattern to exclude.
*/
public void setAdd(String add) {
this.add = add;
}

/**
* Pattern to remove from the default excludes.
*
* @param msg Sets the value for the pattern that
* should nolonger be excluded.
*/
public void setRemove(String remove) {
this.remove = remove;
}

/**
* If true, echo the default excludes.
*
* @param echo whether or not to echo the contents of
* the default excludes.
*/
public void setEcho(boolean echo) {
this.echo = echo;
}


}

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

@@ -75,6 +75,7 @@ import=org.apache.tools.ant.taskdefs.ImportTask
whichresource=org.apache.tools.ant.taskdefs.WhichResource
subant=org.apache.tools.ant.taskdefs.SubAnt
sync=org.apache.tools.ant.taskdefs.Sync
defaultexcludes=org.apache.tools.ant.taskdefs.DefaultExcludes

# optional tasks
image=org.apache.tools.ant.taskdefs.optional.image.Image


+ 129
- 0
src/testcases/org/apache/tools/ant/taskdefs/DefaultExcludesTest.java View File

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

import org.apache.tools.ant.BuildFileTest;

/**
* @author Gus Heck <gus.heck@olin.edu>
*/
public class DefaultExcludesTest extends BuildFileTest {
public DefaultExcludesTest(String name) {
super(name);
}
public void setUp() {
configureProject("src/etc/testcases/taskdefs/defaultexcludes.xml");
}
// Output the default excludes
public void test1() {
expectLog("test1", "Current Default Excludes:\n"+
" **/*~\n"+
" **/#*#\n"+
" **/.#*\n"+
" **/%*%\n"+
" **/._*\n"+
" **/CVS\n"+
" **/CVS/**\n"+
" **/.cvsignore\n"+
" **/SCCS\n"+
" **/SCCS/**\n"+
" **/vssver.scc\n"+
" **/.svn\n"+
" **/.svn/**\n"+
" **/.DS_Store\n");
}
// adding something to the excludes'
public void test2() {
expectLog("test2", "Current Default Excludes:\n"+
" **/*~\n"+
" **/#*#\n"+
" **/.#*\n"+
" **/%*%\n"+
" **/._*\n"+
" **/CVS\n"+
" **/CVS/**\n"+
" **/.cvsignore\n"+
" **/SCCS\n"+
" **/SCCS/**\n"+
" **/vssver.scc\n"+
" **/.svn\n"+
" **/.svn/**\n"+
" **/.DS_Store\n"+
" foo\n"); // foo added
}

// removing something from the defaults
public void test3() {
expectLog("test3", "Current Default Excludes:\n"+
" **/*~\n"+
" **/#*#\n"+
" **/.#*\n"+
" **/%*%\n"+
" **/._*\n"+
//CVS missing
" **/CVS/**\n"+
" **/.cvsignore\n"+
" **/SCCS\n"+
" **/SCCS/**\n"+
" **/vssver.scc\n"+
" **/.svn\n"+
" **/.svn/**\n"+
" **/.DS_Store\n");
}
}

Loading…
Cancel
Save