diff options
author | Jenkins <jenkins@review.openstack.org> | 2012-05-23 14:52:05 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2012-05-23 14:52:05 +0000 |
commit | d15f216b2dced23e793a53aed3dde147fc134acc (patch) | |
tree | 12475e5735ec5e270738fb1c8f98c62f5902f27b /tools | |
parent | cb8eea487532720922a76ec246327ead4cb627ce (diff) | |
parent | c9495134690a1818fccfec0b8a5717dc31ea5633 (diff) | |
download | python-novaclient-d15f216b2dced23e793a53aed3dde147fc134acc.tar.gz |
Merge "make nova bash-complete faster and more accurate"
Diffstat (limited to 'tools')
-rw-r--r-- | tools/nova.bash_completion | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/tools/nova.bash_completion b/tools/nova.bash_completion index 90d16c0c..43390052 100644 --- a/tools/nova.bash_completion +++ b/tools/nova.bash_completion @@ -1,15 +1,27 @@ +_nova_opts="" # lazy init +_nova_flags="" # lazy init +_nova_opts_exp="" # lazy init _nova() { - local cur prev opts - COMPREPLY=() - cur="${COMP_WORDS[COMP_CWORD]}" - prev="${COMP_WORDS[COMP_CWORD-1]}" + local cur prev nbc cflags + COMPREPLY=() + cur="${COMP_WORDS[COMP_CWORD]}" + prev="${COMP_WORDS[COMP_CWORD-1]}" - opts="$(nova bash_completion)" + if [ "x$_nova_opts" == "x" ] ; then + nbc="`nova bash-completion`" + _nova_opts="`echo "$nbc" | sed -e "s/--[a-z0-9_-]*//g" -e "s/\s\s*/ /g"`" + _nova_flags="`echo " $nbc" | sed -e "s/ [^-][^-][a-z0-9_-]*//g" -e "s/\s\s*/ /g"`" + _nova_opts_exp="`echo "$_nova_opts" | sed -e "s/\s/|/g"`" + fi - COMPLETION_CACHE=~/.novaclient/*/*-cache - opts+=" "$(cat $COMPLETION_CACHE 2> /dev/null | tr '\n' ' ') - - COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) + if [[ " ${COMP_WORDS[@]} " =~ " "($_nova_opts_exp)" " && "$prev" != "help" ]] ; then + COMPLETION_CACHE=~/.novaclient/*/*-cache + cflags="$_nova_flags "$(cat $COMPLETION_CACHE 2> /dev/null | tr '\n' ' ') + COMPREPLY=($(compgen -W "${cflags}" -- ${cur})) + else + COMPREPLY=($(compgen -W "${_nova_opts}" -- ${cur})) + fi + return 0 } complete -F _nova nova |