Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[skip ci] Formalize our compare-against-docker mechanism #16430

Merged
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 73 additions & 0 deletions hack/xref-docker-options
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
#!/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