From 6405019ad4943817b1ed6e322fa1db2c1d1e02cf Mon Sep 17 00:00:00 2001 From: Matthew Jason Benson Date: Wed, 22 Nov 2006 00:01:13 +0000 Subject: [PATCH] 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 --- .../apache/tools/ant/taskdefs/DependSet.java | 26 ++++++++++++++++++- src/tests/antunit/taskdefs/dependset/test.xml | 12 +++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/main/org/apache/tools/ant/taskdefs/DependSet.java b/src/main/org/apache/tools/ant/taskdefs/DependSet.java index aa4446ccd..50f52f97a 100644 --- a/src/main/org/apache/tools/ant/taskdefs/DependSet.java +++ b/src/main/org/apache/tools/ant/taskdefs/DependSet.java @@ -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)); } /** diff --git a/src/tests/antunit/taskdefs/dependset/test.xml b/src/tests/antunit/taskdefs/dependset/test.xml index 339bb83ac..55d772bcb 100644 --- a/src/tests/antunit/taskdefs/dependset/test.xml +++ b/src/tests/antunit/taskdefs/dependset/test.xml @@ -93,8 +93,20 @@ + + + + + + + + + + + +