mirror of
https://github.com/containers/podman.git
synced 2025-06-20 09:03:43 +08:00
Docs: consistency between man / --help
New functionality in hack/man-page-checker: start cross- referencing the man page 'Synopsis' line against the output of 'podman foo --help'. This is part 1, flag/option consistency. Part 2 (arg consistency) is too big and will have to wait for later. flag/option consistency means: if 'podman foo --help' includes the string '[flags]' in the Usage message, make sure the man page includes '[*options*]' in its Synopsis line, and vice-versa. This found several inconsistencies, which I've fixed. While doing this I realized that Cobra automatically includes a 'Flags:' subsection in its --help output for all subcommands that have defined flags. This is great - it lets us cross-check against the usage synopsis, and make sure that '[flags]' is present or absent as needed, without fear of human screwups. If a flag-less subcommand ever gets extended with flags, but the developer forgets to add '[flags]' and remove DisableFlagsInUseLine, we now have a test that will catch that. (This, too, caught two instances which I fixed). I don't actually know if the new man-page-checker functionality will work in CI: I vaguely recall that it might run before 'make podman' does; and also vaguely recall that some steps were taken to remedy that. Signed-off-by: Ed Santiago <santiago@redhat.com>
This commit is contained in:
@ -34,13 +34,16 @@ function check_help() {
|
||||
|
||||
dprint "$command_string --help"
|
||||
run_podman "$@" $cmd --help
|
||||
local full_help="$output"
|
||||
|
||||
# The line immediately after 'Usage:' gives us a 1-line synopsis
|
||||
usage=$(echo "$output" | grep -A1 '^Usage:' | tail -1)
|
||||
usage=$(echo "$full_help" | grep -A1 '^Usage:' | tail -1)
|
||||
[ -n "$usage" ] || die "podman $cmd: no Usage message found"
|
||||
|
||||
# e.g. 'podman ps' should not show 'podman container ps' in usage
|
||||
is "$usage" " $command_string .*" "Usage string matches command"
|
||||
# Trailing space in usage handles 'podman system renumber' which
|
||||
# has no ' [flags]'
|
||||
is "$usage " " $command_string .*" "Usage string matches command"
|
||||
|
||||
# If usage ends in '[command]', recurse into subcommands
|
||||
if expr "$usage" : '.*\[command\]$' >/dev/null; then
|
||||
@ -59,6 +62,17 @@ function check_help() {
|
||||
die "'flags' must precede arguments in usage: $usage"
|
||||
fi
|
||||
|
||||
# Cross-check: if usage includes '[flags]', there must be a
|
||||
# longer 'Flags:' section in the full --help output; vice-versa,
|
||||
# if 'Flags:' is in full output, usage line must have '[flags]'.
|
||||
if expr "$usage" : '.*\[flag' >/dev/null; then
|
||||
if ! expr "$full_help" : ".*Flags:" >/dev/null; then
|
||||
die "$command_string: Usage includes '[flags]' but has no 'Flags:' subsection"
|
||||
fi
|
||||
elif expr "$full_help" : ".*Flags:" >/dev/null; then
|
||||
die "$command_string: --help has 'Flags:' section but no '[flags]' in synopsis"
|
||||
fi
|
||||
|
||||
# If usage lists no arguments (strings in ALL CAPS), confirm
|
||||
# by running with 'invalid-arg' and expecting failure.
|
||||
if ! expr "$usage" : '.*[A-Z]' >/dev/null; then
|
||||
|
Reference in New Issue
Block a user