summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-05-23 14:52:05 +0000
committerGerrit Code Review <review@openstack.org>2012-05-23 14:52:05 +0000
commitd15f216b2dced23e793a53aed3dde147fc134acc (patch)
tree12475e5735ec5e270738fb1c8f98c62f5902f27b /tools
parentcb8eea487532720922a76ec246327ead4cb627ce (diff)
parentc9495134690a1818fccfec0b8a5717dc31ea5633 (diff)
downloadpython-novaclient-d15f216b2dced23e793a53aed3dde147fc134acc.tar.gz
Merge "make nova bash-complete faster and more accurate"
Diffstat (limited to 'tools')
-rw-r--r--tools/nova.bash_completion30
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