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 * <apply> and <chmod> will display a summary if you set the new
verbose attribute to true. Bugzilla Report 19883. 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 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">failonerror</td>
<td valign="top">Log a warning message, but do not stop the <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 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>
<td valign="top" align="center">No; defaults to true.</td> <td valign="top" align="center">No; defaults to true.</td>
</tr> </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">failonerror</td>
<td valign="top">Log a warning message, but do not stop the <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 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>
<td valign="top" align="center">No; defaults to true.</td> <td valign="top" align="center">No; defaults to true.</td>
</tr> </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... // 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 { } finally {
// clean up again, so this instance can be used a second // clean up again, so this instance can be used a second
// time // 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( 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