ant-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jason Weinstein <jason.weinst...@oracle.com>
Subject Copy issue ant 1.8.2 windows (Failed copy deletes targeted file even when copy is not attempted)
Date Wed, 11 Apr 2012 17:23:03 GMT

NOTE: I attempted subscription to ant user mailing list but have not yet 
received a subscribe email ack, so PLEASE include 
jason.weinstein@oracle.com in responses. Thanks


Copy issue ant 1.8.2 windows (Failed copy deletes targeted file even 
when copy is not attempted)


copy uses overwrite but not force.


Is this fixed perhaps in 1.8.3? Should a bug be created? Any workarounds?


What I assume is happening based on code is targeted file canWrite 
fails, read-only exception is thrown, and then targeted file is deleted, 
which succeeds.

The later part is what i observe, read-only exception followed by file 
deletion. This is not the behavior i would expect.


Copy.java

   protected void doResourceOperations(Map map)
   {
     if (map.size() > 0) {
       log("Copying " + map.size() + " resource" + (map.size() == 1 ? "" 
: "s") + " to " + this.destDir.getAbsolutePath());

       Iterator iter = map.keySet().iterator();
       while (iter.hasNext()) {
         Resource fromResource = (Resource)iter.next();
         String[] toFiles = (String[])map.get(fromResource);

         for (int i = 0; i < toFiles.length; i++) {
           String toFile = toFiles[i];
           try
           {
             log("Copying " + fromResource + " to " + toFile, 
this.verbosity);

             FilterSetCollection executionFilters = new 
FilterSetCollection();

             if (this.filtering) {
               
executionFilters.addFilterSet(getProject().getGlobalFilterSet());
             }

             Enumeration filterEnum = this.filterSets.elements();
             while (filterEnum.hasMoreElements()) {
               
executionFilters.addFilterSet((FilterSet)filterEnum.nextElement());
             }

             ResourceUtils.copyResource(fromResource, new 
FileResource(this.destDir, toFile), executionFilters, this.filterChains, 
this.forceOverwrite, this.preserveLastModified, false, 
this.inputEncoding, this.outputEncoding, getProject(), getForce());
           }
           catch (IOException ioe)
           {
             String msg = "Failed to copy " + fromResource + " to " + 
toFile + " due to " + getDueTo(ioe);

             File targetFile = new File(toFile);
             if ((targetFile.exists()) && (!targetFile.delete())) {
               msg = msg + " and I couldn't delete the corrupt " + toFile;
             }
             if (this.failonerror) {
               throw new BuildException(msg, ioe, getLocation());
             }
             log(msg, 0);
           }



ResourceUtils.java#copyResource



     File destFile = null;
     if (dest.as(FileProvider.class) != null) {
       destFile = ((FileProvider)dest.as(FileProvider.class)).getFile();
     }
     if ((destFile != null) && (destFile.isFile()) && 
(!destFile.canWrite())) {
       if (!force) {
         throw new IOException("can't write to read-only destination 
file " + destFile);
       }

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message