new completion: pkg-get

This commit is contained in:
Yann Rouillard 2012-10-29 23:58:14 +01:00 committed by Guillaume Rousse
parent 80356ca816
commit 6ddec67c2f
5 changed files with 98 additions and 0 deletions

View File

@ -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)

View File

@ -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 \

75
completions/pkg-get Executable file
View File

@ -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

View File

@ -0,0 +1 @@
assert_source_completions pkg-get

View File

@ -0,0 +1,18 @@
proc setup {} {
save_env
}
proc teardown {} {
assert_env_unmodified
}
setup
assert_complete_any "pkg-get "
sync_after_int
teardown