summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYann Rouillard <yann@opencsw.org>2012-10-29 23:58:14 +0100
committerGuillaume Rousse <guillomovitch@gmail.com>2012-10-30 00:01:36 +0100
commit6ddec67c2f923ce54f3935bc23822c9eaf350430 (patch)
treea8a9d0c046f4bd9471fc87a05ba5c1f5609c05dd
parent80356ca816cfee198bad59359d7a641449183fec (diff)
downloadbash-completion-6ddec67c2f923ce54f3935bc23822c9eaf350430.tar.gz
new completion: pkg-get
-rw-r--r--CHANGES2
-rw-r--r--completions/Makefile.am2
-rwxr-xr-xcompletions/pkg-get75
-rw-r--r--test/completion/pkg-get.exp1
-rw-r--r--test/lib/completions/pkg-get.exp18
5 files changed, 98 insertions, 0 deletions
diff --git a/CHANGES b/CHANGES
index 49b22a06..3c0e2db8 100644
--- a/CHANGES
+++ b/CHANGES
@@ -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