diff --git a/src/etc/testcases/taskdefs/delete.xml b/src/etc/testcases/taskdefs/delete.xml
index 7b729bc78..e56f1998c 100644
--- a/src/etc/testcases/taskdefs/delete.xml
+++ b/src/etc/testcases/taskdefs/delete.xml
@@ -103,6 +103,12 @@
+
+
+
+
+
+
diff --git a/src/main/org/apache/tools/ant/taskdefs/Delete.java b/src/main/org/apache/tools/ant/taskdefs/Delete.java
index 9d2ba01db..3a7a6fa34 100644
--- a/src/main/org/apache/tools/ant/taskdefs/Delete.java
+++ b/src/main/org/apache/tools/ant/taskdefs/Delete.java
@@ -29,10 +29,14 @@ import org.apache.tools.ant.types.FileSet;
import org.apache.tools.ant.types.PatternSet;
import org.apache.tools.ant.types.ResourceCollection;
import org.apache.tools.ant.types.resources.Sort;
+import org.apache.tools.ant.types.resources.Restrict;
import org.apache.tools.ant.types.resources.BCFileSet;
import org.apache.tools.ant.types.resources.FileResource;
import org.apache.tools.ant.types.resources.comparators.Reverse;
import org.apache.tools.ant.types.resources.comparators.FileSystem;
+import org.apache.tools.ant.types.resources.comparators.ResourceComparator;
+import org.apache.tools.ant.types.resources.selectors.Exists;
+import org.apache.tools.ant.types.resources.selectors.ResourceSelector;
import org.apache.tools.ant.types.selectors.OrSelector;
import org.apache.tools.ant.types.selectors.AndSelector;
import org.apache.tools.ant.types.selectors.NotSelector;
@@ -67,6 +71,9 @@ import org.apache.tools.ant.types.selectors.modifiedselector.ModifiedSelector;
*/
public class Delete extends MatchingTask {
private static final int DELETE_RETRY_SLEEP_MILLIS = 10;
+ private static final ResourceComparator REVERSE_FILESYSTEM = new Reverse(new FileSystem());
+ private static final ResourceSelector EXISTS = new Exists();
+
protected File file = null;
protected File dir = null;
protected Vector filesets = new Vector();
@@ -525,10 +532,13 @@ public class Delete extends MatchingTask {
FileSet implicit = getImplicitFileSet();
p.add(includeEmpty ? new BCFileSet(implicit) : implicit);
}
+ Restrict e = new Restrict();
+ e.add(EXISTS);
+ e.add(p);
// delete the files in the resource collections; sort to files, then dirs
Sort s = new Sort();
- s.add(new Reverse(new FileSystem()));
- s.add(p);
+ s.add(REVERSE_FILESYSTEM);
+ s.add(e);
for (Iterator iter = s.iterator(); iter.hasNext();) {
FileResource r = (FileResource) iter.next();
if (!(r.isDirectory()) || r.getFile().list().length == 0) {
diff --git a/src/testcases/org/apache/tools/ant/taskdefs/DeleteTest.java b/src/testcases/org/apache/tools/ant/taskdefs/DeleteTest.java
index ca5eb39c9..2d5c16f25 100644
--- a/src/testcases/org/apache/tools/ant/taskdefs/DeleteTest.java
+++ b/src/testcases/org/apache/tools/ant/taskdefs/DeleteTest.java
@@ -61,4 +61,7 @@ public class DeleteTest extends BuildFileTest {
public void test9() {
executeTarget("test9");
}
+ public void test10() {
+ executeTarget("test10");
+ }
}