Browse Source

provide a magic property that overrides temp directory

master
Stefan Bodewig 5 years ago
parent
commit
9c1f4d905d
31 changed files with 214 additions and 58 deletions
  1. +3
    -0
      WHATSNEW
  2. +4
    -0
      manual/Tasks/cab.html
  3. +2
    -0
      manual/Tasks/cvstagdiff.html
  4. +3
    -0
      manual/Tasks/ejb.html
  5. +2
    -0
      manual/Tasks/exec.html
  6. +3
    -1
      manual/Tasks/fixcrlf.html
  7. +6
    -1
      manual/Tasks/ftp.html
  8. +5
    -1
      manual/Tasks/javadoc.html
  9. +4
    -1
      manual/Tasks/replaceregexp.html
  10. +4
    -0
      manual/Types/selectors.html
  11. +46
    -0
      manual/running.html
  12. +9
    -0
      src/main/org/apache/tools/ant/MagicNames.java
  13. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/FixCRLF.java
  14. +2
    -2
      src/main/org/apache/tools/ant/taskdefs/Javadoc.java
  15. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/Jikes.java
  16. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/Replace.java
  17. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/TempFile.java
  18. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/Zip.java
  19. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java
  20. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/cvslib/CvsTagDiff.java
  21. +5
    -5
      src/main/org/apache/tools/ant/taskdefs/launcher/VmsCommandLauncher.java
  22. +2
    -2
      src/main/org/apache/tools/ant/taskdefs/optional/Cab.java
  23. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/optional/ReplaceRegExp.java
  24. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java
  25. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java
  26. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/optional/net/FTPTaskMirrorImpl.java
  27. +1
    -1
      src/main/org/apache/tools/ant/types/selectors/modifiedselector/ModifiedSelector.java
  28. +47
    -18
      src/main/org/apache/tools/ant/util/FileUtils.java
  29. +1
    -1
      src/main/org/apache/tools/ant/util/JavaEnvUtils.java
  30. +4
    -3
      src/main/org/apache/tools/ant/util/SymbolicLinkUtils.java
  31. +50
    -11
      src/tests/junit/org/apache/tools/ant/util/FileUtilsTest.java

+ 3
- 0
WHATSNEW View File

@@ -10,6 +10,9 @@ Other changes:
* rmic has been removed from Java 15. The task will now throw an
exception if you try to use it while running Java 15 or newer.

* a new property ant.tmpdir provides improved control over the
location Ant uses to create temporary files

Changes from Ant 1.9.13 TO Ant 1.9.14
=====================================



+ 4
- 0
manual/Tasks/cab.html View File

@@ -41,6 +41,10 @@ supports most attributes of <code>&lt;fileset&gt;</code>
(<code>dir</code> becomes <code>basedir</code>) as well as the nested
<code>&lt;include&gt;</code>, <code>&lt;exclude&gt;</code> and
<code>&lt;patternset&gt;</code> elements.</p>

<p>On non-Unix platforms this task writes the list of files to archive
to the <a href="../running.html#tmpdir">temporary directory</a>.</p>

<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
<tr>


+ 2
- 0
manual/Tasks/cvstagdiff.html View File

@@ -33,6 +33,8 @@ with the Unix version from cvshome.org, this is not completely true
for certain other cvs clients - like CVSNT for example - and some
operation may fail when using such an incompatible client.
</p>
<p>This task captures the output of the CVS command in a file inside of
the <a href="../running.html#tmpdir">temporary directory</a>.</p>
<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
<tr>


+ 3
- 0
manual/Tasks/ejb.html View File

@@ -1613,6 +1613,9 @@ the ejbjar task (for example, basejarname, basenameterminator, and flatdestdir)
as well as the iplanet element (for example, suffix). Refer to the appropriate
documentation for more details.</p>

<p>This task creates a directory for scratch data inside of
the <a href="../running.html#tmpdir">temporary directory</a>.</p>

<h3> Parameters:</h3>

<table border="1" cellspacing="0" cellpadding="2">


+ 2
- 0
manual/Tasks/exec.html View File

