mirror of
https://github.com/apple/pkl.git
synced 2026-04-23 00:38:37 +02:00
Do not crash, but suggest '--multiple-file-output-path' when specifying a directory as output file (#1038)
When specifying a directory instead of a file for the output, pkl won't crash anymore, but instead output an error message, suggesting --multiple-file-output-path.
This commit is contained in:
@@ -19,6 +19,7 @@ import java.io.File
|
|||||||
import java.io.Reader
|
import java.io.Reader
|
||||||
import java.io.Writer
|
import java.io.Writer
|
||||||
import java.net.URI
|
import java.net.URI
|
||||||
|
import java.nio.file.Files
|
||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
import java.nio.file.StandardOpenOption
|
import java.nio.file.StandardOpenOption
|
||||||
import kotlin.io.path.createParentDirectories
|
import kotlin.io.path.createParentDirectories
|
||||||
@@ -152,6 +153,12 @@ constructor(
|
|||||||
for ((moduleUri, outputFile) in outputFiles) {
|
for ((moduleUri, outputFile) in outputFiles) {
|
||||||
val moduleSource = toModuleSource(moduleUri, consoleReader)
|
val moduleSource = toModuleSource(moduleUri, consoleReader)
|
||||||
val output = evaluator.evaluateExpressionString(moduleSource, options.expression)
|
val output = evaluator.evaluateExpressionString(moduleSource, options.expression)
|
||||||
|
if (Files.isDirectory(outputFile)) {
|
||||||
|
throw CliException(
|
||||||
|
"Output file `$outputFile` is a directory. " +
|
||||||
|
"Did you mean `--multiple-file-output-path`?"
|
||||||
|
)
|
||||||
|
}
|
||||||
outputFile.createParentDirectories()
|
outputFile.createParentDirectories()
|
||||||
if (!writtenFiles.contains(outputFile)) {
|
if (!writtenFiles.contains(outputFile)) {
|
||||||
// write file even if output is empty to overwrite output from previous runs
|
// write file even if output is empty to overwrite output from previous runs
|
||||||
|
|||||||
@@ -725,6 +725,39 @@ result = someLib.x
|
|||||||
assertThat(output).endsWith("\n")
|
assertThat(output).endsWith("\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `file output throws if output file is a directory`() {
|
||||||
|
val sourceFiles =
|
||||||
|
listOf(
|
||||||
|
writePklFile(
|
||||||
|
"test.pkl",
|
||||||
|
"""
|
||||||
|
name = "test"
|
||||||
|
output {
|
||||||
|
files {
|
||||||
|
["\(name).txt"] {
|
||||||
|
text = "test"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
.trimIndent(),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
val err =
|
||||||
|
assertThrows<CliException> {
|
||||||
|
evalToFiles(
|
||||||
|
CliEvaluatorOptions(
|
||||||
|
CliBaseOptions(sourceModules = sourceFiles),
|
||||||
|
outputPath = tempDir.toString(),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
assertThat(err)
|
||||||
|
.hasMessageContaining("Output file `$tempDir` is a directory. ")
|
||||||
|
.hasMessageContaining("Did you mean `--multiple-file-output-path`?")
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `multiple file output writes multiple files to the provided directory`() {
|
fun `multiple file output writes multiple files to the provided directory`() {
|
||||||
val contents =
|
val contents =
|
||||||
|
|||||||
Reference in New Issue
Block a user