Skip to content

Commit

Permalink
provide better error on invalid flag
Browse files Browse the repository at this point in the history
Add a extra `See 'podman command --help'` to the error output.
With this patch you now get:
```
$ podman run -h
Error: flag needs an argument: 'h' in -h
See 'podman run --help'
```

Fixes #13082
Fixes #13002

Signed-off-by: Paul Holzinger <[email protected]>
  • Loading branch information
Luap99 committed Feb 21, 2022
1 parent d224a0f commit 44d0378
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 1 deletion.
8 changes: 8 additions & 0 deletions cmd/podman/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ func parseCommands() *cobra.Command {
}
parent.AddCommand(c.Command)

c.Command.SetFlagErrorFunc(flagErrorFuncfunc)

// - templates need to be set here, as PersistentPreRunE() is
// not called when --help is used.
// - rootCmd uses cobra default template not ours
Expand All @@ -84,5 +86,11 @@ func parseCommands() *cobra.Command {
os.Exit(1)
}

rootCmd.SetFlagErrorFunc(flagErrorFuncfunc)
return rootCmd
}

func flagErrorFuncfunc(c *cobra.Command, e error) error {
e = fmt.Errorf("%w\nSee '%s --help'", e, c.CommandPath())
return e
}
3 changes: 2 additions & 1 deletion test/system/001-basic.bats
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,8 @@ function setup() {

# ...but no matter what, --remote is never allowed after subcommand
PODMAN="${podman_non_remote} ${podman_args[@]}" run_podman 125 version --remote
is "$output" "Error: unknown flag: --remote" "podman version --remote"
is "$output" "Error: unknown flag: --remote
See 'podman version --help'" "podman version --remote"
}

@test "podman-remote: defaults" {
Expand Down
14 changes: 14 additions & 0 deletions test/system/300-cli-parsing.bats
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,18 @@ load helpers
run_podman run --rm --label 'true="false"' $IMAGE true
}

@test "podman flag error" {
local name="podman"
if is_remote; then
name="podman-remote"
fi
run_podman 125 run -h
is "$output" "Error: flag needs an argument: 'h' in -h
See '$name run --help'" "expected error output"

run_podman 125 bad --invalid
is "$output" "Error: unknown flag: --invalid
See '$name --help'" "expected error output"
}

# vim: filetype=sh

0 comments on commit 44d0378

Please sign in to comment.