bodewig 2003/05/19 08:37:31
Modified: . WHATSNEW docs/manual/CoreTasks copy.html move.html src/main/org/apache/tools/ant/taskdefs Copy.java Log: Make <copy>'s failonerror attribute swallow exception while copying as well. PR: 12999 Revision Changes Path 1.422 +4 -0 ant/WHATSNEW Index: WHATSNEW =================================================================== RCS file: /home/cvs/ant/WHATSNEW,v retrieving revision 1.421 retrieving revision 1.422 diff -u -r1.421 -r1.422 --- WHATSNEW 19 May 2003 12:18:07 -0000 1.421 +++ WHATSNEW 19 May 2003 15:37:31 -0000 1.422 @@ -358,6 +358,10 @@ * <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 =================================== 1.18 +2 -1 ant/docs/manual/CoreTasks/copy.html Index: copy.html =================================================================== RCS file: /home/cvs/ant/docs/manual/CoreTasks/copy.html,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- copy.html 14 May 2003 11:53:41 -0000 1.17 +++ copy.html 19 May 2003 15:37:31 -0000 1.18 @@ -95,7 +95,8 @@ <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> 1.13 +2 -1 ant/docs/manual/CoreTasks/move.html Index: move.html =================================================================== RCS file: /home/cvs/ant/docs/manual/CoreTasks/move.html,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- move.html 14 May 2003 11:53:41 -0000 1.12 +++ move.html 19 May 2003 15:37:31 -0000 1.13 @@ -80,7 +80,8 @@ <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> 1.58 +56 -48 ant/src/main/org/apache/tools/ant/taskdefs/Copy.java Index: Copy.java =================================================================== RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/Copy.java,v retrieving revision 1.57 retrieving revision 1.58 diff -u -r1.57 -r1.58 --- Copy.java 19 May 2003 15:21:15 -0000 1.57 +++ Copy.java 19 May 2003 15:37:31 -0000 1.58 @@ -401,7 +401,15 @@ } // 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 @@ } } -//************************************************************************ -// 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