64 lines
2.5 KiB
Diff
64 lines
2.5 KiB
Diff
From 24b8ee0bec2f2761b479bdd989275f19597955a3 Mon Sep 17 00:00:00 2001
|
|
From: Carsten Varming <cvarming@twitter.com>
|
|
Date: Sat, 21 May 2016 22:43:07 -0400
|
|
Subject: [PATCH] Retry TemporaryFolder.newFolder's call to mkdir if the call
|
|
does not create a new directory.
|
|
|
|
Closes #1304
|
|
---
|
|
.../java/org/junit/rules/TemporaryFolder.java | 27 +++++++++++++++----
|
|
1 file changed, 22 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/src/main/java/org/junit/rules/TemporaryFolder.java b/src/main/java/org/junit/rules/TemporaryFolder.java
|
|
index 8fc9d5b370..0b3e874528 100644
|
|
--- a/src/main/java/org/junit/rules/TemporaryFolder.java
|
|
+++ b/src/main/java/org/junit/rules/TemporaryFolder.java
|
|
@@ -32,6 +32,9 @@ public class TemporaryFolder extends Ext
|
|
private final File parentFolder;
|
|
private File folder;
|
|
|
|
+ private static final int TEMP_DIR_ATTEMPTS = 10000;
|
|
+ private static final String TMP_PREFIX = "junit";
|
|
+
|
|
public TemporaryFolder() {
|
|
this(null);
|
|
}
|
|
@@ -75,7 +78,7 @@ public class TemporaryFolder extends Ext
|
|
* Returns a new fresh file with a random name under the temporary folder.
|
|
*/
|
|
public File newFile() throws IOException {
|
|
- return File.createTempFile("junit", null, getRoot());
|
|
+ return File.createTempFile(TMP_PREFIX, null, getRoot());
|
|
}
|
|
|
|
/**
|
|
@@ -131,10 +134,24 @@ public class TemporaryFolder extends Ext
|
|
}
|
|
|
|
private File createTemporaryFolderIn(File parentFolder) throws IOException {
|
|
- File createdFolder = File.createTempFile("junit", "", parentFolder);
|
|
- createdFolder.delete();
|
|
- createdFolder.mkdir();
|
|
- return createdFolder;
|
|
+ File createdFolder = null;
|
|
+ for (int i = 0; i < TEMP_DIR_ATTEMPTS; ++i) {
|
|
+ // Use createTempFile to get a suitable folder name.
|
|
+ String suffix = ".tmp";
|
|
+ File tmpFile = File.createTempFile(TMP_PREFIX, suffix, parentFolder);
|
|
+ String tmpName = tmpFile.getName();
|
|
+ // Discard suffix of tmpName.
|
|
+ String folderName = tmpName.substring(0, tmpName.length() - suffix.length());
|
|
+ createdFolder = new File(parentFolder, folderName);
|
|
+ if (createdFolder.mkdir()) {
|
|
+ tmpFile.delete();
|
|
+ return createdFolder;
|
|
+ }
|
|
+ tmpFile.delete();
|
|
+ }
|
|
+ throw new IOException("Unable to create temporary directory in: "
|
|
+ + parentFolder.toString() + ". Tried " + TEMP_DIR_ATTEMPTS + " times. "
|
|
+ + "Last attempted to create: " + createdFolder.toString());
|
|
}
|
|
|
|
/**
|