mirror of
https://github.com/apple/pkl.git
synced 2026-06-05 13:22:54 +02:00
Change loading of external readers (#1394)
This introduces breaking changes for external readers are loaded: 1. In PklProject, relative paths are resolved relative to the enclosing PklProject file (make behavior consistent with how other settings work) 2. Make CLI flags blow away any settings set on a PklProject 3. Introduce a new `workingDir` property, which defaults to the PklProject dir The overall goal is to make this behavior consistent with how other settings work. For example, relative paths for other evaluator settings are already relative to the project directory. Additionally, in every other case, CLI flags will overwrite any setting set within PklProject.
This commit is contained in:
@@ -304,6 +304,8 @@ class Server(private val transport: MessageTransport) : AutoCloseable {
|
||||
externalReaderProcesses
|
||||
.computeIfAbsent(evaluatorId) { ConcurrentHashMap() }
|
||||
.computeIfAbsent(spec) {
|
||||
ExternalReaderProcess.of(PklEvaluatorSettings.ExternalReader(it.executable, it.arguments))
|
||||
ExternalReaderProcess.of(
|
||||
PklEvaluatorSettings.ExternalReader(it.executable, it.arguments, it.workingDir)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -149,5 +149,9 @@ class ServerMessagePackDecoder(unpacker: MessageUnpacker) : BaseMessagePackDecod
|
||||
}
|
||||
|
||||
private fun unpackExternalReader(map: Map<Value, Value>): ExternalReader =
|
||||
ExternalReader(unpackString(map, "executable"), unpackStringListOrNull(map, "arguments"))
|
||||
ExternalReader(
|
||||
unpackString(map, "executable"),
|
||||
unpackStringListOrNull(map, "arguments"),
|
||||
unpackStringOrNull(map, "workingDir"),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -99,9 +99,10 @@ class ServerMessagePackEncoder(packer: MessagePacker) : BaseMessagePackEncoder(p
|
||||
}
|
||||
|
||||
private fun packExternalReader(spec: ExternalReader) {
|
||||
packMapHeader(1, spec.arguments)
|
||||
packMapHeader(1, spec.arguments, spec.workingDir)
|
||||
packKeyValue("executable", spec.executable)
|
||||
spec.arguments?.let { packKeyValue("arguments", it) }
|
||||
spec.workingDir?.let { packKeyValue("workingDir", it) }
|
||||
}
|
||||
|
||||
override fun encodeMessage(msg: Message) {
|
||||
|
||||
@@ -49,7 +49,11 @@ data class CreateEvaluatorRequest(
|
||||
override fun requestId(): Long = requestId
|
||||
}
|
||||
|
||||
data class ExternalReader(val executable: String, val arguments: List<String>?)
|
||||
data class ExternalReader(
|
||||
val executable: String,
|
||||
val arguments: List<String>?,
|
||||
val workingDir: String?,
|
||||
)
|
||||
|
||||
data class Proxy(val address: URI?, val noProxy: List<String>?)
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ class ServerMessagePackCodecTest {
|
||||
val resourceReader2 = Messages.ResourceReaderSpec("resourceReader2", true, false)
|
||||
val moduleReader1 = Messages.ModuleReaderSpec("moduleReader1", true, true, true)
|
||||
val moduleReader2 = Messages.ModuleReaderSpec("moduleReader2", true, false, false)
|
||||
val externalReader = ExternalReader("external-cmd", listOf("arg1", "arg2"))
|
||||
val externalReader = ExternalReader("external-cmd", listOf("arg1", "arg2"), "/foo/bar")
|
||||
roundtrip(
|
||||
CreateEvaluatorRequest(
|
||||
requestId = 123,
|
||||
|
||||
Reference in New Issue
Block a user