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 | * Remove fall-back mechanism for references that are not resolved | ||||
during normal runtime execution. | 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: | Fixed bugs: | ||||
----------- | ----------- | ||||
@@ -144,7 +144,7 @@ | |||||
<td bgcolor="#eeeeee" valign="top" align="left"> | <td bgcolor="#eeeeee" valign="top" align="left"> | ||||
<font color="#000000" size="-1" face="arial,helvetica,sanserif">File</font> | <font color="#000000" size="-1" face="arial,helvetica,sanserif">File</font> | ||||
</td> | </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> | <font color="#000000" size="-1" face="arial,helvetica,sanserif">Optional</font> | ||||
</td> | </td> | ||||
</tr> | </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> | <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> | ||||
<td bgcolor="#eeeeee" valign="top" align="left"> | <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> | </td> | ||||
</tr> | </tr> | ||||
</table> | </table> | ||||
</blockquote></td></tr> | </blockquote></td></tr> | ||||
@@ -65,6 +65,9 @@ public class TempFile extends Task { | |||||
/** deleteOnExit flag */ | /** deleteOnExit flag */ | ||||
private boolean deleteOnExit; | private boolean deleteOnExit; | ||||
/** createFile flag */ | |||||
private boolean createFile; | |||||
/** | /** | ||||
* Sets the property you wish to assign the temporary file to. | * Sets the property you wish to assign the temporary file to. | ||||
@@ -123,6 +126,22 @@ public class TempFile extends Task { | |||||
public boolean isDeleteOnExit() { | public boolean isDeleteOnExit() { | ||||
return deleteOnExit; | 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. | * Creates the temporary file. | ||||
@@ -136,8 +155,14 @@ public class TempFile extends Task { | |||||
if (destDir == null) { | if (destDir == null) { | ||||
destDir = getProject().resolveFile("."); | 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()); | getProject().setNewProperty(property, tfile.toString()); | ||||
} | } | ||||
@@ -1824,8 +1824,8 @@ public class FTP | |||||
FTPFile [] theFiles = null; | FTPFile [] theFiles = null; | ||||
final int maxIterations = 1000; | final int maxIterations = 1000; | ||||
for (int counter = 1; counter < maxIterations; counter++) { | 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(); | String fileName = localFile.getName(); | ||||
boolean found = false; | boolean found = false; | ||||
try { | try { | ||||
@@ -786,12 +786,8 @@ public class FileUtils { | |||||
* <p>The file denoted by the returned abstract pathname did not | * <p>The file denoted by the returned abstract pathname did not | ||||
* exist before this method was invoked, any subsequent invocation | * exist before this method was invoked, any subsequent invocation | ||||
* of this method will yield a different file name.</p> | * 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 prefix prefix before the random number. | ||||
* @param suffix file extension; include the '.'. | * @param suffix file extension; include the '.'. | ||||
@@ -811,19 +807,15 @@ public class FileUtils { | |||||
* <p>The file denoted by the returned abstract pathname did not | * <p>The file denoted by the returned abstract pathname did not | ||||
* exist before this method was invoked, any subsequent invocation | * exist before this method was invoked, any subsequent invocation | ||||
* of this method will yield a different file name.</p> | * 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 prefix prefix before the random number. | ||||
* @param suffix file extension; include the '.'. | * @param suffix file extension; include the '.'. | ||||
* @param parentDir Directory to create the temporary file in; | * @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 | * @param deleteOnExit whether to set the tempfile for deletion on | ||||
* normal VM exit. | * normal VM exit. | ||||
* java.io.tmpdir used if not specified. | |||||
* | * | ||||
* @return a File reference to the new temporary file. | * @return a File reference to the new temporary file. | ||||
* @since Ant 1.7 | * @since Ant 1.7 | ||||
@@ -834,11 +826,51 @@ public class FileUtils { | |||||
String parent = (parentDir == null) | String parent = (parentDir == null) | ||||
? System.getProperty("java.io.tmpdir") | ? System.getProperty("java.io.tmpdir") | ||||
: parentDir.getPath(); | : 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("#####"); | DecimalFormat fmt = new DecimalFormat("#####"); | ||||
synchronized (rand) { | synchronized (rand) { | ||||
do { | 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()); | } while (result.exists()); | ||||
} | } | ||||
if (deleteOnExit) { | if (deleteOnExit) { | ||||
@@ -846,6 +878,8 @@ public class FileUtils { | |||||
} | } | ||||
return result; | return result; | ||||
} | } | ||||
/** | /** | ||||
* Compares the contents of two files. | * Compares the contents of two files. | ||||