@@ -97,6 +97,8 @@ OpenJDK build instructions for cygwin</a>.
<code>&lt;arg&gt;</code> elements is executed exactly as specified
inside a temporary DCL script. This has some implications:
<ul>
<li>the DCL script will be created inside
the <a href="../running.html#tmpdir">temporary directory</a>.</li>
<li>paths have to be written in VMS style</li>
<li>if your <code>executable</code> points to a DCL script remember to
prefix it with an <code>@</code>-sign


+ 3
- 1
manual/Tasks/fixcrlf.html View File

@@ -58,7 +58,9 @@
The output file is only written if it is a new file, or if it
differs from the existing file. This prevents spurious
rebuilds based on unchanged files which have been regenerated
by this task.
by this task. In order to assess whether a file has changed, this
task will create a pre-processed version of the source file inside of
the <a href="../running.html#tmpdir">temporary directory</a>.
</p>

<p>


+ 6
- 1
manual/Tasks/ftp.html View File

@@ -150,7 +150,12 @@ try to set up a new connection.</p>
<td valign="top">set to <code>"true"</code>
to make ant calculate the time difference between client and server.<br>
<em>requires write access in the remote directory</em><br>
Since ant 1.6</td>
Since ant 1.6<br/>
If this is set to <code>true</code> then Ant will create an empty
file inside of the <a href="../running.html#tmpdir">temporary
directory</a> and transfer it to the remote server - deleting it on
both sides once the difference has been determined.
</td>
<td valign="top" align="center">No</td>
</tr>
<a name="timestampGranularity"/>


+ 5
- 1
manual/Tasks/javadoc.html View File

@@ -451,7 +451,11 @@ to &lt;javadoc&gt; using <tt>classpath</tt>, <tt>classpathref</tt> attributes or
the package names specified via the packagenames attribute or
nested package elements. <em>Since Ant 1.7.0</em>, also applies
to all the other command line options.
(<code>yes</code> | <code>no</code>). Default is no.</td>
(<code>yes</code> | <code>no</code>). Default is no.<br/>
If enabled, the file will be written to
the <a href="../running.html#tmpdir">temporary
directory</a>.</p>
</td>
<td align="center" valign="top">all</td>
<td valign="top" align="center">No</td>
</tr>


+ 4
- 1
manual/Tasks/replaceregexp.html View File

@@ -31,7 +31,10 @@ in a selected file or set of files.</p>

<p>The output file is only written if it differs from the existing
file. This prevents spurious rebuilds based on unchanged files which
have been regenerated by this task.</p>
have been regenerated by this task. In order to assess whether a file
has changed, this task will create a pre-processed version of the
source file inside of the <a href="../running.html#tmpdir">temporary
directory</a>.</p>

<p>Similar to <a href="../Types/mapper.html#regexp-mapper">regexp
type mappers</a> this task needs a supporting regular expression


+ 4
- 0
manual/Types/selectors.html View File

@@ -728,6 +728,10 @@
to (<b>attention!</b>) copy the content into a local file for computing the
hashvalue.</p>

<p>If the source resource is not a filesystem resource the
modified selector will download it to
the <a href="../running.html#tmpdir">temporary directory</a>.</p>

<table border="1" cellpadding="2" cellspacing="0">
<tr>
<td valign="top"><b>Attribute</b></td>


+ 46
- 0
manual/running.html View File

@@ -490,6 +490,22 @@ org.apache.tools.ant.Executor implementation specified here.
<td>number, seconds since the epoch (midnight 1970-01-01)</td>
<td>The value to use as current time and date for &lt;tstamp&gt;</td>
</tr>
<tr>
<td><code>java.io.tmpdir</code></td>
<td>Some tasks need to create temporary files and will write them to
the directory specified by this property. This property is set by
the Java VM but can be overridden when Ant is started.<br/>
See also <a href="#tmpdir">Temporary Directories</a>.</td>
</table>
<tr>
<td><code>ant.tmpdir</code></td>
<td><em>Since Ant 1.9.15</em><br/>
Some tasks need to create temporary files and will write them to
the directory specified by this property. This property takes
precedence over <code>java.io.tmpdir</code> if it has been
set. Unlike <code>java.io.tmpdir</code> this property can be set
from within the build file.<br/>
See also <a href="#tmpdir">Temporary Directories</a>.</td>
</table>

<p>
@@ -505,6 +521,36 @@ the return code of the java program. So a successful build returns 0,
failed builds return other values.
</p>

