Merge pull request #3196 from albers/completion-daemon-options

bash completion for new TLS options
This commit is contained in:
Aanand Prasad 2016-03-24 15:11:55 +00:00
commit 2b063d332e
1 changed files with 47 additions and 28 deletions

View File

@ -18,11 +18,22 @@
__docker_compose_q() { __docker_compose_q() {
local file_args docker-compose 2>/dev/null $daemon_options "$@"
if [ ${#compose_files[@]} -ne 0 ] ; then }
file_args="${compose_files[@]/#/-f }"
fi # Transforms a multiline list of strings into a single line string
docker-compose 2>/dev/null $file_args ${compose_project:+-p $compose_project} "$@" # with the words separated by "|".
__docker_compose_to_alternatives() {
local parts=( $1 )
local IFS='|'
echo "${parts[*]}"
}
# Transforms a multiline list of options into an extglob pattern
# suitable for use in case statements.
__docker_compose_to_extglob() {
local extglob=$( __docker_compose_to_alternatives "$1" )
echo "@($extglob)"
} }
# suppress trailing whitespace # suppress trailing whitespace
@ -31,20 +42,6 @@ __docker_compose_nospace() {
type compopt &>/dev/null && compopt -o nospace type compopt &>/dev/null && compopt -o nospace
} }
# For compatibility reasons, Compose and therefore its completion supports several
# stack compositon files as listed here, in descending priority.
# Support for these filenames might be dropped in some future version.
__docker_compose_compose_file() {
local file
for file in docker-compose.y{,a}ml ; do
[ -e $file ] && {
echo $file
return
}
done
echo docker-compose.yml
}
# Extracts all service names from the compose file. # Extracts all service names from the compose file.
___docker_compose_all_services_in_compose_file() { ___docker_compose_all_services_in_compose_file() {
__docker_compose_q config --services __docker_compose_q config --services
@ -131,18 +128,22 @@ _docker_compose_create() {
_docker_compose_docker_compose() { _docker_compose_docker_compose() {
case "$prev" in case "$prev" in
--tlscacert|--tlscert|--tlskey)
_filedir
return
;;
--file|-f) --file|-f)
_filedir "y?(a)ml" _filedir "y?(a)ml"
return return
;; ;;
--project-name|-p) $(__docker_compose_to_extglob "$daemon_options_with_args") )
return return
;; ;;
esac esac
case "$cur" in case "$cur" in
-*) -*)
COMPREPLY=( $( compgen -W "--file -f --help -h --project-name -p --verbose --version -v" -- "$cur" ) ) COMPREPLY=( $( compgen -W "$daemon_boolean_options $daemon_options_with_args --help -h --verbose --version -v" -- "$cur" ) )
;; ;;
*) *)
COMPREPLY=( $( compgen -W "${commands[*]}" -- "$cur" ) ) COMPREPLY=( $( compgen -W "${commands[*]}" -- "$cur" ) )
@ -452,6 +453,22 @@ _docker_compose() {
version version
) )
# options for the docker daemon that have to be passed to secondary calls to
# docker-compose executed by this script
local daemon_boolean_options="
--skip-hostname-check
--tls
--tlsverify
"
local daemon_options_with_args="
--file -f
--host -H
--project-name -p
--tlscacert
--tlscert
--tlskey
"
COMPREPLY=() COMPREPLY=()
local cur prev words cword local cur prev words cword
_get_comp_words_by_ref -n : cur prev words cword _get_comp_words_by_ref -n : cur prev words cword
@ -459,17 +476,19 @@ _docker_compose() {
# search subcommand and invoke its handler. # search subcommand and invoke its handler.
# special treatment of some top-level options # special treatment of some top-level options
local command='docker_compose' local command='docker_compose'
local daemon_options=()
local counter=1 local counter=1
local compose_files=() compose_project
while [ $counter -lt $cword ]; do while [ $counter -lt $cword ]; do
case "${words[$counter]}" in case "${words[$counter]}" in
--file|-f) $(__docker_compose_to_extglob "$daemon_boolean_options") )
(( counter++ )) local opt=${words[counter]}
compose_files+=(${words[$counter]}) daemon_options+=($opt)
;; ;;
--project-name|-p) $(__docker_compose_to_extglob "$daemon_options_with_args") )
(( counter++ )) local opt=${words[counter]}
compose_project="${words[$counter]}" local arg=${words[++counter]}
daemon_options+=($opt $arg)
;; ;;
-*) -*)
;; ;;