#!/usr/bin/env bash # # Compare commands listed by 'podman help' against those in 'man podman'. # Recurse into subcommands as well. # # Because we read metadoc files in the `docs` directory, this script # must run from the top level of a git checkout. FIXME: if necessary, # it could instead run 'man podman-XX'; my thinking is that this # script should run early in CI. # # override with, e.g., PODMAN=./bin/podman-remote PODMAN=${PODMAN:-./bin/podman} function die() { echo "FATAL: $*" >&2 exit 1 } # Run 'podman help' (possibly against a subcommand, e.g. 'podman help image') # and return a list of each first word under 'Available Commands', that is, # the command name but not its description. function podman_commands() { $PODMAN help "$@" |\ awk '/^Available Commands:/{ok=1;next}/^Options:/{ok=0}ok { print $1 }' |\ grep . # Special case: podman-completion is a hidden command # it does not show in podman help so add it here if [[ -z "$@" ]]; then echo "completion" fi } # Read a list of subcommands from a command's metadoc function podman_man() { if [ "$@" = "podman" ]; then # podman itself. # This md file has a table of the form: # | [podman-cmd(1)\[(podman-cmd.1.md) | Description ... | # For all such, print the 'cmd' portion (the one in brackets). sed -ne 's/^|\s\+\[podman-\([a-z]\+\)(1.*/\1/p' /tmp/${basename}_help.txt podman_man $basename | sort > /tmp/${basename}_man.txt diff -u /tmp/${basename}_help.txt /tmp/${basename}_man.txt || rc=1 # Now look for subcommands, e.g. container, image for cmd in $(< /tmp/${basename}_help.txt); do usage=$($PODMAN "$@" $cmd --help | grep -A1 '^Usage:' | tail -1) # if string ends in '[command]', recurse into its subcommands if expr "$usage" : '.*\[command\]$' >/dev/null; then compare_help_and_man "$@" $cmd fi done rm -f /tmp/${basename}_{help,man}.txt } compare_help_and_man if [ $rc -ne 0 ]; then cat <