diff options
author | Yann Rouillard <yann@opencsw.org> | 2012-10-29 23:58:14 +0100 |
---|---|---|
committer | Guillaume Rousse <guillomovitch@gmail.com> | 2012-10-30 00:01:36 +0100 |
commit | 6ddec67c2f923ce54f3935bc23822c9eaf350430 (patch) | |
tree | a8a9d0c046f4bd9471fc87a05ba5c1f5609c05dd | |
parent | 80356ca816cfee198bad59359d7a641449183fec (diff) | |
download | bash-completion-6ddec67c2f923ce54f3935bc23822c9eaf350430.tar.gz |
new completion: pkg-get
-rw-r--r-- | CHANGES | 2 | ||||
-rw-r--r-- | completions/Makefile.am | 2 | ||||
-rwxr-xr-x | completions/pkg-get | 75 | ||||
-rw-r--r-- | test/completion/pkg-get.exp | 1 | ||||
-rw-r--r-- | test/lib/completions/pkg-get.exp | 18 |
5 files changed, 98 insertions, 0 deletions
@@ -1,6 +1,8 @@ [ Guillaume Rousse ] * gphoto2: new completion * nmcli: new completion + * svcadm: new completion, contributed by Yann Rouillard <yann@opencsw.org> + * pkg-get: new completion, contributed by Yann Rouillard <yann@opencsw.org> bash-completion (2.0) diff --git a/completions/Makefile.am b/completions/Makefile.am index db23a3ae..d54ea0aa 100644 --- a/completions/Makefile.am +++ b/completions/Makefile.am @@ -234,6 +234,7 @@ bashcomp_DATA = a2x \ pine \ ping \ pkg-config \ + pkg-get \ pkg_delete \ pkgtool \ plague-client \ @@ -303,6 +304,7 @@ bashcomp_DATA = a2x \ strace \ su \ sudo \ + svcadm \ svk \ sync_members \ sysbench \ diff --git a/completions/pkg-get b/completions/pkg-get new file mode 100755 index 00000000..bf66fcc8 --- /dev/null +++ b/completions/pkg-get @@ -0,0 +1,75 @@ +# pkg-get.completion completion -*- shell-script -*- +# +# Copyright 2006 Yann Rouillard <yann@opencsw.org> + +_have pkg-get && +_pkg-get_get_catalog_file() +{ + local url="$1" + local catalog_file i conffile + + for file in /etc/opt/csw/pkg-get.conf /opt/csw/etc/pkg-get.conf /etc/pkg-get.conf; do + if [[ -f $file ]]; then + conffile="$file" + break + fi + done + conffile="${conffile:-/opt/csw/etc/pkg-get.conf}" + + if [[ -z "$url" ]]; then + url=$(awk -F= ' $1=="url" { print $2 }' $conffile) + fi + + catalog_file="${url##*//}" + catalog_file="${catalog_file%%/*}" + catalog_file="/var/pkg-get/catalog-$catalog_file" + + echo "$catalog_file" +} && +_pkg-get() +{ + local cur prev file catalog_file url command + COMPREPLY=() + cur="${COMP_WORDS[COMP_CWORD]}" + prev="${COMP_WORDS[COMP_CWORD-1]}" + + if [[ "${prev}" = "-s" ]]; then + return 1 + fi + + i=${#COMP_WORDS[*]} + while [[ $i -gt 0 ]]; do + i=$((i-1)) + if [[ "${COMP_WORDS[$i]}" = "-s" ]]; then + url="${COMP_WORDS[$((i+1))]}" + fi + if [[ "${COMP_WORDS[$i]}" == @(available|-a|describe|-D|download|-d|install|-i|list|updatecatalog|-U|upgrade|-u) ]]; then + command="${COMP_WORDS[$i]}" + fi + done + + if [[ -n "$command" ]]; then + if [[ "$command" == @(describe|-D|download|-d|install|-i) ]]; then + catalog_file=$(_pkg-get_get_catalog_file "$url") + if [[ -f $catalog_file ]]; then + local packages_list=$(awk ' $0 ~ /BEGIN PGP SIGNATURE/ { exit } $1 ~ /^Hash:/ || $1 ~ /^ *(-|#|$)/ { next } { print $1 }' $catalog_file) + COMPREPLY=( $(compgen -W "${packages_list}" -- ${cur}) ) + fi + fi + return 0 + fi + + if [[ ${cur} == -* ]] ; then + local opts="-c -d -D -f -i -l -s -S -u -U -v" + COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) + return 0 + else + local commands="available describe download install list \ + updatecatalog upgrade" + COMPREPLY=( $(compgen -W "${commands}" -- ${cur}) ) + return 0 + fi +} && +complete -F _pkg-get pkg-get + +# ex: ts=4 sw=4 et filetype=sh diff --git a/test/completion/pkg-get.exp b/test/completion/pkg-get.exp new file mode 100644 index 00000000..4499142f --- /dev/null +++ b/test/completion/pkg-get.exp @@ -0,0 +1 @@ +assert_source_completions pkg-get diff --git a/test/lib/completions/pkg-get.exp b/test/lib/completions/pkg-get.exp new file mode 100644 index 00000000..38b2b97f --- /dev/null +++ b/test/lib/completions/pkg-get.exp @@ -0,0 +1,18 @@ +proc setup {} { + save_env +} + + +proc teardown {} { + assert_env_unmodified +} + + +setup + + +assert_complete_any "pkg-get " +sync_after_int + + +teardown |