Browse Source

fix regression: dependset fails if target directory does not exist

BZ 40916


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@477976 13f79535-47bb-0310-9956-ffa450edef68
master
Matthew Jason Benson 19 years ago
parent
commit
6405019ad4
2 changed files with 37 additions and 1 deletions
  1. +25
    -1
      src/main/org/apache/tools/ant/taskdefs/DependSet.java
  2. +12
    -0
      src/tests/antunit/taskdefs/dependset/test.xml

+ 25
- 1
src/main/org/apache/tools/ant/taskdefs/DependSet.java View File

@@ -18,7 +18,9 @@

package org.apache.tools.ant.taskdefs;

import java.io.File;
import java.util.Iterator;
import java.util.Vector;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.types.Path;
@@ -30,6 +32,7 @@ import org.apache.tools.ant.types.ResourceCollection;
import org.apache.tools.ant.types.resources.Sort;
import org.apache.tools.ant.types.resources.Union;
import org.apache.tools.ant.types.resources.Restrict;
import org.apache.tools.ant.types.resources.Resources;
import org.apache.tools.ant.types.resources.FileResource;
import org.apache.tools.ant.types.resources.selectors.Not;
import org.apache.tools.ant.types.resources.selectors.Exists;
@@ -108,6 +111,27 @@ public class DependSet extends MatchingTask {
super(rc, DATE_DESC);
}
}
private static class HideMissingBasedir implements ResourceCollection {
private FileSet fs;

private HideMissingBasedir(FileSet fs) {
this.fs = fs;
}
public Iterator iterator() {
return basedirExists() ? fs.iterator() : Resources.EMPTY_ITERATOR;
}
public int size() {
return basedirExists() ? fs.size() : 0;
}
public boolean isFilesystemOnly() {
return true;
}
private boolean basedirExists() {
File basedir = fs.getDir();
//trick to evoke "basedir not set" if null:
return basedir == null || basedir.exists();
}
}

private Union sources = null;
private Path targets = null;
@@ -151,7 +175,7 @@ public class DependSet extends MatchingTask {
* @param fs the FileSet to add.
*/
public void addTargetfileset(FileSet fs) {
createTargets().add(fs);
createTargets().add(new HideMissingBasedir(fs));
}

/**


+ 12
- 0
src/tests/antunit/taskdefs/dependset/test.xml View File

@@ -93,8 +93,20 @@
</au:assertTrue>
</target>

<target name="test9">
<au:assertFalse>
<available file="test9dir" type="dir" />
</au:assertFalse>
<touch file="test9.tmp" />
<dependset>
<srcfileset dir="." includes="test9.tmp" />
<targetfileset dir="test9dir" />
</dependset>
</target>

<target name="tearDown">
<delete file="test4.tmp" />
<delete file="test9.tmp" />
<delete file="older.tmp" />
<delete file="newer.tmp" />
</target>


Loading…
Cancel
Save