From 799bd65ba580d2f4f273d2181693f0fe01fd1bda Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Sun, 29 Dec 2024 03:18:18 -0500 Subject: [PATCH] fix: Retry create directory **Problem** Files.createDirectories can fail. **Solution** Use IO version, which retries. --- buildfile/src/main/scala/sbt/internal/Eval.scala | 4 ++-- main/src/main/scala/sbt/Main.scala | 2 +- main/src/main/scala/sbt/internal/InstallSbtn.scala | 4 ++-- util-cache/src/main/scala/sbt/util/ActionCacheStore.scala | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/buildfile/src/main/scala/sbt/internal/Eval.scala b/buildfile/src/main/scala/sbt/internal/Eval.scala index 50bd140ad..5f73547e8 100644 --- a/buildfile/src/main/scala/sbt/internal/Eval.scala +++ b/buildfile/src/main/scala/sbt/internal/Eval.scala @@ -18,7 +18,7 @@ import java.nio.file.{ Files, Path, Paths, StandardOpenOption } import java.security.MessageDigest import scala.jdk.CollectionConverters.* import scala.quoted.* -import sbt.io.Hash +import sbt.io.{ Hash, IO } /** * - nonCpOptions - non-classpath options @@ -35,7 +35,7 @@ class Eval( import Eval.* backingDir.foreach { dir => - Files.createDirectories(dir) + IO.createDirectory(dir.toFile()) } private val outputDir = backingDir match diff --git a/main/src/main/scala/sbt/Main.scala b/main/src/main/scala/sbt/Main.scala index 48f5afb51..d3197ed91 100644 --- a/main/src/main/scala/sbt/Main.scala +++ b/main/src/main/scala/sbt/Main.scala @@ -1200,7 +1200,7 @@ object BuiltinCommands { try { val version = sbtVersion(state) val skipFile = skipWelcomeFile(state, version) - Files.createDirectories(skipFile.getParent) + IO.createDirectory(skipFile.getParent.toFile()) val suppress = !SysProp.banner || Files.exists(skipFile) if (!suppress) { Banner(version).foreach(banner => state.log.info(banner)) diff --git a/main/src/main/scala/sbt/internal/InstallSbtn.scala b/main/src/main/scala/sbt/internal/InstallSbtn.scala index 1dc75affc..acc3c3ee7 100644 --- a/main/src/main/scala/sbt/internal/InstallSbtn.scala +++ b/main/src/main/scala/sbt/internal/InstallSbtn.scala @@ -61,7 +61,7 @@ private[sbt] object InstallSbtn { private[sbt] def extractSbtn(term: Terminal, version: String, sbtZip: Path, sbtn: Path): Unit = { downloadRelease(term, version, sbtZip) - Files.createDirectories(sbtn.getParent) + IO.createDirectory(sbtn.getParent().toFile()) val bin = if (Properties.isWin) "pc-win32.exe" else if (Properties.isLinux) "pc-linux" @@ -140,7 +140,7 @@ private[sbt] object InstallSbtn { } } private def downloadCompletion(completion: String, version: String, target: Path): Unit = { - Files.createDirectories(target.getParent) + IO.createDirectory(target.getParent().toFile()) val comp = s"https://raw.githubusercontent.com/sbt/sbt/v$version/client/completions/$completion" transfer(new URI(comp).toURL.openStream, target) } diff --git a/util-cache/src/main/scala/sbt/util/ActionCacheStore.scala b/util-cache/src/main/scala/sbt/util/ActionCacheStore.scala index 0149802b4..e043a969e 100644 --- a/util-cache/src/main/scala/sbt/util/ActionCacheStore.scala +++ b/util-cache/src/main/scala/sbt/util/ActionCacheStore.scala @@ -274,7 +274,7 @@ class DiskActionCacheStore(base: Path, converter: FileConverter) extends Abstrac // On Windows, the program has be running under the Administrator privileges or the // user enable Developer Mode on Windows 10+ to create symbolic links. def writeFileAndNotify(outPath: Path): Path = - Files.createDirectories(outPath.getParent()) + IO.createDirectory(outPath.getParent().toFile()) val result = Retry: if Files.exists(outPath) then IO.delete(outPath.toFile()) if symlinkSupported.get() then @@ -314,7 +314,7 @@ class DiskActionCacheStore(base: Path, converter: FileConverter) extends Abstrac */ private def unpackageDirZip(dirzip: Path, outputDirectory: Path): Path = val dirPath = Paths.get(dirzip.toString.dropRight(ActionCache.dirZipExt.size)) - Files.createDirectories(dirPath) + IO.createDirectory(dirPath.toFile()) val allPaths = mutable.Set( FileTreeView.default .list(dirPath.toGlob / ** / "*")