diff --git a/docs/manual/CoreTasks/defaultexcludes.html b/docs/manual/CoreTasks/defaultexcludes.html index 930426d8e..c9395f8a5 100644 --- a/docs/manual/CoreTasks/defaultexcludes.html +++ b/docs/manual/CoreTasks/defaultexcludes.html @@ -25,18 +25,24 @@ build, and prints out the current default excludes if desired. echo whether or not to print out the default excludes.(defaults to false) - atribute "true" required if no - other argument specified + attribute "true" required if no + other attribute specified + + + default + go back to hard wired default excludes + attribute "true" required if no + if no other attribute is specified add the pattern to add to the default excludes - if no other atribute is specified + if no other attribute is specified remove remove the specified pattern from the default excludes - if no other atribute is specified + if no other attribute is specified @@ -59,7 +65,7 @@ backup files and then restore normal behavior

(do several fileset based tasks here) - <defaultexcludes add="**/*~"/> + <defaultexcludes default="true"/> diff --git a/src/etc/testcases/taskdefs/defaultexcludes.xml b/src/etc/testcases/taskdefs/defaultexcludes.xml index cf608e851..6813d71e9 100644 --- a/src/etc/testcases/taskdefs/defaultexcludes.xml +++ b/src/etc/testcases/taskdefs/defaultexcludes.xml @@ -7,13 +7,11 @@ - - + - - + diff --git a/src/main/org/apache/tools/ant/DirectoryScanner.java b/src/main/org/apache/tools/ant/DirectoryScanner.java index 6061e4684..c77eb8c14 100644 --- a/src/main/org/apache/tools/ant/DirectoryScanner.java +++ b/src/main/org/apache/tools/ant/DirectoryScanner.java @@ -205,11 +205,8 @@ public class DirectoryScanner * @see #addDefaultExcludes() */ private static Vector defaultExcludes = new Vector(); - static { - for (int i = 0; i < DEFAULTEXCLUDES.length; i++) { - defaultExcludes.add(DEFAULTEXCLUDES[i]); - } + resetDefaultExcludes(); } /** The base directory to be scanned. */ @@ -454,6 +451,19 @@ public class DirectoryScanner return defaultExcludes.remove(s); } + /** + * Go back to the hard wired default exclude patterns + * + * @since Ant 1.6 + */ + public static void resetDefaultExcludes() { + defaultExcludes = new Vector(); + + for (int i = 0; i < DEFAULTEXCLUDES.length; i++) { + defaultExcludes.add(DEFAULTEXCLUDES[i]); + } + } + /** * Sets the base directory to be scanned. This is the directory which is * scanned recursively. All '/' and '\' characters are replaced by diff --git a/src/main/org/apache/tools/ant/taskdefs/DefaultExcludes.java b/src/main/org/apache/tools/ant/taskdefs/DefaultExcludes.java index 4941662ec..750178def 100644 --- a/src/main/org/apache/tools/ant/taskdefs/DefaultExcludes.java +++ b/src/main/org/apache/tools/ant/taskdefs/DefaultExcludes.java @@ -71,7 +71,7 @@ import org.apache.tools.ant.DirectoryScanner; public class DefaultExcludes extends Task { private String add = ""; private String remove = ""; - + private boolean defaultrequested = false; private boolean echo = false; // by default, messages are always displayed @@ -83,11 +83,14 @@ public class DefaultExcludes extends Task { * @exception BuildException if someting goes wrong with the build */ public void execute() throws BuildException { - if (add.equals("") && remove.equals("") && (echo == false)) { + if (defaultrequested == false && add.equals("") && remove.equals("") && (echo == false)) { throw new BuildException(" task must set " - + "at least one atribute (echo=\"false\"" + + "at least one attribute (echo=\"false\"" + " doesn't count since that is the default"); } + if (defaultrequested == true) { + DirectoryScanner.resetDefaultExcludes(); + } if (!add.equals("")) { DirectoryScanner.addDefaultExclude(add); } @@ -105,6 +108,14 @@ public class DefaultExcludes extends Task { } } + /** + * go back to standard default patterns + * + * @param def if true go back to default patterns + */ + public void setDefault(boolean def) { + defaultrequested = def; + } /** * Pattern to add to the default excludes * diff --git a/src/testcases/org/apache/tools/ant/taskdefs/DefaultExcludesTest.java b/src/testcases/org/apache/tools/ant/taskdefs/DefaultExcludesTest.java index 9c66475bd..eb2d49858 100644 --- a/src/testcases/org/apache/tools/ant/taskdefs/DefaultExcludesTest.java +++ b/src/testcases/org/apache/tools/ant/taskdefs/DefaultExcludesTest.java @@ -55,6 +55,7 @@ package org.apache.tools.ant.taskdefs; import org.apache.tools.ant.BuildFileTest; +import org.apache.tools.ant.DirectoryScanner; /** * @author Gus Heck @@ -71,59 +72,73 @@ public class DefaultExcludesTest extends BuildFileTest { // 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"); + String[] expected = { + "**/*~", + "**/#*#", + "**/.#*", + "**/%*%", + "**/._*", + "**/CVS", + "**/CVS/**", + "**/.cvsignore", + "**/SCCS", + "**/SCCS/**", + "**/vssver.scc", + "**/.svn", + "**/.svn/**", + "**/.DS_Store"}; + project.executeTarget("test1"); + assertEquals("current default excludes", expected, DirectoryScanner.getDefaultExcludes()); } // 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"); // foo added + String[] expected = { + "**/*~", + "**/#*#", + "**/.#*", + "**/%*%", + "**/._*", + "**/CVS", + "**/CVS/**", + "**/.cvsignore", + "**/SCCS", + "**/SCCS/**", + "**/vssver.scc", + "**/.svn", + "**/.svn/**", + "**/.DS_Store", + "foo"}; + project.executeTarget("test2"); + assertEquals("current default excludes", expected, DirectoryScanner.getDefaultExcludes()); } // 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"); + String[] expected = { + "**/*~", + "**/#*#", + "**/.#*", + "**/%*%", + "**/._*", + //CVS missing + "**/CVS/**", + "**/.cvsignore", + "**/SCCS", + "**/SCCS/**", + "**/vssver.scc", + "**/.svn", + "**/.svn/**", + "**/.DS_Store"}; + project.executeTarget("test3"); + assertEquals("current default excludes", expected, DirectoryScanner.getDefaultExcludes()); + } + private void assertEquals(String message, String[] expected, String[] actual) { + // check that both arrays have the same size + assertEquals(message + " : string array length match", expected.length, actual.length); + for (int counter=0; counter