From 8bbbd49d430a61b600e80e7faae499c0168a2984 Mon Sep 17 00:00:00 2001 From: cyqsimon <28627918+cyqsimon@users.noreply.github.com> Date: Mon, 21 Sep 2026 13:26:28 +0800 Subject: [PATCH] fix(parse): accept erroneously rejected forms of `--detach` --- src/cli/container/podman.rs | 2 +- src/cli/generate.rs | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/cli/container/podman.rs b/src/cli/container/podman.rs index 0e9d51f..06dfed8 100644 --- a/src/cli/container/podman.rs +++ b/src/cli/container/podman.rs @@ -125,7 +125,7 @@ pub struct PodmanArgs { /// Detached mode: run the container in the background /// /// Automatically set by Quadlet - #[arg(short, long, require_equals = true, default_missing_value = "true")] + #[arg(short, long, num_args = 0..=1, require_equals = true, default_missing_value = "true")] #[serde(skip_serializing)] detach: Option, diff --git a/src/cli/generate.rs b/src/cli/generate.rs index 4310fce..7729440 100644 --- a/src/cli/generate.rs +++ b/src/cli/generate.rs @@ -910,4 +910,24 @@ mod tests { fn verify_pod_parser_cli() { PodParser::command().debug_assert(); } + + #[test] + fn can_parse_all_detach_flag_forms() { + let forms = ["-d", "-d=true", "--detach", "--detach=false"]; + for flag in forms { + let _parsed = ContainerParser::parse_from([flag, "image"]); + } + } + + #[test] + /// `--detach true image` should be interpreted as an image named `true` with the command `image`. + fn detach_flag_with_space_separated_value_should_cause_misparse() { + let forms = [["-d", "false", "image"], ["--detach", "true", "image"]]; + for args @ [_detach_flag, image, command] in forms { + let parsed = ContainerParser::parse_from(&args); + let container = quadlet::Container::from(parsed.container); + assert_eq!(container.image, image); + assert_eq!(container.exec.as_deref(), Some(command)); + } + } }