mbenson     2004/08/31 14:51:49

  Modified:    .        Tag: ANT_16_BRANCH WHATSNEW
               docs/manual/CoreTasks Tag: ANT_16_BRANCH move.html
               src/etc/testcases/taskdefs Tag: ANT_16_BRANCH move.xml
               src/main/org/apache/tools/ant/taskdefs Tag: ANT_16_BRANCH
                        Move.java
               src/testcases/org/apache/tools/ant/taskdefs Tag:
                        ANT_16_BRANCH MoveTest.java
  Log:
  Merge
  PR: 22863
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.503.2.131 +3 -0      ant/WHATSNEW
  
  Index: WHATSNEW
  ===================================================================
  RCS file: /home/cvs/ant/WHATSNEW,v
  retrieving revision 1.503.2.130
  retrieving revision 1.503.2.131
  diff -u -r1.503.2.130 -r1.503.2.131
  --- WHATSNEW  25 Aug 2004 14:58:09 -0000      1.503.2.130
  +++ WHATSNEW  31 Aug 2004 21:51:49 -0000      1.503.2.131
  @@ -12,6 +12,9 @@
   * Javadoc fixes for Location, Project, and RuntimeConfigurable
     Bugzilla 30160.
   
  +* Allow file attribute of <move> to rename a directory.
  +  Bugzilla Report 22863.
  +
   Fixed bugs:
   -----------
   
  
  
  
  No                   revision
  No                   revision
  1.14.2.4  +20 -2     ant/docs/manual/CoreTasks/move.html
  
  Index: move.html
  ===================================================================
  RCS file: /home/cvs/ant/docs/manual/CoreTasks/move.html,v
  retrieving revision 1.14.2.3
  retrieving revision 1.14.2.4
  diff -u -r1.14.2.3 -r1.14.2.4
  --- move.html 9 Feb 2004 22:12:07 -0000       1.14.2.3
  +++ move.html 31 Aug 2004 21:51:49 -0000      1.14.2.4
  @@ -17,6 +17,10 @@
   the destination file, or when the destination file does not exist.</p>
   <p><a href="../CoreTypes/fileset.html">FileSet</a>s are used to select sets 
of files
   to move to the <var>todir</var> directory.</p>
  +<p><b>Since Ant 1.6.3</b>, the <i>file</i> attribute may be used to move
  +(rename) an entire directory.  If <i>tofile</i> denotes an existing file, or
  +there is a directory by the same name in <i>todir</i>, the action will fail.
  +</p>
   <h3>Parameters</h3>
   <table border="1" cellpadding="2" cellspacing="0">
     <tr>
  @@ -26,7 +30,7 @@
     </tr>
     <tr>
       <td valign="top">file</td>
  -    <td valign="top">the file to move</td>
  +    <td valign="top">the file or directory to move</td>
       <td valign="top" align="center">One of <var>file</var> or
        at least one nested fileset element</td>
     </tr>
  @@ -79,7 +83,7 @@
     </tr>
     <tr>
       <td valign="top">failonerror</td>
  -     <td valign="top">Log a warning message, but do not stop the
  +     <td valign="top">If false, 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 or an error occurs
          while moving.
  @@ -114,6 +118,16 @@
         <em>since Ant 1.6</em>.</td>
       <td align="center">No - defaults to false.</td>
     </tr>
  +  <tr>
  +    <td valign="top">granularity</td>
  +    <td valign="top">The number of milliseconds leeway to give before
  +    deciding a file is out of date. This is needed because not every
  +    file system supports tracking the last modified time to the
  +    millisecond level. Default is 0 milliseconds, or 2 seconds on DOS
  +    systems.  This can also be useful if source and target files live
  +    on separate machines with clocks being out of sync.  <em>since Ant
  +    1.6</em>.</td>
  +  </tr>
   </table>
   <h3>Parameters specified as nested elements</h3>
   <h4>mapper</h4>
  @@ -145,6 +159,10 @@
     &lt;move todir=&quot;new/dir/to/move/to&quot;&gt;
       &lt;fileset dir=&quot;src/dir&quot;/&gt;
     &lt;/move&gt;
  +</pre>
  +  <i>or, since Ant 1.6.3:</i>
  +<pre>
  +  &lt;move file=&quot;src/dir&quot; tofile=&quot;new/dir/to/move/to&quot; 
/&gt;
   </pre>
   <p><b>Move a set of files to a new directory</b></p>
   <pre>
  
  
  
  No                   revision
  No                   revision
  1.5.2.1   +69 -2     ant/src/etc/testcases/taskdefs/move.xml
  
  Index: move.xml
  ===================================================================
  RCS file: /home/cvs/ant/src/etc/testcases/taskdefs/move.xml,v
  retrieving revision 1.5
  retrieving revision 1.5.2.1
  diff -u -r1.5 -r1.5.2.1
  --- move.xml  19 May 2003 14:27:43 -0000      1.5
  +++ move.xml  31 Aug 2004 21:51:49 -0000      1.5.2.1
  @@ -59,11 +59,78 @@
       </move>
     </target>
   
  +  <target name="testCompleteDirectoryMoveFileToFile">
  +    <mkdir dir="A"/>
  +    <touch file="A/1"/>
  +    <move file="A" tofile="E" />
  +    <fail message="E/1 not available">
  +      <condition>
  +        <not>
  +          <available file="E/1" type="file" />
  +        </not>
  +      </condition>
  +    </fail>
  +    <fail message="A remains">
  +      <condition>
  +        <available file="A" type="dir" />
  +      </condition>
  +    </fail>
  +  </target>
  +
  +  <target name="testCompleteDirectoryMoveFileToDir">
  +    <mkdir dir="A"/>
  +    <touch file="A/1"/>
  +    <move file="A" todir="E" />
  +    <fail message="E/A/1 not available">
  +      <condition>
  +        <not>
  +          <available file="E/A/1" type="file" />
  +        </not>
  +      </condition>
  +    </fail>
  +    <fail message="A remains">
  +      <condition>
  +        <available file="A" type="dir" />
  +      </condition>
  +    </fail>
  +  </target>
  +
  +  <target name="testCompleteDirectoryMoveFileToExistingFile">
  +    <mkdir dir="A"/>
  +    <touch file="A/1"/>
  +    <touch file="B"/>
  +    <move file="A" tofile="B" />
  +  </target>
  +
  +  <target name="testCompleteDirectoryMoveFileToExistingDir">
  +    <mkdir dir="A"/>
  +    <touch file="A/1"/>
  +    <mkdir dir="E"/>
  +    <move file="A" tofile="E" />
  +  </target>
  +
  +  <target name="testCompleteDirectoryMoveFileToDirWithExistingFile">
  +    <mkdir dir="A"/>
  +    <touch file="A/1"/>
  +    <mkdir dir="E"/>
  +    <touch file="E/A"/>
  +    <move file="A" todir="E" />
  +  </target>
  +
  +  <target name="testCompleteDirectoryMoveFileToDirWithExistingDir">
  +    <mkdir dir="A"/>
  +    <touch file="A/1"/>
  +    <mkdir dir="E"/>
  +    <mkdir dir="E/A"/>
  +    <move file="A" todir="E" />
  +  </target>
  +
     <target name="cleanup"> 
       <delete file="move.filterset.tmp"/>
       <delete file="move.filterchain.tmp"/>
  -    <delete dir="A"/>
  -    <delete dir="E"/>
  +    <delete dir="A" />
  +    <delete file="B" />
  +    <delete dir="E" />
     </target>
   
   </project>
  
  
  
  No                   revision
  No                   revision
  1.41.2.5  +64 -10    ant/src/main/org/apache/tools/ant/taskdefs/Move.java
  
  Index: Move.java
  ===================================================================
  RCS file: /home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/Move.java,v
  retrieving revision 1.41.2.4
  retrieving revision 1.41.2.5
  diff -u -r1.41.2.4 -r1.41.2.5
  --- Move.java 9 Mar 2004 17:01:34 -0000       1.41.2.4
  +++ Move.java 31 Aug 2004 21:51:49 -0000      1.41.2.5
  @@ -61,6 +61,58 @@
           setOverwrite(true);
       }
   
  +    /**
  +     * Performs the move operation.
  +     */
  +    public void execute() throws BuildException {
  +        if (file != null && file.isDirectory()) {
  +            if (destFile != null && destDir != null) {
  +                throw new BuildException("Only one of tofile and todir "
  +                                         + "may be set.");
  +            }
  +
  +            if (destFile == null && destDir == null) {
  +                throw new BuildException("One of tofile or todir must be 
set.");
  +            }
  +
  +            destFile = (destFile != null)
  +                ? destFile : new File(destDir, file.getName());
  +
  +            try {
  +                boolean renamed = false;
  +                log("Moving directory " + file
  +                    + " to " + destFile, Project.MSG_INFO);
  +                try {
  +                    renamed =
  +                        renameFile(file, destFile, filtering, 
forceOverwrite);
  +                } catch (IOException eyeOhEx) {
  +                    throw new BuildException(eyeOhEx.getMessage());
  +                }
  +                if (!renamed) {
  +                    StringBuffer buf = new StringBuffer(
  +                        "Failed to move directory ").append(
  +                        file.getAbsolutePath());
  +
  +                    if ((getFilterChains() != null && 
getFilterChains().size() > 0)
  +                        || (getFilterSets() != null && 
getFilterSets().size() > 0)
  +                        || filtering) {
  +                        buf.append(
  +                            "; use a fileset to move directories with 
filtering");
  +                    }
  +                    throw new BuildException(buf.append('.').toString());
  +                }
  +            } catch (BuildException e) {
  +                if (!failonerror) {
  +                    log("Warning: " + e.getMessage(), Project.MSG_ERR);
  +                } else {
  +                    throw e;
  +                }
  +            }
  +        } else {
  +            super.execute();
  +        }
  +    }
  +
   //************************************************************************
   //  protected and private methods
   //************************************************************************
  @@ -325,17 +377,19 @@
           } else {
               if (!filtering) {
                   // ensure that parent dir of dest file exists!
  -                // not using getParentFile method to stay 1.1 compatibility
  -                String parentPath = destFile.getParent();
  -                if (parentPath != null) {
  -                    File parent = new File(parentPath);
  -                    if (!parent.exists()) {
  -                        parent.mkdirs();
  -                    }
  +                File parent = destFile.getParentFile();
  +                if (parent != null && !parent.exists()) {
  +                    parent.mkdirs();
                   }
   
  -                if (destFile.exists() && destFile.isFile()) {
  -                    if (!destFile.delete()) {
  +                if (destFile.exists()) {
  +                    if (sourceFile.isDirectory()) {
  +                     throw new BuildException(
  +                        new StringBuffer("Cannot replace ").append(
  +                        ((destFile.isFile()) ? "file " : "directory 
")).append(
  +                        destFile).append(" with directory ").append(
  +                        sourceFile).toString());
  +                    } else if (destFile.isFile() && !destFile.delete()) {
                           throw new BuildException("Unable to remove existing "
                                                    + "file " + destFile);
                       }
  
  
  
  No                   revision
  No                   revision
  1.8.2.5   +29 -0     
ant/src/testcases/org/apache/tools/ant/taskdefs/MoveTest.java
  
  Index: MoveTest.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/testcases/org/apache/tools/ant/taskdefs/MoveTest.java,v
  retrieving revision 1.8.2.4
  retrieving revision 1.8.2.5
  diff -u -r1.8.2.4 -r1.8.2.5
  --- MoveTest.java     9 Mar 2004 17:02:01 -0000       1.8.2.4
  +++ MoveTest.java     31 Aug 2004 21:51:49 -0000      1.8.2.5
  @@ -88,4 +88,33 @@
           assertTrue(!getProject().resolveFile("A/1").exists());
           assertTrue(!getProject().resolveFile("A").exists());
       }
  +
  +    public void testCompleteDirectoryMoveFileToFile() {
  +        executeTarget("testCompleteDirectoryMoveFileToFile");
  +    }
  +
  +    public void testCompleteDirectoryMoveFileToDir() {
  +        executeTarget("testCompleteDirectoryMoveFileToDir");
  +    }
  +
  +    public void testCompleteDirectoryMoveFileToExistingFile() {
  +        
expectBuildExceptionContaining("testCompleteDirectoryMoveFileToExistingFile",
  +                                       "", "Cannot replace file");
  +    }
  +
  +    public void testCompleteDirectoryMoveFileToExistingDir() {
  +        
expectBuildExceptionContaining("testCompleteDirectoryMoveFileToExistingDir",
  +                                       "", "Cannot replace directory");
  +    }
  +
  +    public void testCompleteDirectoryMoveFileToDirWithExistingFile() {
  +        
expectBuildExceptionContaining("testCompleteDirectoryMoveFileToDirWithExistingFile",
  +                                       "", "Cannot replace file");
  +    }
  +
  +    public void testCompleteDirectoryMoveFileToDirWithExistingDir() {
  +        
expectBuildExceptionContaining("testCompleteDirectoryMoveFileToDirWithExistingDir",
  +                                       "", "Cannot replace directory");
  +    }
  +
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to