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)); + } + } }