diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 21aaf7e13..aebba5de4 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -232,6 +232,7 @@ Ronen Mashal
Russell Gold
Sam Ruby
Scott Carlson
+Scott Ellsworth
Scott M. Stirling
Sean Egan
Sean P. Kane
diff --git a/WHATSNEW b/WHATSNEW
index fa19f869c..48e944af8 100644
--- a/WHATSNEW
+++ b/WHATSNEW
@@ -223,6 +223,9 @@ Other changes:
* <and>
selector container.
Note: All files/directories for which
diff --git a/src/main/org/apache/tools/ant/DirectoryScanner.java b/src/main/org/apache/tools/ant/DirectoryScanner.java
index 70e4ec65a..1af30d6f1 100644
--- a/src/main/org/apache/tools/ant/DirectoryScanner.java
+++ b/src/main/org/apache/tools/ant/DirectoryScanner.java
@@ -251,6 +251,12 @@ public class DirectoryScanner
*/
protected boolean isCaseSensitive = true;
+ /**
+ * Whether a missing base directory is an error.
+ * @since Ant 1.7.1
+ */
+ protected boolean errorOnMissingDir = true;
+
/**
* Whether or not symbolic links should be followed.
*
@@ -609,6 +615,17 @@ public class DirectoryScanner
this.isCaseSensitive = isCaseSensitive;
}
+ /**
+ * Sets whether or not a missing base directory is an error
+ *
+ * @param errorOnMissingDir whether or not a missing base directory
+ * is an error
+ * @since Ant 1.7.1
+ */
+ public void setErrorOnMissingDir(boolean errorOnMissingDir) {
+ this.errorOnMissingDir = errorOnMissingDir;
+ }
+
/**
* Get whether or not a DirectoryScanner follows symbolic links.
*
@@ -790,8 +807,13 @@ public class DirectoryScanner
}
} else {
if (!basedir.exists()) {
- illegal = new IllegalStateException("basedir " + basedir
- + " does not exist");
+ if (errorOnMissingDir) {
+ illegal = new IllegalStateException(
+ "basedir " + basedir + " does not exist");
+ } else {
+ // Nothing to do - basedir does not exist
+ return;
+ }
}
if (!basedir.isDirectory()) {
illegal = new IllegalStateException("basedir " + basedir
diff --git a/src/main/org/apache/tools/ant/types/AbstractFileSet.java b/src/main/org/apache/tools/ant/types/AbstractFileSet.java
index e81da1213..3914dfbd6 100644
--- a/src/main/org/apache/tools/ant/types/AbstractFileSet.java
+++ b/src/main/org/apache/tools/ant/types/AbstractFileSet.java
@@ -65,6 +65,7 @@ public abstract class AbstractFileSet extends DataType
private boolean useDefaultExcludes = true;
private boolean caseSensitive = true;
private boolean followSymlinks = true;
+ private boolean errorOnMissingDir = true;
/* cached DirectoryScanner instance for our own Project only */
private DirectoryScanner directoryScanner = null;
@@ -89,6 +90,7 @@ public abstract class AbstractFileSet extends DataType
this.useDefaultExcludes = fileset.useDefaultExcludes;
this.caseSensitive = fileset.caseSensitive;
this.followSymlinks = fileset.followSymlinks;
+ this.errorOnMissingDir = fileset.errorOnMissingDir;
setProject(fileset.getProject());
}
@@ -392,6 +394,16 @@ public abstract class AbstractFileSet extends DataType
? getRef(getProject()).isFollowSymlinks() : followSymlinks;
}
+ /**
+ * Sets whether an error is thrown if a directory does not exist.
+ *
+ * @param errorOnMissingDir true if missing directories cause errors,
+ * false if not.
+ */
+ public void setErrorOnMissingDir(boolean errorOnMissingDir) {
+ this.errorOnMissingDir = errorOnMissingDir;
+ }
+
/**
* Returns the directory scanner needed to access the files to process.
* @return a DirectoryScanner
instance.
@@ -418,17 +430,18 @@ public abstract class AbstractFileSet extends DataType
throw new BuildException("No directory specified for "
+ getDataTypeName() + ".");
}
- if (!dir.exists()) {
+ if (!dir.exists() && errorOnMissingDir) {
throw new BuildException(dir.getAbsolutePath()
+ " not found.");
}
- if (!dir.isDirectory()) {
+ if (!dir.isDirectory() && dir.exists()) {
throw new BuildException(dir.getAbsolutePath()
+ " is not a directory.");
}
ds = new DirectoryScanner();
setupDirectoryScanner(ds, p);
ds.setFollowSymlinks(followSymlinks);
+ ds.setErrorOnMissingDir(errorOnMissingDir);
directoryScanner = (p == getProject()) ? ds : directoryScanner;
}
}
diff --git a/src/tests/antunit/types/fileset-test.xml b/src/tests/antunit/types/fileset-test.xml
index cf909cddc..18e45716e 100644
--- a/src/tests/antunit/types/fileset-test.xml
+++ b/src/tests/antunit/types/fileset-test.xml
@@ -1,5 +1,15 @@