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 * The Unix wrapper script failed if you invoked it as a relative
symlink and ANT_HOME has not been set. Bugzilla Report 17721. 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: Other changes:
-------------- --------------
* Shipped XML parser is now Xerces 2.4.0 * 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. * If false, note errors to the output but keep going.
* @param failonerror true or false * @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. * Adds a set of files to copy.
@@ -374,7 +374,19 @@ public class Copy extends Task {
// deal with the filesets // deal with the filesets
for (int i = 0; i < filesets.size(); i++) { for (int i = 0; i < filesets.size(); i++) {
FileSet fs = (FileSet) filesets.elementAt(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()); File fromDir = fs.getDir(getProject());


String[] srcFiles = ds.getIncludedFiles(); 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( 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 { } else {
throw new BuildException("Cannot concatenate multiple " throw new BuildException("Cannot concatenate multiple "
+ "files into a single file."); + "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 * Compares source files to destination files to see if they should be


Loading…
Cancel
Save