From 6dc36483f434c04b274b59f5c5a4bdbca2443390 Mon Sep 17 00:00:00 2001 From: Dan Walsh Date: Wed, 30 Nov 2016 11:05:13 -0500 Subject: [PATCH] Complete bash completions for skopeo Current code only handled commands not the options. --- Makefile | 2 +- completions/bash/skopeo | 148 ++++++++++++++++++++++++++++++++++++ hack/make/bash_autocomplete | 14 ---- 3 files changed, 149 insertions(+), 15 deletions(-) create mode 100644 completions/bash/skopeo delete mode 100644 hack/make/bash_autocomplete diff --git a/Makefile b/Makefile index fb821898..ed4b9516 100644 --- a/Makefile +++ b/Makefile @@ -81,7 +81,7 @@ install-docs: docs/skopeo.1 install -D -m 644 docs/skopeo.1 ${MANINSTALLDIR}/man1/skopeo.1 install-completions: - install -m 644 -D hack/make/bash_autocomplete ${BASHINSTALLDIR}/skopeo + install -m 644 -D completions/bash/skopeo ${BASHINSTALLDIR}/skopeo shell: build-container $(DOCKER_RUN_DOCKER) bash diff --git a/completions/bash/skopeo b/completions/bash/skopeo new file mode 100644 index 00000000..fe3b81d0 --- /dev/null +++ b/completions/bash/skopeo @@ -0,0 +1,148 @@ +#! /bin/bash + +: ${PROG:=$(basename ${BASH_SOURCE})} + +_complete_() { + local options_with_args=$1 + local boolean_options="$2 -h --help" + + case "$prev" in + $options_with_args) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "$boolean_options $options_with_args" -- "$cur" ) ) + ;; + esac +} + +_skopeo_copy() { + local options_with_args=" + --sign-by + --src-creds --screds + --dest-creds --dcreds + " + local boolean_options=" + --remove-signatures + " + _complete_ "$options_with_args" "$boolean_options" +} + +_skopeo_inspect() { + local options_with_args=" + --creds + " + local boolean_options=" + --raw + " + _complete_ "$options_with_args" "$boolean_options" +} + +_skopeo_standalone_sign() { + local options_with_args=" + -o --output + " + local boolean_options=" + " + _complete_ "$options_with_args" "$boolean_options" +} + +_skopeo_standalone_verify() { + local options_with_args=" + " + local boolean_options=" + " + _complete_ "$options_with_args" "$boolean_options" +} + +_skopeo_manifest_digest() { + local options_with_args=" + " + local boolean_options=" + " + _complete_ "$options_with_args" "$boolean_options" +} + +_skopeo_delete() { + local options_with_args=" + --creds + " + local boolean_options=" + " + _complete_ "$options_with_args" "$boolean_options" +} + +_skopeo_layers() { + local options_with_args=" + " + local boolean_options=" + " + _complete_ "$options_with_args" "$boolean_options" +} + +_skopeo_skopeo() { + local options_with_args=" + --cert-path + --policy + --registries.d + " + local boolean_options=" + --debug + --tls-verify + --version -v + --help -h + " + commands=$( ${COMP_WORDS[@]:0:$COMP_CWORD} --generate-bash-completion ) + + case "$prev" in + $main_options_with_args_glob ) + return + ;; + esac + + case "$cur" in + -*) + COMPREPLY=( $( compgen -W "$boolean_options $options_with_args" -- "$cur" ) ) + ;; + *) + COMPREPLY=( $( compgen -W "${commands[*]} help" -- "$cur" ) ) + ;; + esac +} + +_cli_bash_autocomplete() { + local cur opts base + + COMPREPLY=() + cur="${COMP_WORDS[COMP_CWORD]}" + COMPREPLY=() + local cur prev words cword + + _get_comp_words_by_ref -n : cur prev words cword + + local command=${PROG} cpos=0 + local counter=1 + counter=1 + while [ $counter -lt $cword ]; do + case "!${words[$counter]}" in + *) + command=$(echo "${words[$counter]}" | sed 's/-/_/g') + cpos=$counter + (( cpos++ )) + break + ;; + esac + (( counter++ )) + done + + local completions_func=_skopeo_${command} + declare -F $completions_func >/dev/null && $completions_func + + eval "$previous_extglob_setting" + return 0 +} + + complete -F _cli_bash_autocomplete $PROG diff --git a/hack/make/bash_autocomplete b/hack/make/bash_autocomplete deleted file mode 100644 index b2b871d0..00000000 --- a/hack/make/bash_autocomplete +++ /dev/null @@ -1,14 +0,0 @@ -#! /bin/bash - -: ${PROG:=$(basename ${BASH_SOURCE})} - -_cli_bash_autocomplete() { - local cur opts base - COMPREPLY=() - cur="${COMP_WORDS[COMP_CWORD]}" - opts=$( ${COMP_WORDS[@]:0:$COMP_CWORD} --generate-bash-completion ) - COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) - return 0 - } - - complete -F _cli_bash_autocomplete $PROG