mirror of
https://github.com/apple/pkl.git
synced 2026-01-11 14:20:35 +01: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.Writer
|
||||
import java.net.URI
|
||||
import java.nio.file.Files
|
||||
import java.nio.file.Path
|
||||
import java.nio.file.StandardOpenOption
|
||||
import kotlin.io.path.createParentDirectories
|
||||
@@ -152,6 +153,12 @@ constructor(
|
||||
for ((moduleUri, outputFile) in outputFiles) {
|
||||
val moduleSource = toModuleSource(moduleUri, consoleReader)
|
||||
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()
|
||||
if (!writtenFiles.contains(outputFile)) {
|
||||
// write file even if output is empty to overwrite output from previous runs
|
||||
|
||||
@@ -725,6 +725,39 @@ result = someLib.x
|
||||
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
|
||||
fun `multiple file output writes multiple files to the provided directory`() {
|
||||
val contents =
|
||||
|
||||
Reference in New Issue
Block a user