Skip to content

Commit ed18df2

Browse files
committed
Fix #4929: allow reusing TastyFileManager
Recreate `tempDir` if we're reused after `complete` was called and deleted the existing `tempDir`. The output in #4929 was produced by this commit.
1 parent d3b3192 commit ed18df2

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

sbt-dotty/src/dotty/tools/sbtplugin/TastyFileManager.scala

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,15 @@ import scala.collection.mutable
2020
* temporary directory as class files.
2121
*/
2222
final class TastyFileManager extends ClassFileManager {
23-
private[this] val tempDir = Files.createTempDirectory("backup").toFile
23+
private[this] def newTempDir() = Files.createTempDirectory("backup").toFile
24+
private[this] var _tempDir: File = null
25+
private[this] def tempDir = {
26+
if (_tempDir == null) {
27+
_tempDir = newTempDir()
28+
println(s"ClassFileManager.tempDir: creating ${_tempDir} in $this")
29+
}
30+
_tempDir
31+
}
2432

2533
private[this] val generatedTastyFiles = new mutable.HashSet[File]
2634
private[this] val movedTastyFiles = new mutable.HashMap[File, File]
@@ -42,7 +50,11 @@ final class TastyFileManager extends ClassFileManager {
4250
IO.deleteFilesEmptyDirs(generatedTastyFiles)
4351
for ((orig, tmp) <- movedTastyFiles) IO.move(tmp, orig)
4452
}
45-
IO.delete(tempDir)
53+
if (_tempDir != null) {
54+
println(s"ClassFileManager.complete($success): deleting $tempDir from $this")
55+
IO.delete(tempDir)
56+
_tempDir = null
57+
}
4658
}
4759

4860
private def tastyFiles(classes: Array[File]): Array[File] = {
@@ -56,6 +68,7 @@ final class TastyFileManager extends ClassFileManager {
5668
}
5769

5870
private def move(c: File): File = {
71+
println(s"ClassFileManager.delete: maybe using $tempDir in $this")
5972
val target = File.createTempFile("sbt", ".tasty", tempDir)
6073
IO.move(c, target)
6174
target

0 commit comments

Comments
 (0)