Browse Source

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
master
Stefan Bodewig 16 years ago
parent
commit
433387b88e
4 changed files with 131 additions and 2 deletions
  1. +17
    -2
      src/main/org/apache/tools/ant/taskdefs/Delete.java
  2. +38
    -0
      src/tests/antunit/taskdefs/copy-test.xml
  3. +37
    -0
      src/tests/antunit/taskdefs/delete-test.xml
  4. +39
    -0
      src/tests/antunit/taskdefs/move-test.xml

+ 17
- 2
src/main/org/apache/tools/ant/taskdefs/Delete.java View File

@@ -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


+ 38
- 0
src/tests/antunit/taskdefs/copy-test.xml View File

@@ -150,4 +150,42 @@ public class NullByteStreamResource extends Resource {
</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>

+ 37
- 0
src/tests/antunit/taskdefs/delete-test.xml View File

@@ -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>

+ 39
- 0
src/tests/antunit/taskdefs/move-test.xml View File

@@ -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>

Loading…
Cancel
Save