Browse Source

Make <copy>'s failonerror attribute swallow exception while copying as

well.
PR: 12999


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274594 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 22 years ago
parent
commit
194f9cafed
4 changed files with 64 additions and 50 deletions
  1. +4
    -0
      WHATSNEW
  2. +2
    -1
      docs/manual/CoreTasks/copy.html
  3. +2
    -1
      docs/manual/CoreTasks/move.html
  4. +56
    -48
      src/main/org/apache/tools/ant/taskdefs/Copy.java

+ 4
- 0
WHATSNEW View File

@@ -358,6 +358,10 @@ Other changes:
* <apply> and <chmod> will display a summary if you set the new
verbose attribute to true. Bugzilla Report 19883.

* <copy>/<move>'s failonerror attribute can now also be used to
continue the build if an I/O error caused a problem. Bugzilla
Report 12999.

Changes from Ant 1.5.2 to Ant 1.5.3
===================================



+ 2
- 1
docs/manual/CoreTasks/copy.html View File

@@ -95,7 +95,8 @@ operation as <a href="../CoreTypes/filterset.html">filtersets</a>
<td valign="top">failonerror</td>
<td valign="top">Log a warning message, but do not stop the
build, when the file to copy does not exist or one of the nested
filesets points to a directory that doesn't exist.
filesets points to a directory that doesn't exist or an error occurs
while copying.
</td>
<td valign="top" align="center">No; defaults to true.</td>
</tr>


+ 2
- 1
docs/manual/CoreTasks/move.html View File

@@ -80,7 +80,8 @@ to move to the <var>todir</var> directory.</p>
<td valign="top">failonerror</td>
<td valign="top">Log a warning message, but do not stop the
build, when the file to copy does not exist or one of the nested
filesets points to a directory that doesn't exist.
filesets points to a directory that doesn't exist or an error occurs
while moving.
</td>
<td valign="top" align="center">No; defaults to true.</td>
</tr>


+ 56
- 48
src/main/org/apache/tools/ant/taskdefs/Copy.java View File

@@ -401,7 +401,15 @@ public class Copy extends Task {
}

// do all the copy operations now...
doFileOperations();
try {
doFileOperations();
} catch (BuildException e) {
if (!failonerror) {
log("Warning: " + e.getMessage(), Project.MSG_ERR);
} else {
throw e;
}
}
} finally {
// clean up again, so this instance can be used a second
// time
@@ -418,66 +426,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