Browse Source

<copy> and <move>'s failonerror didn't apply to filesets pointing to

non-existant directories.

PR: 18414.


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274334 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 22 years ago
parent
commit
04c60dbd61
2 changed files with 66 additions and 51 deletions
  1. +3
    -0
      WHATSNEW
  2. +63
    -51
      src/main/org/apache/tools/ant/taskdefs/Copy.java

+ 3
- 0
WHATSNEW View File

@@ -75,6 +75,9 @@ Fixed bugs:
* The Unix wrapper script failed if you invoked it as a relative
symlink and ANT_HOME has not been set. Bugzilla Report 17721.

* <copy> and <move>'s failonerror didn't apply to filesets pointing to
non-existant directories. Bugzilla Report 18414.

Other changes:
--------------
* Shipped XML parser is now Xerces 2.4.0


+ 63
- 51
src/main/org/apache/tools/ant/taskdefs/Copy.java View File

@@ -263,9 +263,9 @@ public class Copy extends Task {
* If false, note errors to the output but keep going.
* @param failonerror true or false
*/
public void setFailOnError(boolean failonerror) {
this.failonerror = failonerror;
}
public void setFailOnError(boolean failonerror) {
this.failonerror = failonerror;
}

/**
* Adds a set of files to copy.
@@ -374,7 +374,19 @@ public class Copy extends Task {
// deal with the filesets
for (int i = 0; i < filesets.size(); i++) {
FileSet fs = (FileSet) filesets.elementAt(i);
DirectoryScanner ds = fs.getDirectoryScanner(getProject());
DirectoryScanner ds = null;
try {
ds = fs.getDirectoryScanner(getProject());
} catch (BuildException e) {
if (failonerror
|| !e.getMessage().endsWith(" not found.")) {
throw e;
} else {
log("Warning: " + e.getMessage());
continue;
}
}
File fromDir = fs.getDir(getProject());

String[] srcFiles = ds.getIncludedFiles();
@@ -405,66 +417,66 @@ public class Copy extends Task {
}
}

//************************************************************************
// protected and private methods
//************************************************************************

/**
* Ensure we have a consistent and legal set of attributes, and set
* any internal flags necessary based on different combinations
* of attributes.
*/
protected void validateAttributes() throws BuildException {
if (file == null && filesets.size() == 0) {
throw new BuildException("Specify at least one source "
+ "- a file or a fileset.");
}

if (destFile != null && destDir != null) {
throw new BuildException("Only one of tofile and todir "
+ "may be set.");
}
//************************************************************************
// protected and private methods
//************************************************************************

/**
* Ensure we have a consistent and legal set of attributes, and set
* any internal flags necessary based on different combinations
* of attributes.
*/
protected void validateAttributes() throws BuildException {
if (file == null && filesets.size() == 0) {
throw new BuildException("Specify at least one source "
+ "- a file or a fileset.");
}

if (destFile == null && destDir == null) {
throw new BuildException("One of tofile or todir must be set.");
}
if (destFile != null && destDir != null) {
throw new BuildException("Only one of tofile and todir "
+ "may be set.");
}

if (file != null && file.exists() && file.isDirectory()) {
throw new BuildException("Use a fileset to copy directories.");
}
if (destFile == null && destDir == null) {
throw new BuildException("One of tofile or todir must be set.");
}

if (destFile != null && filesets.size() > 0) {
if (filesets.size() > 1) {
throw new BuildException(
"Cannot concatenate multiple files into a single file.");
} else {
FileSet fs = (FileSet) filesets.elementAt(0);
DirectoryScanner ds = fs.getDirectoryScanner(getProject());
String[] srcFiles = ds.getIncludedFiles();
if (file != null && file.exists() && file.isDirectory()) {
throw new BuildException("Use a fileset to copy directories.");
}

if (srcFiles.length == 0) {
if (destFile != null && filesets.size() > 0) {
if (filesets.size() > 1) {
throw new BuildException(
"Cannot perform operation from directory to file.");
} else if (srcFiles.length == 1) {
if (file == null) {
file = new File(ds.getBasedir(), srcFiles[0]);
filesets.removeElementAt(0);
"Cannot concatenate multiple files into a single file.");
} else {
FileSet fs = (FileSet) filesets.elementAt(0);
DirectoryScanner ds = fs.getDirectoryScanner(getProject());
String[] srcFiles = ds.getIncludedFiles();

if (srcFiles.length == 0) {
throw new BuildException(
"Cannot perform operation from directory to file.");
} else if (srcFiles.length == 1) {
if (file == null) {
file = new File(ds.getBasedir(), srcFiles[0]);
filesets.removeElementAt(0);
} else {
throw new BuildException("Cannot concatenate multiple "
+ "files into a single file.");
}
} else {
throw new BuildException("Cannot concatenate multiple "
+ "files into a single file.");
}
} else {
throw new BuildException("Cannot concatenate multiple "
+ "files into a single file.");
}
}
}

if (destFile != null) {
destDir = fileUtils.getParentFile(destFile);
}
if (destFile != null) {
destDir = fileUtils.getParentFile(destFile);
}

}
}

/**
* Compares source files to destination files to see if they should be


Loading…
Cancel
Save