From 433387b88ebe29602937982ca3eac4f78d233180 Mon Sep 17 00:00:00 2001 From: Stefan Bodewig Date: Fri, 21 Aug 2009 07:59:55 +0000 Subject: [PATCH] delete was scanning the same fileset three times, making modified selector useless. PR 43574 git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@806442 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/tools/ant/taskdefs/Delete.java | 19 ++++++++- src/tests/antunit/taskdefs/copy-test.xml | 38 ++++++++++++++++++ src/tests/antunit/taskdefs/delete-test.xml | 37 ++++++++++++++++++ src/tests/antunit/taskdefs/move-test.xml | 39 +++++++++++++++++++ 4 files changed, 131 insertions(+), 2 deletions(-) diff --git a/src/main/org/apache/tools/ant/taskdefs/Delete.java b/src/main/org/apache/tools/ant/taskdefs/Delete.java index 9defc1c92..b1008494a 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Delete.java +++ b/src/main/org/apache/tools/ant/taskdefs/Delete.java @@ -597,15 +597,30 @@ public class Delete extends MatchingTask { fs = (FileSet) fs.clone(); fs.setProject(getProject()); } - File fsDir = fs.getDir(); + final File fsDir = fs.getDir(); if (fsDir == null) { throw new BuildException( "File or Resource without directory or file specified"); } else if (!fsDir.isDirectory()) { handle("Directory does not exist: " + fsDir); } else { - resourcesToDelete.add(fs); DirectoryScanner ds = fs.getDirectoryScanner(); + // the previous line has already scanned the + // filesystem, in order to avoid a rescan when later + // iterating, capture the results now and store them + final String[] files = ds.getIncludedFiles(); + resourcesToDelete.add(new ResourceCollection() { + public boolean isFilesystemOnly() { + return true; + } + public int size() { + return files.length; + } + public Iterator iterator() { + return new FileResourceIterator(getProject(), + fsDir, files); + } + }); if (includeEmpty) { filesetDirs.add(new ReverseDirs(getProject(), fsDir, ds diff --git a/src/tests/antunit/taskdefs/copy-test.xml b/src/tests/antunit/taskdefs/copy-test.xml index 5e1458687..6ca8cecda 100644 --- a/src/tests/antunit/taskdefs/copy-test.xml +++ b/src/tests/antunit/taskdefs/copy-test.xml @@ -150,4 +150,42 @@ public class NullByteStreamResource extends Resource { + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/antunit/taskdefs/delete-test.xml b/src/tests/antunit/taskdefs/delete-test.xml index e7c335674..da91e4b60 100644 --- a/src/tests/antunit/taskdefs/delete-test.xml +++ b/src/tests/antunit/taskdefs/delete-test.xml @@ -94,4 +94,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/tests/antunit/taskdefs/move-test.xml b/src/tests/antunit/taskdefs/move-test.xml index 1113a320d..2450559b1 100644 --- a/src/tests/antunit/taskdefs/move-test.xml +++ b/src/tests/antunit/taskdefs/move-test.xml @@ -59,4 +59,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +