git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@574339 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -28,6 +28,11 @@ Changes that could break older environments: | |||
| * Remove fall-back mechanism for references that are not resolved | |||
| during normal runtime execution. | |||
| * FileUtils.createTempFile now actually creates the file. | |||
| The TempFile task still does not create the file by default, can be instructed | |||
| to do so however using a new parameter. | |||
| Bugzilla report 33969. | |||
| Fixed bugs: | |||
| ----------- | |||
| @@ -144,7 +144,7 @@ | |||
| <td bgcolor="#eeeeee" valign="top" align="left"> | |||
| <font color="#000000" size="-1" face="arial,helvetica,sanserif">File</font> | |||
| </td> | |||
| <td bgcolor="#eeeeee" valign="top" align="left" rowspan="4"> | |||
| <td bgcolor="#eeeeee" valign="top" align="left" rowspan="5"> | |||
| <font color="#000000" size="-1" face="arial,helvetica,sanserif">Optional</font> | |||
| </td> | |||
| </tr> | |||
| @@ -181,10 +181,21 @@ | |||
| <font color="#000000" size="-1" face="arial,helvetica,sanserif">Whether the temp file will be marked for deletion on normal exit of the Java Virtual Machine (even though the file may never be created); default <em>false</em>. <strong>Since Ant 1.7</strong></font> | |||
| </td> | |||
| <td bgcolor="#eeeeee" valign="top" align="left"> | |||
| <font color="#000000" size="-1" face="arial,helvetica,sanserif">String</font> | |||
| <font color="#000000" size="-1" face="arial,helvetica,sanserif">boolean</font> | |||
| </td> | |||
| </tr> | |||
| <!-- Attribute --> | |||
| <tr> | |||
| <td bgcolor="#eeeeee" valign="top" align="left"> | |||
| <font color="#000000" size="-1" face="arial,helvetica,sanserif">createfile</font> | |||
| </td> | |||
| <td bgcolor="#eeeeee" valign="top" align="left"> | |||
| <font color="#000000" size="-1" face="arial,helvetica,sanserif">Whether the temp file should be created by this task.<strong>Since Ant 1.8</strong></font> | |||
| </td> | |||
| <td bgcolor="#eeeeee" valign="top" align="left"> | |||
| <font color="#000000" size="-1" face="arial,helvetica,sanserif">boolean</font> | |||
| </td> | |||
| </tr> | |||
| </table> | |||
| </blockquote></td></tr> | |||
| @@ -65,6 +65,9 @@ public class TempFile extends Task { | |||
| /** deleteOnExit flag */ | |||
| private boolean deleteOnExit; | |||
| /** createFile flag */ | |||
| private boolean createFile; | |||
| /** | |||
| * Sets the property you wish to assign the temporary file to. | |||
| @@ -123,6 +126,22 @@ public class TempFile extends Task { | |||
| public boolean isDeleteOnExit() { | |||
| return deleteOnExit; | |||
| } | |||
| /** | |||
| * If set the file is actually created, if not just a name is created. | |||
| * @param createFile boolean flag. | |||
| */ | |||
| public void setCreateFile(boolean createFile) { | |||
| this.createFile = deleteOnExit; | |||
| } | |||
| /** | |||
| * Learn whether createFile flag is set for this tempfile task. | |||
| * @return the createFile flag. | |||
| */ | |||
| public boolean isCreateFile() { | |||
| return createFile; | |||
| } | |||
| /** | |||
| * Creates the temporary file. | |||
| @@ -136,8 +155,14 @@ public class TempFile extends Task { | |||
| if (destDir == null) { | |||
| destDir = getProject().resolveFile("."); | |||
| } | |||
| File tfile = FILE_UTILS.createTempFile( | |||
| prefix, suffix, destDir, deleteOnExit); | |||
| File tfile; | |||
| if (createFile) { | |||
| tfile = FILE_UTILS.createTempFile(prefix, suffix, destDir, | |||
| deleteOnExit); | |||
| } else { | |||
| tfile = FILE_UTILS.createTempFileName(prefix, suffix, destDir, | |||
| deleteOnExit); | |||
| } | |||
| getProject().setNewProperty(property, tfile.toString()); | |||
| } | |||
| @@ -1824,8 +1824,8 @@ public class FTP | |||
| FTPFile [] theFiles = null; | |||
| final int maxIterations = 1000; | |||
| for (int counter = 1; counter < maxIterations; counter++) { | |||
| File localFile = FILE_UTILS.createTempFile("ant" + Integer.toString(counter), ".tmp", | |||
| null); | |||
| File localFile = FILE_UTILS.createTempFileName("ant" + Integer.toString(counter), ".tmp", | |||
| null, false); | |||
| String fileName = localFile.getName(); | |||
| boolean found = false; | |||
| try { | |||
| @@ -786,12 +786,8 @@ public class FileUtils { | |||
| * <p>The file denoted by the returned abstract pathname did not | |||
| * exist before this method was invoked, any subsequent invocation | |||
| * of this method will yield a different file name.</p> | |||
| * <p> | |||
| * The filename is prefixNNNNNsuffix where NNNN is a random number. | |||
| * </p> | |||
| * <p>This method is different from File.createTempFile() of JDK 1.2 | |||
| * as it doesn't create the file itself. It uses the location pointed | |||
| * to by java.io.tmpdir when the parentDir attribute is null.</p> | |||
| * | |||
| * <p>As of ant 1.8 the file is actually created.</p> | |||
| * | |||
| * @param prefix prefix before the random number. | |||
| * @param suffix file extension; include the '.'. | |||
| @@ -811,19 +807,15 @@ public class FileUtils { | |||
| * <p>The file denoted by the returned abstract pathname did not | |||
| * exist before this method was invoked, any subsequent invocation | |||
| * of this method will yield a different file name.</p> | |||
| * <p> | |||
| * The filename is prefixNNNNNsuffix where NNNN is a random number. | |||
| * </p> | |||
| * <p>This method is different from File.createTempFile() of JDK 1.2 | |||
| * as it doesn't create the file itself. It uses the location pointed | |||
| * to by java.io.tmpdir when the parentDir attribute is null.</p> | |||
| * | |||
| * <p>As of ant 1.8 the file is actually created.</p> | |||
| * | |||
| * @param prefix prefix before the random number. | |||
| * @param suffix file extension; include the '.'. | |||
| * @param parentDir Directory to create the temporary file in; | |||
| * java.io.tmpdir used if not specified. | |||
| * @param deleteOnExit whether to set the tempfile for deletion on | |||
| * normal VM exit. | |||
| * java.io.tmpdir used if not specified. | |||
| * | |||
| * @return a File reference to the new temporary file. | |||
| * @since Ant 1.7 | |||
| @@ -834,11 +826,51 @@ public class FileUtils { | |||
| String parent = (parentDir == null) | |||
| ? System.getProperty("java.io.tmpdir") | |||
| : parentDir.getPath(); | |||
| try { | |||
| result = File.createTempFile(prefix, suffix, new File(parent)); | |||
| } catch (IOException e) { | |||
| throw new BuildException("Could not create tempfile in " + parent, e); | |||
| } | |||
| if (deleteOnExit) { | |||
| result.deleteOnExit(); | |||
| } | |||
| return result; | |||
| } | |||
| /** | |||
| * Create a File object for a temporary file in a given directory. Without | |||
| * actually creating the file. | |||
| * | |||
| * <p>The file denoted by the returned abstract pathname did not | |||
| * exist before this method was invoked, any subsequent invocation | |||
| * of this method will yield a different file name.</p> | |||
| * <p> | |||
| * The filename is prefixNNNNNsuffix where NNNN is a random number. | |||
| * </p> | |||
| * | |||
| * @param prefix prefix before the random number. | |||
| * @param suffix file extension; include the '.'. | |||
| * @param parentDir Directory to create the temporary file in; | |||
| * java.io.tmpdir used if not specified. | |||
| * @param deleteOnExit whether to set the tempfile for deletion on | |||
| * normal VM exit. | |||
| * | |||
| * @return a File reference to the new, nonexistent temporary file. | |||
| * @since Ant 1.8 | |||
| */ | |||
| public File createTempFileName(String prefix, String suffix, | |||
| File parentDir, boolean deleteOnExit) { | |||
| File result = null; | |||
| String parent = (parentDir == null) ? System | |||
| .getProperty("java.io.tmpdir") : parentDir.getPath(); | |||
| DecimalFormat fmt = new DecimalFormat("#####"); | |||
| synchronized (rand) { | |||
| do { | |||
| result = new File(parent, prefix + fmt.format(Math.abs(rand.nextInt())) + suffix); | |||
| result = new File(parent, prefix | |||
| + fmt.format(Math.abs(rand.nextInt())) + suffix); | |||
| } while (result.exists()); | |||
| } | |||
| if (deleteOnExit) { | |||
| @@ -846,6 +878,8 @@ public class FileUtils { | |||
| } | |||
| return result; | |||
| } | |||
| /** | |||
| * Compares the contents of two files. | |||