#!/bin/bash
#
# Compare against docker options, see what (if anything) podman is missing.
#

# Hardcoded list of options we don't want to show. Some of these are
# implemented in podman but hidden (so of course not in man pages);
# some are not implemented and never will be (swarm).
declare -a hidden=(
    "docker --config"                    # Hidden
    "docker --context"                   # Hidden
    "docker --debug"                     # Hidden
    "docker --host"                      # Hidden
    "docker -D"                          # Hidden
    "docker -H"                          # Hidden

    "docker .* --gpus"                   # Not likely to be implemented
    "docker .* --isolation"              # Only for Windows containers
    "docker .* --kernel-memory"          # CGroupsV1 only, present but hidden
    "docker .* --link"                   # Deprecated in docker
    "docker .* --runtime"                # Global option under podman
    "docker .* --storage-opt"            # Global option under podman

    "docker (container|image) ls"        # Hidden alias to list
    "docker context"                     # Hidden

    # Hidden
    "docker (container |)logs --details"
    "docker manifest (create|inspect|push) --insecure"
    "docker manifest inspect --verbose"
    "docker manifest push --purge"
    "docker run --dns-option"

    # None of these will ever be implemented
    "docker (node|plugin|service|stack|swarm)"
)
IFS='|' hidden_re="${hidden[*]}"

XREF_SCRIPT=hack/xref-helpmsgs-manpages
TMP_SCRIPT=${XREF_SCRIPT}-docker

cp $XREF_SCRIPT $TMP_SCRIPT

# docker --help differs from podman --help
DIFF="diff --git a/$TMP_SCRIPT b/hack/$TMP_SCRIPT
index de9ef8630..b9e4bd0ef 100755
--- a/$TMP_SCRIPT
+++ b/$TMP_SCRIPT
@@ -230,8 +230,8 @@ sub podman_help {
         #       ....
         #
         # Start by identifying the section we're in...
-        if (\$line =~ /^Available\\s+(Commands):/) {
-            \$section = lc \$1;
+        if (\$line =~ /^(Available|Management\\s+)?(Commands):/) {
+            \$section = lc \$2;
         }
         elsif (\$line =~ /^(Options):/) {
             \$section = lc \$1;
"

patch --quiet -p1 <<<"$DIFF"

# Sometimes this produces no output at all. Likely cause is that you
# have inconsistent .md files, solution is 'make docs'. If that doesn't
# work, remove the '2>&1 \' from the line below and rerun. I don't feel
# it's worth the time to improve the error handling here.
PODMAN=/usr/bin/docker $TMP_SCRIPT 2>&1 \
    | sed -ne 's/^.*podman \+\(.*\) --help. lists .\(.*\)., which is not.*/- [ ] docker \1 \2/p' \
    | sed -e 's/ \+/ /g' \
    | grep -vE "($hidden_re)\$"

rm -f $TMP_SCRIPT