Author: bodewig
Date: Fri Aug 21 07:59:55 2009
New Revision: 806442
URL: http://svn.apache.org/viewvc?rev=806442&view=rev
Log:
delete was scanning the same fileset three times, making modified selector
useless. PR 43574
Modified:
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Delete.java
ant/core/trunk/src/tests/antunit/taskdefs/copy-test.xml
ant/core/trunk/src/tests/antunit/taskdefs/delete-test.xml
ant/core/trunk/src/tests/antunit/taskdefs/move-test.xml
Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Delete.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Delete.java?rev=806442&r1=806441&r2=806442&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Delete.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Delete.java Fri Aug
21 07:59:55 2009
@@ -597,15 +597,30 @@
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
Modified: ant/core/trunk/src/tests/antunit/taskdefs/copy-test.xml
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/tests/antunit/taskdefs/copy-test.xml?rev=806442&r1=806441&r2=806442&view=diff
==============================================================================
--- ant/core/trunk/src/tests/antunit/taskdefs/copy-test.xml (original)
+++ ant/core/trunk/src/tests/antunit/taskdefs/copy-test.xml Fri Aug 21 07:59:55
2009
@@ -150,4 +150,42 @@
</copy>
</au:expectfailure>
</target>
+
+ <target name="testNotModifiedSelector"
+
description="https://issues.apache.org/bugzilla/show_bug.cgi?id=43574"
+ >
+ <mkdir dir="${input}/images"/>
+ <mkdir dir="${input}/cache"/>
+ <touch file="${input}/images/foo.jpg"/>
+ <mkdir dir="${output}"/>
+ <selector id="cache.selector">
+ <not>
+ <modified update="true"
+ seldirs="false"
+ cache="propertyfile"
+ algorithm="digest"
+ comparator="equal">
+ <param name="cache.cachefile"
+ value="${input}/cache/cache.properties"/>
+ <param name="algorithm.algorithm" value="MD5"/>
+ </modified>
+ </not>
+ </selector>
+ <au:assertFileDoesntExist file="${input}/cache/cache.properties"/>
+ <copy todir="${output}" overwrite="true">
+ <fileset dir="${input}/images">
+ <include name="*.jpg" />
+ <selector refid="cache.selector" />
+ </fileset>
+ </copy>
+ <au:assertFileExists file="${input}/cache/cache.properties"/>
+ <au:assertFileDoesntExist file="${output}/foo.jpg"/>
+ <copy todir="${output}" overwrite="true">
+ <fileset dir="${input}/images">
+ <include name="*.jpg" />
+ <selector refid="cache.selector" />
+ </fileset>
+ </copy>
+ <au:assertFileExists file="${output}/foo.jpg"/>
+ </target>
</project>
Modified: ant/core/trunk/src/tests/antunit/taskdefs/delete-test.xml
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/tests/antunit/taskdefs/delete-test.xml?rev=806442&r1=806441&r2=806442&view=diff
==============================================================================
--- ant/core/trunk/src/tests/antunit/taskdefs/delete-test.xml (original)
+++ ant/core/trunk/src/tests/antunit/taskdefs/delete-test.xml Fri Aug 21
07:59:55 2009
@@ -94,4 +94,41 @@
<touch file="${output}/foo"/>
<au:assertFileDoesntExist file="${output}/link" />
</target>
+
+ <target name="testNotModifiedSelector"
+
description="https://issues.apache.org/bugzilla/show_bug.cgi?id=43574"
+ >
+ <mkdir dir="${input}/images"/>
+ <mkdir dir="${input}/cache"/>
+ <touch file="${input}/images/foo.jpg"/>
+ <selector id="cache.selector">
+ <not>
+ <modified update="true"
+ seldirs="false"
+ cache="propertyfile"
+ algorithm="digest"
+ comparator="equal">
+ <param name="cache.cachefile"
+ value="${input}/cache/cache.properties"/>
+ <param name="algorithm.algorithm" value="MD5"/>
+ </modified>
+ </not>
+ </selector>
+ <au:assertFileDoesntExist file="${input}/cache/cache.properties"/>
+ <delete>
+ <fileset dir="${input}/images">
+ <include name="*.jpg" />
+ <selector refid="cache.selector" />
+ </fileset>
+ </delete>
+ <au:assertFileExists file="${input}/cache/cache.properties"/>
+ <au:assertFileExists file="${input}/images/foo.jpg"/>
+ <delete>
+ <fileset dir="${input}/images">
+ <include name="*.jpg" />
+ <selector refid="cache.selector" />
+ </fileset>
+ </delete>
+ <au:assertFileDoesntExist file="${input}/images/foo.jpg"/>
+ </target>
</project>
Modified: ant/core/trunk/src/tests/antunit/taskdefs/move-test.xml
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/tests/antunit/taskdefs/move-test.xml?rev=806442&r1=806441&r2=806442&view=diff
==============================================================================
--- ant/core/trunk/src/tests/antunit/taskdefs/move-test.xml (original)
+++ ant/core/trunk/src/tests/antunit/taskdefs/move-test.xml Fri Aug 21 07:59:55
2009
@@ -59,4 +59,43 @@
<au:assertFileExists file="${output}/foo/bar/baz.txt"/>
</target>
+ <target name="testNotModifiedSelector"
+
description="https://issues.apache.org/bugzilla/show_bug.cgi?id=43574"
+ >
+ <mkdir dir="${input}/images"/>
+ <mkdir dir="${input}/cache"/>
+ <touch file="${input}/images/foo.jpg"/>
+ <mkdir dir="${output}"/>
+ <selector id="cache.selector">
+ <not>
+ <modified update="true"
+ seldirs="false"
+ cache="propertyfile"
+ algorithm="digest"
+ comparator="equal">
+ <param name="cache.cachefile"
+ value="${input}/cache/cache.properties"/>
+ <param name="algorithm.algorithm" value="MD5"/>
+ </modified>
+ </not>
+ </selector>
+ <au:assertFileDoesntExist file="${input}/cache/cache.properties"/>
+ <move todir="${output}" overwrite="true">
+ <fileset dir="${input}/images">
+ <include name="*.jpg" />
+ <selector refid="cache.selector" />
+ </fileset>
+ </move>
+ <au:assertFileExists file="${input}/cache/cache.properties"/>
+ <au:assertFileExists file="${input}/images/foo.jpg"/>
+ <au:assertFileDoesntExist file="${output}/foo.jpg"/>
+ <move todir="${output}" overwrite="true">
+ <fileset dir="${input}/images">
+ <include name="*.jpg" />
+ <selector refid="cache.selector" />
+ </fileset>
+ </move>
+ <au:assertFileDoesntExist file="${input}/images/foo.jpg"/>
+ <au:assertFileExists file="${output}/foo.jpg"/>
+ </target>
</project>