summaryrefslogtreecommitdiff
path: root/completions/pkgutil
blob: febc2135741f9c31396d21240bb6c1bf9cf90b8c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# pkgutil completion                                        -*- shell-script -*-
# Copyright 2006 Yann Rouillard <yann@opencsw.org>

_pkgutil_url2catalog()
{
    local filename="$1"

    filename="${filename##*://}"
    filename="${filename//\//_}"
    filename="/var/opt/csw/pkgutil/catalog.${filename}_$(uname -p)_$(uname -r)"

    echo "$filename"
}

_pkgutil()
{
    local cur prev words cword
    _init_completion -n : || return

    local command catalog_files configuration_files
    declare -a configuration_files=("/opt/csw/etc/pkgutil.conf" "/etc/opt/csw/pkgutil.conf")
    declare -a catalog_files=()

    local i=$cword
    while [[ $((i--)) -gt 1 ]]; do
        if [[ "${words[$i]}" == -@(t|-temp) ]]; then
            local url="${words[$((i+1))]}"
            local catalog=$(_pkgutil_url2catalog "$url")
            catalog_files=("$catalog")
        elif [[ "${words[$i]}" == --config ]]; then
            configuration_files=( "$(dequote ${words[$((i+1))]})" )
        elif [[ "${words[$i]}" == -@([iurdacUS]|-install|-upgrade|-remove|-download|-available|-compare|-catalog|-stream) ]]; then
            command="${words[$i]}"
        fi
    done

    if [[ "$prev" == -@([WPR]|-workdir|-pkgdir|-rootpath) ]]; then
        _filedir -d
        return
    fi

    if [[ "$prev" == -@(o|-output|-config) ]]; then
        _filedir
        return
    fi

    if [[ "$prev" == -@(p|-param) ]]; then
        compopt -o nospace
        COMPREPLY=( $(compgen -W "mirror: pkgaddopts: pkgrmopts: wgetopts: use_gpg: use_md5: pkgliststyle: maxpkglist: noncsw: stop_on_hook_soft_error: exclude_pattern: gpg_homedir: root_path: deptree_filter_common: show_current: catalog_not_cached: catalog_update:" -- $cur) )
        return
    fi

    if [[ "$prev" == @(-T|--target) ]]; then
        # Work-around bash_completion issue where bash interprets a colon
        # as a separator, borrowed from maven completion code which borrowed
        # it from darcs completion code :)
        local colonprefixes=${cur%"${cur##*:}"}
        COMPREPLY=( $(compgen -W "sparc:5.9 sparc:5.10 sparc:5.11 i386:5.9 i386:5.10 i386:5.11" -- $cur) )
        local i=${#COMPREPLY[*]}
        while [ $((--i)) -ge 0 ]; do
            COMPREPLY[$i]=${COMPREPLY[$i]#"$colonprefixes"}
        done
        return
    fi

    if [[ -n "$command" ]] && [[ ! "$cur" == -* ]]; then

        local mirrors mirror_url
        mirrors=$(awk -F= ' $1 ~ /^ *mirror *$/ { print $2 }' "${configuration_files[@]}")
        mirrors=${mirrors:-http://mirror.opencsw.org/opencsw/testing}
        for mirror_url in $mirrors; do
            local catalog=$(_pkgutil_url2catalog "$mirror_url")
            catalog_files=( "${catalog_files[@]}" "$catalog" )
        done

        if [[ "$command" == -@([dius]|-download|-install|-upgrade|-stream) ]]; then
            local packages_list=$(awk ' $0 ~ /BEGIN PGP SIGNATURE/ { exit } $1 ~ /^Hash:/ || $1 ~ /^ *(-|#|$)/ { next } { print $1 }' "${catalog_files[@]}")
            COMPREPLY=( $(compgen -W "${packages_list}" -- $cur) )

        elif [[ "$command" == @(-r|--remove) ]]; then
                local packages_list=$(pkginfo | awk ' $2 ~ /^CSW/ { printf ("%s|",$2) }')
            packages_list=${packages_list%|}
            packages_list=$(nawk " \$3 ~ /^$packages_list\$/ { print \$1 }" "${catalog_files[@]}")
            COMPREPLY=( $(compgen -W "${packages_list}" -- $cur) )
        fi
        return
    fi

    local commands="-i --install -u --upgrade -r --remove -d --download -U --catalog -a --available --describe -c --compare -C --compare-diff -A --compare-avail -e --email -t --temp -x --exclude -W --workdir -P --pkgdir -R --rootpath --config -y --yes -f --force -n --nomod -N --nodeps -D --debug --trace -h --help -v --version -V --syscheck -l --list -L --listfile -F --findfile --deptree --extract -s --stream -o --output -T --target --single -p --param --parse --cleanup --catinfo"
    COMPREPLY=( $(compgen -W "${commands}" -- $cur) )

} &&
complete -F _pkgutil pkgutil

# ex: filetype=sh