<h2><a name="tmpdir">Temporary Directories</a></h2>

Some Ant tasks and types need to create temporary files. By default
they use the default temporary directory of the Java VM they are
running in - which can be set by setting the system
property <code>java.io.tmpdir</code>. The default value of it depends
on the platform and the JVM implementation.</p>

<p>Setting a system property when invoking Ant is not straight forward
as the corresponding command line arguments must be sent to the Java
executable rather than Ant's main class. When using
the <code>ant(.cmd)</code> wrapper scripts you can do so with the
help of the <code>ANT_OPTS</code> environment variable.</p>

<p>Starting with Ant 1.9.15 we've introduced a new Ant
property <code>ant.tmpdir</code> that takes precedence
over <code>java.io.tmpdir</code> when set. As this is a normal Ant
property it can be set via the command line or even from within a
build file.</p>

<p>Tasks and types using the temporary directory will state the fact
inside of their respective manual page. In addition every execution
of an external command on OpenVMS will create a temporary file
holding a DCL script that invokes the actual command.</p>

<p>Tasks not provided with the Ant distribution will ignore
the <code>ant.tmpdir</code> property and
use <code>java.io.tmpdir</code> unless they have been adapted to the
changed API of Ant 1.9.15.</p>

<h2><a name="cygwin">Cygwin Users</a></h2>
<p>The Unix launch script that come with Ant works correctly with Cygwin. You
should not have any problems launching Ant from the Cygwin shell. It is


+ 9
- 0
src/main/org/apache/tools/ant/MagicNames.java View File

@@ -302,5 +302,14 @@ public final class MagicNames {
* @since Ant 1.9.10
*/
public static final String TSTAMP_NOW = "ant.tstamp.now";

/**
* Magic property that can be set to override the java.io.tmpdir
* system property as the location for Ant's default temporary
* directory.
* Value: {@value}
* @since Ant 1.9.15
*/
public static final String TMPDIR = "ant.tmpdir";
}


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/FixCRLF.java View File

