From 8281f5ad2e97f1d5c133672e492baf934e4ec9db Mon Sep 17 00:00:00 2001 From: Marcin Krol Date: Mon, 3 Aug 2015 08:21:03 +0000 Subject: [PATCH] - from PLD --- bash-completion-poldek.sh | 66 ++++++++++++++++++++ bash-completion-rpm-cache.patch | 22 +++++++ bash-completion.spec | 106 ++++++++++++++++++++++++++++++++ builder.bash-completion | 50 +++++++++++++++ pear.patch | 16 +++++ 5 files changed, 260 insertions(+) create mode 100644 bash-completion-poldek.sh create mode 100644 bash-completion-rpm-cache.patch create mode 100644 bash-completion.spec create mode 100644 builder.bash-completion create mode 100644 pear.patch diff --git a/bash-completion-poldek.sh b/bash-completion-poldek.sh new file mode 100644 index 0000000..3682c47 --- /dev/null +++ b/bash-completion-poldek.sh @@ -0,0 +1,66 @@ +# poldek(1) completion +# +_poldek() +{ + local cur prev + cur=${COMP_WORDS[COMP_CWORD]} + + COMPREPLY=() + + case "${COMP_WORDS[1]}" in + -@(e|-erase)) + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W '--nodeps --nofollow --test' -- $cur ) ) + else + _xfunc rpm _rpm_installed_packages + fi + return 0 + ;; + esac + + prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -@(n|-sn)) + COMPREPLY=( $( poldek -l | awk "/^$cur/{print \$1}" ) ) + return 0 + ;; + esac + + case "$cur" in + --verify*=*,*) + local p=${cur#--verify=*,} + p=${p//\\} # those backslashes propagate!!! -- kill them + # somewhy bash escapes equal sign, so we must match the backslash too + COMPREPLY=( $( compgen -P "${p%,*}," -W 'deps conflicts file-conflicts file-orphans file-missing-deps' -- "${cur##*,}" ) ) + return 0 + ;; + --verify*) + # somewhy bash escapes equal sign, so we must match the backslash too + COMPREPLY=( $( compgen -P --verify= -W 'deps conflicts file-conflicts file-orphans file-missing-deps' -- "${cur#--verify*=}" ) ) + return 0 + ;; + --*) + COMPREPLY=( $( compgen -W ' + --mkidx --makeidx --mt --nocompress --nodesc --nodiff --notimestamp + --dn --dt --sn --prefix --source --st --clean --clean-pkg + --clean-whole --cleana --sl --stl --update --up --update-whole + --upa --caplookup --pset --downgrade --install --reinstall + --upgrade --install-dist --reinstall-dist --root --upgrade-dist + --dump --dumpn --fetch --follow --force --fresh --greedy --hold + --ignore --justdb --mercy --nodeps --nohold --noignore --nofollow + --parsable-tr-summary --pm-force --pm-nodeps --pmopt --promoteepoch + --uniq --test --erase --greedy --nodeps --nofollow --test --verify= + --priconf --split --split-out --ask --cachedir --cmd --conf --log + --noask --noconf --pmcmd --runas --shell --skip-installed --sudocmd + --upconf --help --usage --version + ' -- $cur ) ) + ;; + *) + COMPREPLY=( $( compgen -W '-F -N -O -P -Q -V -e -i -l -m -n -q -r -s -t -u -v' -- $cur ) ) + ;; + esac + + return 0 +} && +complete -F _poldek $nospace $filenames poldek diff --git a/bash-completion-rpm-cache.patch b/bash-completion-rpm-cache.patch new file mode 100644 index 0000000..9c9d401 --- /dev/null +++ b/bash-completion-rpm-cache.patch @@ -0,0 +1,22 @@ +Support rpm (jbj rpm 4.4.7+) hrmib exports for rpm -qa filter (via %_hrmib_path /var/cache/hrmib) + +Not accepted upstream. + +-- +Signed-off-by: Elan Ruusamäe + +--- bash-completion-2.0/completions/rpm.orig 2012-01-07 23:44:41.000000000 +0100 ++++ bash-completion-2.0/completions/rpm 2012-07-28 07:21:12.033708931 +0200 +@@ -4,6 +4,12 @@ + + _rpm_installed_packages() + { ++ # if rpm (4.4.7+) is configured to export it's rpmdb to /var/cache/hrmib (%_hrmib_path) ++ if [ -d /var/cache/hrmib -a -r /var/cache/hrmib ]; then ++ COMPREPLY=( $( LC_ALL=C command ls -1 /var/cache/hrmib | sed -ne '/^'$cur'/p') ) ++ return ++ fi ++ + if [[ -r /var/log/rpmpkgs && \ + /var/log/rpmpkgs -nt /var/lib/rpm/Packages ]]; then + # using RHL 7.2 or later - this is quicker than querying the DB diff --git a/bash-completion.spec b/bash-completion.spec new file mode 100644 index 0000000..13ff511 --- /dev/null +++ b/bash-completion.spec @@ -0,0 +1,106 @@ +# vim:ft=spec +# TODO +# - use mkinitrd and update for geninitrd +# - fix vim not to mark this file as bash +Summary: bash-completion offers programmable completion for bash +Summary(pl.UTF-8): Programowalne uzupełnianie nazw dla basha +Name: bash-completion +Version: 2.1 +Release: 4 +Epoch: 1 +License: GPL v2+ +Group: Applications/Shells +Source0: http://bash-completion.alioth.debian.org/files/%{name}-%{version}.tar.bz2 +# Source0-md5: 4e2a9f11a4042a38ee79ddcd048e8b9e +Source1: %{name}-poldek.sh +# https://bugs.launchpad.net/ubuntu/+source/mysql-dfsg-5.0/+bug/106975 +Source3: http://launchpadlibrarian.net/19164189/mysqldump +# Source3-md5: 09e4885be92e032400ed702f39925d85 +Source4: http://svn.php.net/viewvc/pear2/sandbox/PEAR_BashCompletion/trunk/pear?revision=285425&view=co?/pear +# Source4-md5: 8ce77e4459e2c45e2096da8d03c8f43d +Patch0: %{name}-rpm-cache.patch +Patch1: pear.patch +URL: http://bash-completion.alioth.debian.org/ +BuildRequires: sed >= 4.0 +Requires(triggerpostun): sed >= 4.0 +Requires: bash >= 4.1 +Requires: pld-release +Obsoletes: bash-completion-rpm-cache +Conflicts: rpm < 4.4.9-44 +BuildArch: noarch +BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n) + +%description +bash-completion is a collection of shell functions that take advantage +of the programmable completion feature of bash 4.1 and later. + +%description -l pl.UTF-8 +bash-completion jest kolekcją funkcji shella, które opierają się na +wbudowanych rozszerzeniach basha 4.1 lub późniejszego umożliwiającego +dopełnianie parametrów linii poleceń. + +%prep +%setup -q +cp -p '%{SOURCE4}' completions/pear +%patch0 -p1 +%patch1 -p1 + +# cleanup backups after patching +find '(' -name '*~' -o -name '*.orig' ')' -print0 | xargs -0 -r -l512 rm -f + +# update path +%{__sed} -i -e 's#${BASH_SOURCE\[0\]%/\*}#%{_datadir}/%{name}#' completions/perl + +%build +%configure +%{__make} + +%install +rm -rf $RPM_BUILD_ROOT +install -d $RPM_BUILD_ROOT%{_sysconfdir}/bash_completion.d + +%{__make} install -j1 \ + INSTALL="install -p" \ + profiledir=/etc/shrc.d \ + DESTDIR=$RPM_BUILD_ROOT + +cp -p %{SOURCE1} $RPM_BUILD_ROOT%{_datadir}/%{name}/completions/poldek +cp -p %{SOURCE3} $RPM_BUILD_ROOT%{_datadir}/%{name}/completions/mysqldump +cp -p completions/pear $RPM_BUILD_ROOT%{_datadir}/%{name}/completions + +# util-linux +%{__rm} $RPM_BUILD_ROOT%{_datadir}/%{name}/completions/{cal,chsh,dmesg,eject,hexdump,hwclock,ionice,look,newgrp,renice,rtcwake,su} +# No package matches '*/apache2ctl' +%{__rm} $RPM_BUILD_ROOT%{_datadir}/%{name}/completions/apache2ctl +# No PLD package or no such binary to complete on +%{__rm} $RPM_BUILD_ROOT%{_datadir}/%{name}/completions/{larch,lisp,monodevelop,[pg]4,cowsay,cowthink,cpan2dist} +%{__rm} $RPM_BUILD_ROOT%{_datadir}/%{name}/completions/{mkinitrd,rpmcheck} +# FreeBSD stuff +%{__rm} $RPM_BUILD_ROOT%{_datadir}/%{name}/completions/{kldload,portupgrade} +# Debian stuff +%{__rm} $RPM_BUILD_ROOT%{_datadir}/%{name}/completions/{apt-build,dselect,reportbug,alternatives,update-alternatives,lintian,lintian-info} +# NetworkManager stuff +%{__rm} $RPM_BUILD_ROOT%{_datadir}/%{name}/completions/nmcli + + +# do not generate autodeps +chmod a-x $RPM_BUILD_ROOT%{_datadir}/%{name}/helpers/perl + +%clean +rm -rf $RPM_BUILD_ROOT + +%triggerpostun -- %{name} < 20050721-3.9 +sed -i -e '/^# START bash completion/,/^# END bash completion/d' /etc/bashrc + +%files +%defattr(644,root,root,755) +%doc AUTHORS CHANGES README +/etc/shrc.d/bash_completion.sh +%dir %{_sysconfdir}/bash_completion.d +%dir %{_datadir}/%{name} +%{_datadir}/%{name}/bash_completion +%dir %{_datadir}/%{name}/completions +%{_datadir}/%{name}/completions/* +%dir %{_datadir}/%{name}/helpers +%attr(755,root,root) %{_datadir}/%{name}/helpers/perl +%{_npkgconfigdir}/bash-completion.pc diff --git a/builder.bash-completion b/builder.bash-completion new file mode 100644 index 0000000..0b081c8 --- /dev/null +++ b/builder.bash-completion @@ -0,0 +1,50 @@ +# PLD Linux builder(1) script completion + +# get active spec file from commandline +# caller should make $spec local variable +# TODO: it gets it wrong if some option arg is found before spec itself +_builder_get_spec() +{ + local i + spec= + for (( i=1; i < ${#words[@]}-1; i++ )); do + if [[ ${words[i]} != -* ]]; then + spec=${words[i]} + break + fi + done + [[ ! -f $spec ]] && return 0 +} + +_builder() +{ + local cur prev words cword + _init_completion || return + + case $prev in + -r) + COMPREPLY=( $( compgen -W '$( git tag )' -- "$cur" ) ) + return 0 + ;; + --with|--without) + local spec bconds + _builder_get_spec + bconds=$( + awk ' + /^%changelog/ { exit } + /^%bcond_with/{ + print $2 + }' $spec + ) + COMPREPLY=( $( compgen -W "$bconds" -- "$cur" ) ) + return 0 + ;; + esac + + if [[ $cur == -* ]]; then + COMPREPLY=( $( compgen -W '$( _parse_help "$1" )' -- "$cur" ) ) + else + _filedir spec + fi +} && +complete -F _builder builder diff --git a/pear.patch b/pear.patch new file mode 100644 index 0000000..d62385e --- /dev/null +++ b/pear.patch @@ -0,0 +1,16 @@ +--- bash-completion-1.2/completions/pear~ 2010-08-23 20:41:58.000000000 +0300 ++++ bash-completion-1.2/completions/pear 2010-10-19 22:52:26.008412279 +0300 +@@ -106,6 +106,13 @@ + _filedir '@(tgz)' + return 0 + ;; ++ make-rpm-spec) ++ if [[ "${cur}" == -* ]] ; then ++ COMPREPLY=( $(compgen -W "-t -o -r -p -d --spec-template --output --rpm-release --rpm-pkgname --rpm-depname" -- ${cur}) ) ++ fi ++ _filedir '@(tgz)' ++ return 0 ++ ;; + package|pickle) + if [[ "${cur}" == -* ]] ; then + COMPREPLY=( $(compgen -W "-Z -n --nocompress --showname" -- ${cur}) ) -- 2.46.0