PageRenderTime 117ms CodeModel.GetById 77ms app.highlight 36ms RepoModel.GetById 1ms app.codeStats 0ms

/bash_completion_lib/complete -o filenames/rpm

http://github.com/brinkman83/bashrc
#! | 258 lines | 246 code | 12 blank | 0 comment | 0 complexity | 9874ef6500d1067b655a67e4df191c17 MD5 | raw file
  1# rpm(8) completion
  2
  3
  4comp_include _filedir _get_cword _rpm_installed_packages
  5
  6
  7_rpm_groups()
  8{
  9    local IFS=$'\t'
 10    # remove trailing backslash, or grep will complain
 11    cur=${cur%"\\"}
 12    COMPREPLY=( $( rpm -qa $nodig $nosig --queryformat '%{group}\n' | \
 13               grep "^$cur" ) )
 14    # backslash escape spaces and translate newlines to tabs
 15    COMPREPLY=( $( echo ${COMPREPLY[@]} | sed 's/ /\\ /g' | tr '\n' '\t' ) )
 16}
 17
 18_rpm()
 19{
 20    local cur prev ver nodig nosig
 21
 22    COMPREPLY=()
 23    cur=`_get_cword`
 24    prev=${COMP_WORDS[COMP_CWORD-1]}
 25    nodig=""
 26    nosig=""
 27    ver=$(rpm --version); ver=${ver##* }
 28  
 29    if [[ "$ver" > "4.0.4" ]]; then
 30        nodig="--nodigest"
 31    fi
 32    if [[ "$ver" > "4.0.99" ]]; then
 33        nosig="--nosignature"
 34    fi
 35
 36    if [ $COMP_CWORD -eq 1 ]; then
 37        # first parameter on line
 38        case "$cur" in
 39        -b*)
 40            COMPREPLY=( $( compgen -W '-ba -bb -bc -bi -bl -bp -bs'\
 41                       -- $cur ) )
 42            ;;
 43        -t*)
 44            COMPREPLY=( $( compgen -W '-ta -tb -tc -ti -tl -tp -ts'\
 45                       -- $cur ) )
 46            ;;
 47        --*)
 48            COMPREPLY=( $( compgen -W '--help --version --initdb \
 49            --checksig --recompile --rebuild --resign --addsign \
 50            --rebuilddb --showrc --setperms --setugids --tarbuild \
 51            --eval --install --upgrade --query --freshen --erase \
 52            --verify --querytags --rmsource --rmspec --clean \
 53            --import' -- $cur ) )
 54            ;;
 55        *)
 56            COMPREPLY=( $( compgen -W '-b -e -F -i -q -t -U -V' \
 57                       -- $cur ) )
 58            ;;
 59        esac
 60
 61    return 0
 62    fi
 63
 64    case "$prev" in
 65    --@(@(db|exclude)path|prefix|relocate|root))
 66        _filedir -d
 67        return 0
 68        ;;
 69    --eval)
 70        # get a list of macros
 71        COMPREPLY=( $( sed -ne 's|^\(%'${cur#\%}'[^ '$'\t'']*\).*$|\1|p' \
 72                   /usr/lib/rpm/macros ) )
 73        return 0
 74        ;;
 75    --pipe)
 76        COMPREPLY=( $( compgen -c -- $cur ) )
 77        return 0
 78        ;;
 79    --rcfile)
 80        _filedir
 81        return 0
 82        ;;
 83    --specfile)
 84        # complete on .spec files
 85        _filedir spec
 86        return 0
 87        ;;
 88    --whatprovides)
 89        if [[ "$cur" == */* ]]; then
 90            _filedir
 91        else
 92        # complete on capabilities
 93            COMPREPLY=( $( rpm -qa $nodig $nosig --queryformat \
 94                    '%{providename}\n' | grep "^$cur" ) )
 95        fi
 96        return 0
 97        ;;
 98    --whatrequires)
 99        # complete on capabilities
100        COMPREPLY=( $( rpm -qa $nodig $nosig --queryformat \
101                '%{requirename}\n' | grep "^$cur" ) )
102        return 0
103        ;;
104    esac
105
106    case "${COMP_WORDS[1]}" in
107    -@([iFU]*|-install|-freshen|-upgrade))
108        if [[ "$cur" == -* ]]; then
109            COMPREPLY=( $( compgen -W '--percent --force --test \
110            --replacepkgs --replacefiles --root --excludedocs \
111            --includedocs --noscripts --rcfile --ignorearch \
112            --dbpath --prefix --ignoreos --nodeps --allfiles \
113            --ftpproxy --ftpport --justdb --httpproxy --httpport \
114            --noorder --relocate --badreloc --notriggers \
115            --excludepath --ignoresize --oldpackage --define \
116            --eval --pipe --queryformat --repackage --nosuggests \
117            --nodigest --nosignature' -- $cur ) )
118        else
119            _filedir 'rpm'
120        fi
121        ;;
122    -@(e|-erase))
123        if [[ "$cur" == -* ]]; then
124            COMPREPLY=( $( compgen -W '--allmatches --noscripts \
125            --notriggers --nodeps --test --repackage' -- $cur ) )
126        else
127            _rpm_installed_packages
128        fi
129        ;;
130    -@(q*|-query))
131        # check whether we're doing file completion
132        if [ "${COMP_LINE#* -*([^ -])f}" != "$COMP_LINE" ]; then
133            if [[ "$cur" == -* ]]; then
134            COMPREPLY=( $( compgen -W '--scripts --root \
135                --rcfile --requires --ftpport --ftpproxy \
136                --httpproxy --httpport --provides --triggers \
137                --dump --changelog --dbpath \
138                --last --filesbypkg \
139                --info --list --state \
140                --docfiles --configfiles --queryformat \
141                --conflicts --obsoletes \
142                --nodigest --nosignature \
143                --triggerscripts' -- $cur ) )
144            else
145            _filedir
146            fi
147        elif [ "${COMP_LINE#* -*([^ -])g}" != "$COMP_LINE" ]; then
148            _rpm_groups
149        elif [ "${COMP_LINE#* -*([^ -])p}" != "$COMP_LINE" ]; then
150            # uninstalled package completion
151            if [[ "$cur" == -* ]]; then
152                COMPREPLY=( $( compgen -W '--scripts --root \
153                --rcfile --whatprovides --whatrequires \
154                --requires --triggeredby --ftpport --ftpproxy \
155                --httpproxy --httpport --provides --triggers \
156                --dump --changelog --dbpath --filesbypkg \
157                --define --eval --pipe --showrc --info --list \
158                --state --docfiles --configfiles --queryformat\
159                --conflicts --obsoletes --nodigest \
160                --nosignature' -- $cur ) )
161            else
162                _filedir 'rpm'
163            fi
164        else
165            # installed package completion
166            if [[ "$cur" == -* ]]; then
167                COMPREPLY=( $( compgen -W '--scripts --root \
168                --rcfile --whatprovides --whatrequires \
169                --requires --triggeredby --ftpport --ftpproxy \
170                --httpproxy --httpport --provides --triggers \
171                --dump --changelog --dbpath --specfile \
172                --querybynumber --last --filesbypkg --define \
173                --eval --pipe --showrc --info --list --state \
174                --docfiles --configfiles --queryformat \
175                --conflicts --obsoletes --pkgid --hdrid \
176                --fileid --tid --nodigest --nosignature \
177                --triggerscripts' -- $cur ) )
178            elif [ "${COMP_LINE#* -*([^ -])a}" == "$COMP_LINE" ]; then
179                _rpm_installed_packages
180            fi
181        fi
182        ;;
183    -@(K*|-checksig))
184        if [[ "$cur" == -* ]]; then
185            COMPREPLY=( $( compgen -W '--nopgp --nogpg --nomd5 \
186                    --nodigest --nosignature' -- $cur ) )
187        else
188            _filedir 'rpm'
189        fi
190        ;;
191    -@([Vy]*|-verify))
192        if [[ "$cur" == -* ]]; then
193            COMPREPLY=( $( compgen -W '--root --rcfile --dbpath \
194            --nodeps --nogroup --nolinkto --nomode --nomtime \
195            --nordev --nouser --nofiles --noscripts --nomd5 \
196            --querytags --specfile --whatrequires --whatprovides \
197            --nodigest --nosignature' -- $cur ) )
198        # check whether we're doing file completion
199        elif [ "${COMP_LINE#* -*([^ -])f}" != "$COMP_LINE" ]; then
200            _filedir
201        elif [ "${COMP_LINE#* -*([^ -])g}" != "$COMP_LINE" ]; then
202            _rpm_groups
203        elif [ "${COMP_LINE#* -*([^ -])p}" != "$COMP_LINE" ]; then
204            _filedir 'rpm'
205        else
206            _rpm_installed_packages
207        fi
208        ;;
209    -[bt]*)
210        if [[ "$cur" == -* ]]; then
211            COMPREPLY=( $( compgen -W '--short-circuit --timecheck \
212            --clean --rmsource --rmspec --test --sign --buildroot \
213            --target -- buildarch --buildos --nobuild --nodeps \
214            --nodirtokens' -- $cur ) )
215        elif [[ ${COMP_WORDS[1]} == -b* ]]; then
216            _filedir 'spec'
217        else
218            _filedir '@(tgz|tar.@(gz|bz2))'
219        fi
220        ;;
221    --re@(build|compile))
222        if [[ "$cur" == -* ]]; then
223            COMPREPLY=( $( compgen -W '--nodeps --rmsource \
224              --rmspec --sign --nodirtokens --target' -- $cur ) )
225        else
226            _filedir '?(no)src.rpm'
227        fi
228        ;;
229    --tarbuild)
230        _filedir '@(tgz|tar.@(gz|bz2))'
231        ;;
232    --@(re|add)sign)
233        _filedir 'rpm'
234        ;;
235    --set@(perms|gids))
236        _rpm_installed_packages
237        ;;
238    --@(clean|rms@(ource|pec)))
239        if [[ "$cur" == -* ]]; then
240            COMPREPLY=( $( compgen -W '--clean --rmsource \
241                    --rmspec' -- $cur ) )
242        else
243            _filedir 'spec'
244        fi
245        ;;
246    --@(import|dbpath|root))
247        if [[ "$cur" == -* ]]; then
248            COMPREPLY=( $( compgen -W '--import --dbpath --root' \
249                    -- $cur ) )
250        else
251            _filedir
252        fi
253        ;;
254    esac
255
256    return 0
257}
258_rpm