@@ -352,7 +352,7 @@ public class FixCRLF extends MatchingTask implements ChainableReader {
fcv = new Vector<FilterChain>(1);
fcv.add(fc);
}
File tmpFile = FILE_UTILS.createTempFile("fixcrlf", "", null, true, true);
File tmpFile = FILE_UTILS.createTempFile(getProject(), "fixcrlf", "", null, true, true);
try {
FILE_UTILS.copyFile(srcFile, tmpFile, null, fcv, true, false,
encoding, outputEncoding == null ? encoding : outputEncoding,


+ 2
- 2
src/main/org/apache/tools/ant/taskdefs/Javadoc.java View File

@@ -1880,7 +1880,7 @@ public class Javadoc extends Task {
*/
BufferedWriter srcListWriter = null;
if (useExternalFile) {
tmpList = FILE_UTILS.createTempFile("javadoc", "", null, true, true);
tmpList = FILE_UTILS.createTempFile(getProject(), "javadoc", "", null, true, true);
toExecute.createArgument()
.setValue("@" + tmpList.getAbsolutePath());
wr = new FileWriter(tmpList.getAbsolutePath(), true);
@@ -2065,7 +2065,7 @@ public class Javadoc extends Task {
BufferedWriter optionsListWriter = null;
try {
optionsTmpFile = FILE_UTILS.createTempFile(
"javadocOptions", "", null, true, true);
getProject(), "javadocOptions", "", null, true, true);
final String[] listOpt = toExecute.getArguments();
toExecute.clearArgs();
toExecute.createArgument().setValue(


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/Jikes.java View File

@@ -87,7 +87,7 @@ public class Jikes {
&& args.length > MAX_FILES_ON_COMMAND_LINE) {
BufferedWriter out = null;
try {
tmpFile = FileUtils.getFileUtils().createTempFile("jikes",
tmpFile = FileUtils.getFileUtils().createTempFile(project, "jikes",
"tmp", null, false, true);
out = new BufferedWriter(new FileWriter(tmpFile));
for (String arg : args) {


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/Replace.java View File

@@ -665,7 +665,7 @@ public class Replace extends MatchingTask {
logFilterChain(src.getPath());

try {
File temp = FILE_UTILS.createTempFile("rep", ".tmp",
File temp = FILE_UTILS.createTempFile(getProject(), "rep", ".tmp",
src.getParentFile(), false, true);
try {
FileInput in = new FileInput(src);


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/TempFile.java View File

@@ -156,7 +156,7 @@ public class TempFile extends Task {
if (destDir == null) {
destDir = getProject().resolveFile(".");
}
File tfile = FILE_UTILS.createTempFile(prefix, suffix, destDir,
File tfile = FILE_UTILS.createTempFile(getProject(), prefix, suffix, destDir,
deleteOnExit, createFile);
getProject().setNewProperty(property, tfile.toString());
}


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/Zip.java View File

@@ -819,7 +819,7 @@ public class Zip extends MatchingTask {
/** rename the zip file. */
private File renameFile() {
final File renamedFile = FILE_UTILS.createTempFile(
"zip", ".tmp", zipFile.getParentFile(), true, false);
getProject(), "zip", ".tmp", zipFile.getParentFile(), true, false);
try {
FILE_UTILS.rename(zipFile, renamedFile);
} catch (final SecurityException e) {


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/compilers/DefaultCompilerAdapter.java View File

@@ -556,7 +556,7 @@ public abstract class DefaultCompilerAdapter
BufferedWriter out = null;
try {
tmpFile = FILE_UTILS.createTempFile(
"files", "", getJavac().getTempdir(), true, true);
getProject(), "files", "", getJavac().getTempdir(), true, true);
out = new BufferedWriter(new FileWriter(tmpFile));
for (int i = firstFileName; i < args.length; i++) {
if (quoteFiles && args[i].contains(" ")) {


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/cvslib/CvsTagDiff.java View File

@@ -263,7 +263,7 @@ public class CvsTagDiff extends AbstractCvsTask {
try {
handlePackageNames();

tmpFile = FILE_UTILS.createTempFile("cvstagdiff", ".log", null,
tmpFile = FILE_UTILS.createTempFile(getProject(), "cvstagdiff", ".log", null,
true, true);
setOutput(tmpFile);



+ 5
- 5
src/main/org/apache/tools/ant/taskdefs/launcher/VmsCommandLauncher.java View File

@@ -52,7 +52,7 @@ public class VmsCommandLauncher extends Java13CommandLauncher {
@Override
public Process exec(Project project, String[] cmd, String[] env)
throws IOException {
File cmdFile = createCommandFile(cmd, env);
File cmdFile = createCommandFile(project, cmd, env);
Process p = super.exec(project, new String[] {cmdFile.getPath()}, env);
deleteAfter(cmdFile, p);
return p;
@@ -79,7 +79,7 @@ public class VmsCommandLauncher extends Java13CommandLauncher {
@Override
public Process exec(Project project, String[] cmd, String[] env,
File workingDir) throws IOException {
File cmdFile = createCommandFile(cmd, env);
File cmdFile = createCommandFile(project, cmd, env);
Process p = super.exec(project, new String[] {cmdFile.getPath()}, env, workingDir);
deleteAfter(cmdFile, p);
return p;
@@ -93,9 +93,9 @@ public class VmsCommandLauncher extends Java13CommandLauncher {
* @return the command File.
* @throws IOException if errors are encountered creating the file.
*/
private File createCommandFile(String[] cmd, String[] env)
private File createCommandFile(final Project project, String[] cmd, String[] env)
throws IOException {
File script = FILE_UTILS.createTempFile("ANT", ".COM", null, true, true);
File script = FILE_UTILS.createTempFile(project, "ANT", ".COM", null, true, true);
BufferedWriter out = null;
try {
out = new BufferedWriter(new FileWriter(script));
@@ -140,4 +140,4 @@ public class VmsCommandLauncher extends Java13CommandLauncher {
}
}.start();
}
}
}

+ 2
- 2
src/main/org/apache/tools/ant/taskdefs/optional/Cab.java View File

@@ -179,7 +179,7 @@ public class Cab extends MatchingTask {
*/
protected File createListFile(Vector files)
throws IOException {
File listFile = FILE_UTILS.createTempFile("ant", "", null, true, true);
File listFile = FILE_UTILS.createTempFile(getProject(), "ant", "", null, true, true);

BufferedWriter writer = null;
try {
@@ -319,7 +319,7 @@ public class Cab extends MatchingTask {
exec.setDir(baseDir);

if (!doVerbose) {
outFile = FILE_UTILS.createTempFile("ant", "", null, true, true);
outFile = FILE_UTILS.createTempFile(getProject(), "ant", "", null, true, true);
exec.setOutput(outFile);
}



+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/optional/ReplaceRegExp.java View File

@@ -360,7 +360,7 @@ public class ReplaceRegExp extends Task {
*/
protected void doReplace(File f, int options)
throws IOException {
File temp = FILE_UTILS.createTempFile("replace", ".txt", null, true, true);
File temp = FILE_UTILS.createTempFile(getProject(), "replace", ".txt", null, true, true);
try {
boolean changes = false;



+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java View File

@@ -1453,7 +1453,7 @@ public class JUnitTask extends Task {
*/
private File createTempPropertiesFile(final String prefix) {
final File propsFile =
FILE_UTILS.createTempFile(prefix, ".properties",
FILE_UTILS.createTempFile(getProject(), prefix, ".properties",
tmpDir != null ? tmpDir : getProject().getBaseDir(), true, true);
return propsFile;
}


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/optional/net/FTP.java View File

@@ -1977,7 +1977,7 @@ public class FTP extends Task implements FTPTaskConfig {
FTPFile[] files = null;
final int maxIterations = 1000;
for (int counter = 1; counter < maxIterations; counter++) {
File localFile = FILE_UTILS.createTempFile(
File localFile = FILE_UTILS.createTempFile(getProject(),
"ant" + Integer.toString(counter), ".tmp",
null, false, false);
String fileName = localFile.getName();


+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/optional/net/FTPTaskMirrorImpl.java View File

@@ -1366,7 +1366,7 @@ public class FTPTaskMirrorImpl implements FTPTaskMirror {
FTPFile[] files = null;
final int maxIterations = 1000;
for (int counter = 1; counter < maxIterations; counter++) {
File localFile = FILE_UTILS.createTempFile(
File localFile = FILE_UTILS.createTempFile(task.getProject(),
"ant" + Integer.toString(counter), ".tmp",
null, false, false);
String fileName = localFile.getName();


+ 1
- 1
src/main/org/apache/tools/ant/types/selectors/modifiedselector/ModifiedSelector.java View File

@@ -449,7 +449,7 @@ public class ModifiedSelector extends BaseExtendSelector
// How to handle non-file-Resources? I copy temporarily the
// resource to a file and use the file-implementation.
FileUtils fu = FileUtils.getFileUtils();
File tmpFile = fu.createTempFile("modified-", ".tmp", null, true, false);
File tmpFile = fu.createTempFile(getProject(), "modified-", ".tmp", null, true, false);
Resource tmpResource = new FileResource(tmpFile);
ResourceUtils.copyResource(resource, tmpResource);
boolean isSelected = isSelected(tmpFile.getParentFile(),


+ 47
- 18
src/main/org/apache/tools/ant/util/FileUtils.java View File

@@ -43,6 +43,7 @@ import java.util.Vector;
import java.util.jar.JarFile;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.MagicNames;
import org.apache.tools.ant.PathTokenizer;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.launch.Locator;
@@ -882,19 +883,15 @@ public class FileUtils {
* 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 prefix file name prefix.
* @param suffix
* file extension; include the '.'.
* @param parentDir
* Directory to create the temporary file in; java.io.tmpdir used
* if not specified.
*
* @deprecated since ant 1.7.1 use createTempFile(String, String, File,
* @deprecated since ant 1.7.1 use createTempFile(Project, String, String, File,
* boolean, boolean) instead.
* @return a File reference to the new, nonexistent temporary file.
*/
@@ -902,8 +899,6 @@ public class FileUtils {
return createTempFile(prefix, suffix, parentDir, false, false);
}

private static final String NULL_PLACEHOLDER = "null";

/**
* Create a temporary file in a given directory.
*
@@ -911,7 +906,7 @@ public class FileUtils {
* exist before this method was invoked, any subsequent invocation
* of this method will yield a different file name.</p>
*
* @param prefix prefix before the random number.
* @param prefix file name prefix.
* @param suffix file extension; include the '.'.
* @param parentDir Directory to create the temporary file in;
* java.io.tmpdir used if not specified.
@@ -924,13 +919,51 @@ public class FileUtils {
*
* @return a File reference to the new temporary file.
* @since Ant 1.7.1
* @deprecated since Ant 1.9.15 use createTempFile(Project, String, String, File,
* boolean, boolean) instead.
*/
public File createTempFile(String prefix, String suffix, File parentDir,
boolean deleteOnExit, boolean createFile) {
return createTempFile(null, prefix, suffix, parentDir, deleteOnExit, createFile);
}

private static final String NULL_PLACEHOLDER = "null";

/**
* Create a temporary file in a given directory.
*
* <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>
*
* @param project reference to the current Ant project.
* @param prefix file name prefix.
* @param suffix file extension; include the '.'.
* @param parentDir Directory to create the temporary file in;
* if not specified and {@code project} is not null then the value
* of the property {@code ant.tmpdir} is used if set;
* otherwise {@code java.io.tmpdir} is used.
* @param deleteOnExit whether to set the tempfile for deletion on
* normal VM exit.
* @param createFile true if the file must actually be created. If false
* chances exist that a file with the same name is created in the time
* between invoking this method and the moment the file is actually created.
* If possible set to true.
*
* @return a File reference to the new temporary file.
* @since Ant 1.9.15
*/
public File createTempFile(final Project project, String prefix, String suffix,
final File parentDir, final boolean deleteOnExit, final boolean createFile) {
File result = null;
String parent = (parentDir == null)
? System.getProperty("java.io.tmpdir")
: parentDir.getPath();
final String parent;
if (parentDir != null) {
parent = parentDir.getPath();
} else if (project != null && project.getProperty(MagicNames.TMPDIR) != null) {
parent = project.getProperty(MagicNames.TMPDIR);
} else {
parent = System.getProperty("java.io.tmpdir");
}
if (prefix == null) {
prefix = NULL_PLACEHOLDER;
}
@@ -970,12 +1003,8 @@ public class FileUtils {
* 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 prefix file name prefix.
* @param suffix
* file extension; include the '.'.
* @param parentDir
@@ -984,7 +1013,7 @@ public class FileUtils {
* @param deleteOnExit
* whether to set the tempfile for deletion on normal VM exit.
*
* @deprecated since ant 1.7.1 use createTempFile(String, String, File,
* @deprecated since ant 1.7.1 use createTempFile(Project, String, String, File,
* boolean, boolean) instead.
* @return a File reference to the new, nonexistent temporary file.
*/


+ 1
- 1
src/main/org/apache/tools/ant/util/JavaEnvUtils.java View File

@@ -577,7 +577,7 @@ public final class JavaEnvUtils {
*/
public static File createVmsJavaOptionFile(String[] cmds)
throws IOException {
File script = FILE_UTILS.createTempFile("ANT", ".JAVA_OPTS", null, false, true);
File script = FILE_UTILS.createTempFile(null, "ANT", ".JAVA_OPTS", null, false, true);
BufferedWriter out = null;
try {
out = new BufferedWriter(new FileWriter(script));


+ 4
- 3
src/main/org/apache/tools/ant/util/SymbolicLinkUtils.java View File

@@ -23,6 +23,7 @@ import java.io.FilenameFilter;
import java.io.IOException;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.taskdefs.Execute;

@@ -242,9 +243,9 @@ public class SymbolicLinkUtils {
if (task == null || target.getParentFile().canWrite()) {

// rename the resource, thus breaking the link:
final File temp = FILE_UTILS.createTempFile("symlink", ".tmp",
target.getParentFile(), false,
false);
final Project project = task == null ? null : task.getProject();
final File temp = FILE_UTILS.createTempFile(project, "symlink", ".tmp",
target.getParentFile(), false, false);

if (FILE_UTILS.isLeadingPath(target, link)) {
// link points to a parent directory, renaming the parent


+ 50
- 11
src/tests/junit/org/apache/tools/ant/util/FileUtilsTest.java View File

@@ -23,6 +23,7 @@ import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.condition.Os;
import org.junit.After;
import org.junit.Before;
@@ -342,9 +343,16 @@ public class FileUtilsTest {
*/
@Test
public void testCreateTempFile() {
// null parent dir
File tmp1 = FILE_UTILS.createTempFile("pre", ".suf", null, false, true);
String tmploc = System.getProperty("java.io.tmpdir");
final String tmploc = System.getProperty("java.io.tmpdir");
final Project projectWithoutTempDir = new Project();
final Project projectWithTempDir = new Project();
final File projectTmpDir = new File(tmploc, "subdir");
projectTmpDir.mkdir();
removeThis = projectTmpDir;
projectWithTempDir.setProperty("ant.tmpdir", projectTmpDir.getAbsolutePath());

// null parent dir, null project
File tmp1 = FILE_UTILS.createTempFile(null, "pre", ".suf", null, false, true);
String name = tmp1.getName();
assertTrue("starts with pre", name.startsWith("pre"));
assertTrue("ends with .suf", name.endsWith(".suf"));
@@ -353,11 +361,30 @@ public class FileUtilsTest {
.getAbsolutePath());
tmp1.delete();

// null parent dir, project without magic property
tmp1 = FILE_UTILS.createTempFile(projectWithoutTempDir, "pre", ".suf", null, false, true);
name = tmp1.getName();
assertTrue("starts with pre", name.startsWith("pre"));
assertTrue("ends with .suf", name.endsWith(".suf"));
assertTrue("File was created", tmp1.exists());
assertEquals((new File(tmploc, tmp1.getName())).getAbsolutePath(), tmp1
.getAbsolutePath());
tmp1.delete();

// null parent dir, project with magic property
tmp1 = FILE_UTILS.createTempFile(projectWithTempDir, "pre", ".suf", null, false, true);
name = tmp1.getName();
assertTrue("starts with pre", name.startsWith("pre"));
assertTrue("ends with .suf", name.endsWith(".suf"));
assertTrue("File was created", tmp1.exists());
assertEquals((new File(projectTmpDir, tmp1.getName())).getAbsolutePath(), tmp1
.getAbsolutePath());
tmp1.delete();

File dir2 = new File(tmploc + "/ant-test");
dir2.mkdir();
removeThis = dir2;

File tmp2 = FILE_UTILS.createTempFile("pre", ".suf", dir2, true, true);
File tmp2 = FILE_UTILS.createTempFile(null, "pre", ".suf", dir2, true, true);
String name2 = tmp2.getName();
assertTrue("starts with pre", name2.startsWith("pre"));
assertTrue("ends with .suf", name2.endsWith(".suf"));
@@ -365,6 +392,24 @@ public class FileUtilsTest {
assertEquals((new File(dir2, tmp2.getName())).getAbsolutePath(), tmp2
.getAbsolutePath());
tmp2.delete();

tmp2 = FILE_UTILS.createTempFile(projectWithoutTempDir, "pre", ".suf", dir2, true, true);
name2 = tmp2.getName();
assertTrue("starts with pre", name2.startsWith("pre"));
assertTrue("ends with .suf", name2.endsWith(".suf"));
assertTrue("File was created", tmp2.exists());
assertEquals((new File(dir2, tmp2.getName())).getAbsolutePath(), tmp2
.getAbsolutePath());
tmp2.delete();

tmp2 = FILE_UTILS.createTempFile(projectWithTempDir, "pre", ".suf", dir2, true, true);
name2 = tmp2.getName();
assertTrue("starts with pre", name2.startsWith("pre"));
assertTrue("ends with .suf", name2.endsWith(".suf"));
assertTrue("File was created", tmp2.exists());
assertEquals((new File(dir2, tmp2.getName())).getAbsolutePath(), tmp2
.getAbsolutePath());
tmp2.delete();
dir2.delete();

File parent = new File((new File("/tmp")).getAbsolutePath());
@@ -380,12 +425,6 @@ public class FileUtilsTest {
tmp2 = FILE_UTILS.createTempFile("pre", ".suf", parent, false);
assertTrue("files are different", !tmp1.getAbsolutePath().equals(
tmp2.getAbsolutePath()));

// null parent dir
File tmp3 = FILE_UTILS.createTempFile("pre", ".suf", null, false);
tmploc = System.getProperty("java.io.tmpdir");
assertEquals((new File(tmploc, tmp3.getName())).getAbsolutePath(), tmp3
.getAbsolutePath());
}

/**


Loading…
Cancel
Save