Fix #9358: preserve --allow-empty and --sbt-create in sbtArguments (#9370)

This commit is contained in:
Anatolii Kmetiuk 2026-06-23 15:03:21 +09:00 committed by GitHub
parent d5e9888db9
commit 1d7b0d66c3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 36 additions and 6 deletions

View File

@ -389,7 +389,9 @@ class NetworkClient(
s"$javaHome/bin/java"
}
.getOrElse("java")
List(java) ++ arguments.sbtArguments ++
List(java) ++ arguments.sbtArguments.filterNot(
NetworkClient.emptyBuildFlags.contains
) ++
List("-jar", lj, DashDashDetachStdio, DashDashServer)
case _ =>
List(arguments.sbtScript) ++ arguments.sbtArguments ++
@ -1270,11 +1272,13 @@ object NetworkClient {
"--no-share",
"-no-global",
"--no-global",
"shutdownall"
)
private[client] val emptyBuildFlags: Set[String] = Set(
"-allow-empty",
"--allow-empty",
"-sbt-create",
"--sbt-create",
"shutdownall",
)
// Prefixes for launcher flags using = syntax
private[client] val launcherEqPrefixes: Seq[String] = Seq(
@ -1301,8 +1305,10 @@ object NetworkClient {
var i = 0
while (i < sanitized.length) {
sanitized(i) match {
case a if completionArguments.nonEmpty => completionArguments += a
case a if commandArgs.nonEmpty => commandArgs += a
case a if completionArguments.nonEmpty => completionArguments += a
case a if commandArgs.nonEmpty && emptyBuildFlags.contains(a) =>
sbtArguments += a
case a if commandArgs.nonEmpty => commandArgs += a
case a if a == noStdErr || a == noTab || a.startsWith(completions) =>
completionArguments += a
case a if a.startsWith("--sbt-script=") =>

View File

@ -77,12 +77,36 @@ object NetworkClientParseArgsTest extends BasicTestSuite:
assert(!result.sbtArguments.contains("-batch"))
assert(result.commandArguments.contains("compile"))
test("-allow-empty is dropped"):
test("-allow-empty remains in sbtArguments and is not a sbt command"):
val result = parse("-allow-empty", "compile")
assert(!result.sbtArguments.contains("-allow-empty"))
assert(result.sbtArguments.contains("-allow-empty"))
assert(!result.commandArguments.contains("-allow-empty"))
assert(result.commandArguments.contains("compile"))
test("--allow-empty remains in sbtArguments and is not a sbt command"):
val result = parse("--allow-empty", "compile")
assert(result.sbtArguments.contains("--allow-empty"))
assert(!result.commandArguments.contains("--allow-empty"))
assert(result.commandArguments.contains("compile"))
test("-sbt-create remains in sbtArguments and is not a sbt command"):
val result = parse("-sbt-create", "compile")
assert(result.sbtArguments.contains("-sbt-create"))
assert(!result.commandArguments.contains("-sbt-create"))
assert(result.commandArguments.contains("compile"))
test("--sbt-create remains in sbtArguments and is not a sbt command"):
val result = parse("--sbt-create", "compile")
assert(result.sbtArguments.contains("--sbt-create"))
assert(!result.commandArguments.contains("--sbt-create"))
assert(result.commandArguments.contains("compile"))
test("compile --allow-empty keeps --allow-empty in sbtArguments"):
val result = parse("compile", "--allow-empty")
assert(result.sbtArguments.contains("--allow-empty"))
assert(!result.commandArguments.contains("--allow-empty"))
assert(result.commandArguments.contains("compile"))
// -- Eq-syntax flags and -J* --
test("--supershell=false is dropped"):