summaryrefslogtreecommitdiff
path: root/completions/_yum
blob: 9860c540a8e4fc30c6237448f22b52586f68b4ae (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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# yum(8) completion                                        -*- shell-script -*-

# Use of this file is deprecated.  Upstream completion is available in
# yum > 3.2.25, use that instead.

_yum_list()
{
    if [[ "$1" == all ]] ; then
        # Try to strip in between headings like "Available Packages"
        # This will obviously only work for English :P
        COMPREPLY=( $( yum -d 0 -C list $1 "$cur*" 2>/dev/null | \
            sed -ne '/^Available /d' -e '/^Installed /d' -e '/^Updated /d' \
            -e 's/[[:space:]].*//p' ) )
    else
        # Drop first line (e.g. "Updated Packages")
        COMPREPLY=( $( yum -d 0 -C list $1 "$cur*" 2>/dev/null | \
            sed -ne 1d -e 's/[[:space:]].*//p' ) )
    fi
}

_yum_repolist()
{
    # -d 0 causes repolist to output nothing as of yum 3.2.22:
    # http://yum.baseurl.org/ticket/83
    # Drop first ("repo id      repo name") and last ("repolist: ...") rows
    yum --noplugins -C repolist $1 2>/dev/null | \
        sed -ne '/^repo\s\s*id/d' -e '/^repolist:/d' -e 's/[[:space:]].*//p'
}

_yum_plugins()
{
    command ls /usr/lib/yum-plugins/*.py{,c,o} 2>/dev/null \
        | sed -ne 's|.*/\([^./]*\)\.py[co]\{0,1\}$|\1|p' | sort -u
}

_yum()
{
    local cur prev words cword split
    _init_completion -s || return

    local special i
    for (( i=0; i < ${#words[@]}-1; i++ )); do
        if [[ ${words[i]} == @(install|update|upgrade|remove|erase|deplist|info) ]]; then
            special=${words[i]}
        fi
    done

    if [[ -n $special ]]; then
        # TODO: install|update|upgrade should not match *src.rpm
        if [[ "$cur" == @(*/|[.~])* && \
            "$special" == @(deplist|install|update|upgrade) ]]; then
            _filedir rpm
            return 0
        fi
        case $special in
            install)
                _yum_list available
                return 0
                ;;
            deplist|info)
                _yum_list all
                return 0
                ;;
            upgrade|update)
                _yum_list updates
                return 0
                ;;
            remove|erase)
                # _rpm_installed_packages is not arch-qualified
                _yum_list installed
                return 0
                ;;
        esac
    fi

    case $prev in
        list)
            COMPREPLY=( $( compgen -W 'all available updates \
                                installed extras obsoletes recent' -- $cur ) )
            ;;
        clean)
            COMPREPLY=( $( compgen -W 'packages headers metadata \
                                cache dbcache all' -- $cur ) )
            ;;
        repolist)
            COMPREPLY=( $( compgen -W 'all enabled disabled' -- $cur ) )
            ;;
        localinstall|localupdate)
            # TODO: should not match *src.rpm
            _filedir rpm
            ;;
        -d|-e)
            COMPREPLY=( $( compgen -W '{0..10}' -- $cur ) )
            ;;
        -c)
            _filedir
            ;;
        --installroot)
            _filedir -d
            ;;
        --enablerepo)
            COMPREPLY=( $( compgen -W '$( _yum_repolist disabled )' -- $cur ) )
            ;;
        --disablerepo)
            COMPREPLY=( $( compgen -W '$( _yum_repolist enabled )' -- $cur ) )
            ;;
        --disableexcludes)
            COMPREPLY=( $( compgen -W '$( _yum_repolist all ) all main' \
                -- $cur ) )
            ;;
        --enableplugin|--disableplugin)
            COMPREPLY=( $( compgen -W '$( _yum_plugins )' -- $cur ))
            ;;
        --color)
            COMPREPLY=( $( compgen -W 'always auto never' -- $cur ))
            ;;
        -R|-x|--exclude)
            # argument required but no completions available
            return 0
            ;;
        -h|--help|--version)
            # no other options useful with these
            return 0
            ;;
        *)
            COMPREPLY=( $( compgen -W 'install update check-update upgrade \
                remove erase list info provides whatprovides clean makecache \
                groupinstall groupupdate grouplist groupremove groupinfo \
                search shell resolvedep localinstall localupdate deplist \
                repolist help' -- $cur ) )
            ;;
    esac

    $split && return 0

    if [[ "$cur" == -* ]]; then
        COMPREPLY=( $( compgen -W '$( _parse_help "$1" )' -- "$cur" ) )
        [[ $COMPREPLY == *= ]] && compopt -o nospace
        return 0
    fi
} &&
complete -F _yum yum

# ex: ts=4 sw=4 et filetype=sh