diff --git a/WHATSNEW b/WHATSNEW index eacf34256..151d4a371 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -10,6 +10,9 @@ Fixed bugs: * OOM caused by IH holding on to classes and thus their classloaders. Bugzilla 28283 and 33061. +* doesnt delete when defaultexcludes="false" and no includes is set + fixed. Bugzilla 40313. + Other changes: -------------- diff --git a/src/etc/testcases/taskdefs/delete.xml b/src/etc/testcases/taskdefs/delete.xml index f5da51615..46e8fc9cf 100644 --- a/src/etc/testcases/taskdefs/delete.xml +++ b/src/etc/testcases/taskdefs/delete.xml @@ -6,10 +6,11 @@ + - + @@ -142,6 +143,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/org/apache/tools/ant/taskdefs/Delete.java b/src/main/org/apache/tools/ant/taskdefs/Delete.java index c57d3cdfc..5e9f00eed 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Delete.java +++ b/src/main/org/apache/tools/ant/taskdefs/Delete.java @@ -544,6 +544,13 @@ public class Delete extends MatchingTask { resourcesToDelete.setProject(getProject()); Resources filesetDirs = new Resources(); filesetDirs.setProject(getProject()); + FileSet implicit = null; + if (usedMatchingTask && dir != null && dir.isDirectory()) { + //add the files from the default fileset: + implicit = getImplicitFileSet(); + implicit.setProject(getProject()); + filesets.add(implicit); + } for (int i = 0, size = filesets.size(); i < size; i++) { FileSet fs = (FileSet) filesets.get(i); @@ -559,15 +566,6 @@ public class Delete extends MatchingTask { fs.getDirectoryScanner().getIncludedDirectories())); } } - if (usedMatchingTask && dir != null && dir.isDirectory()) { - //add the files from the default fileset: - FileSet implicit = getImplicitFileSet(); - resourcesToDelete.add(implicit); - if (includeEmpty) { - filesetDirs.add(new ReverseDirs(dir, - implicit.getDirectoryScanner().getIncludedDirectories())); - } - } resourcesToDelete.add(filesetDirs); if (rcs != null) { // sort first to files, then dirs @@ -601,7 +599,11 @@ public class Delete extends MatchingTask { } } catch (Exception e) { handle(e); - } + } finally { + if (implicit != null) { + filesets.remove(implicit); + } + } } //************************************************************************ diff --git a/src/tests/junit/org/apache/tools/ant/taskdefs/DeleteTest.java b/src/tests/junit/org/apache/tools/ant/taskdefs/DeleteTest.java index d298cabfa..2ddc7982d 100644 --- a/src/tests/junit/org/apache/tools/ant/taskdefs/DeleteTest.java +++ b/src/tests/junit/org/apache/tools/ant/taskdefs/DeleteTest.java @@ -80,4 +80,10 @@ public class DeleteTest extends BuildFileTest { public void test15() { executeTarget("test15"); } + public void test16() { + executeTarget("test16"); + } + public void test17() { + executeTarget("test17"); + } }