bodewig     2003/03/27 23:51:11

  Modified:    .        WHATSNEW
               src/main/org/apache/tools/ant/taskdefs Copy.java
  Log:
  <copy> and <move>'s failonerror didn't apply to filesets pointing to
  non-existant directories.
  
  PR: 18414.
  
  Revision  Changes    Path
  1.377     +3 -0      ant/WHATSNEW
  
  Index: WHATSNEW
  ===================================================================
  RCS file: /home/cvs/ant/WHATSNEW,v
  retrieving revision 1.376
  retrieving revision 1.377
  diff -u -r1.376 -r1.377
  --- WHATSNEW  28 Mar 2003 06:53:39 -0000      1.376
  +++ WHATSNEW  28 Mar 2003 07:51:10 -0000      1.377
  @@ -75,6 +75,9 @@
   * 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
  
  
  
  1.54      +64 -52    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.53
  retrieving revision 1.54
  diff -u -r1.53 -r1.54
  --- Copy.java 27 Mar 2003 16:32:18 -0000      1.53
  +++ Copy.java 28 Mar 2003 07:51:11 -0000      1.54
  @@ -263,9 +263,9 @@
        * 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 @@
               // 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 @@
           }
       }
   
  -//************************************************************************
  -//  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
  
  
  

Reply via email to