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