From 54aefddcee3352f1967fab4bd65716338d88e005 Mon Sep 17 00:00:00 2001 From: Piotr Chabelski Date: Mon, 19 Sep 2022 11:24:17 +0200 Subject: [PATCH] Ensure directories are created recursively when calling `package` (#1371) --- .../scala/scala/cli/commands/Package.scala | 10 +++++----- .../scala/scala/cli/internal/ProcUtil.scala | 2 +- .../integration/PackageTestDefinitions.scala | 18 ++++++++++++++++++ 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/modules/cli/src/main/scala/scala/cli/commands/Package.scala b/modules/cli/src/main/scala/scala/cli/commands/Package.scala index 1bd3fbc4d7..3a7d8a1f78 100644 --- a/modules/cli/src/main/scala/scala/cli/commands/Package.scala +++ b/modules/cli/src/main/scala/scala/cli/commands/Package.scala @@ -304,20 +304,20 @@ object Package extends ScalaCommand[PackageOptions] with BuildCommandHelpers { val content = Library.libraryJar(build) alreadyExistsCheck() if (force) os.write.over(destPath, content) - else os.write(destPath, content) + else os.write(destPath, content, createFolders = true) destPath case PackageType.SourceJar => val now = System.currentTimeMillis() val content = sourceJar(build, now) alreadyExistsCheck() - if (force) os.write.over(destPath, content) - else os.write(destPath, content) + if (force) os.write.over(destPath, content, createFolders = true) + else os.write(destPath, content, createFolders = true) destPath case PackageType.DocJar => val docJarPath = value(docJar(build, logger, extraArgs)) alreadyExistsCheck() - if (force) os.copy.over(docJarPath, destPath) - else os.copy(docJarPath, destPath) + if (force) os.copy.over(docJarPath, destPath, createFolders = true) + else os.copy(docJarPath, destPath, createFolders = true) destPath case a: PackageType.Assembly => value { diff --git a/modules/cli/src/main/scala/scala/cli/internal/ProcUtil.scala b/modules/cli/src/main/scala/scala/cli/internal/ProcUtil.scala index 589d6078c8..d7705f1233 100644 --- a/modules/cli/src/main/scala/scala/cli/internal/ProcUtil.scala +++ b/modules/cli/src/main/scala/scala/cli/internal/ProcUtil.scala @@ -29,7 +29,7 @@ object ProcUtil { content.drop("#!/bin/sh".length) else sys.error("Can't happen") - os.write.over(file, updatedContent) + os.write.over(file, updatedContent, createFolders = true) } usesSh diff --git a/modules/integration/src/test/scala/scala/cli/integration/PackageTestDefinitions.scala b/modules/integration/src/test/scala/scala/cli/integration/PackageTestDefinitions.scala index a99455fa4d..307cc31ecf 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/PackageTestDefinitions.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/PackageTestDefinitions.scala @@ -812,6 +812,24 @@ abstract class PackageTestDefinitions(val scalaVersionOpt: Option[String]) } } + test("ensure directories are created recursively when packaging a jar") { + TestInputs( + os.rel / "Simple.scala" -> s"""object Simple extends App { println() }""" + ).fromRoot { (root: os.Path) => + val jarPath = + os.rel / "out" / "inner-out" / "Simple.jar" // the `out` directory doesn't exist and should be created + os.proc( + TestUtil.cli, + "package", + ".", + "--library", + "-o", + jarPath, + extraOptions + ).call(cwd = root) + } + } + def javaOptionsDockerTest(): Unit = { val fileName = "Hello.scala" val imageName = "hello"