diff options
author | makefu <github@syntax-fehler.de> | 2011-08-29 12:38:56 +0200 |
---|---|---|
committer | makefu <github@syntax-fehler.de> | 2011-08-29 12:38:56 +0200 |
commit | e805dbd13ea4afc86cbb6bf20c17a4cdf72cb835 (patch) | |
tree | 9a356cee8f787a971c4cb71e258db71941750837 | |
parent | 851fb93dd3d1778da12752977cfbe4fff7d65ecb (diff) |
punani: fix help/hard conflict, system function
handle_system is now the function which does the right thing for all distro
specific stuff
-rwxr-xr-x | punani/bin/punani | 239 |
1 files changed, 152 insertions, 87 deletions
diff --git a/punani/bin/punani b/punani/bin/punani index f01cedb7..f9244c53 100755 --- a/punani/bin/punani +++ b/punani/bin/punani @@ -9,7 +9,7 @@ set -euf godmode() { if test "${nosudo-false}" != true -a `id -u` != 0; then - echo "Warning: we require god mode..." >&2 + echo "!! we require god mode..." >&2 exec sudo "$0" "$@" exit 23 # go to hell fi @@ -43,7 +43,142 @@ arch_aur_helper() echo "!! To be Implemented" return 1 } +handle_system () { + case "$system" in + (*arch-like*) + # dryrun + # TODO dryrun not dry enough for aur helper + if [ "${dryrun-}" ];then + pacman () { echo "pacman $@" ; } + pkgfile () { echo "pkgfile $@"; } + yaourt () { echo "yaourt $@" ; } + fi + + # get dependencies : + # we need pkgfile + if ! [ `which pkgfile` ] ; then + pacman -S --noconfirm pkgtools + pkgfile -u + fi + punani_Scientist_update() { + pacman -Sy + pkgtool -u + } + + punani_Engineer_insert() { + # punani under archlinux first tries to load the packages with the given file name + # it needs pkgfile for that + # + # when trying harder it tries to load the package with the given name directly via yaourt + echo "** trying to find package with given file" + if pacman -Sy `pkgfile $1`; then + echo "++ finished" + exit 0 + else + echo "!! nothing found in base repos" + if [ "${hard-}" ] ; then + echo "** trying harder" + echo "** trying yaourt directly with given package" + mgr=`arch_aur_helper` + if $mgr -S $1 ;then + echo "++ finished" + exit 0 + else + echo "!! giving up...i am sorry" + exit 1 + fi + echo + else + echo "?? When in doubt try $0 -h -Ei $1 " + fi + fi + } + punani_Engineer_remove() { + pacman -Rcs "`pacman -Ql | grep $1$ | awk '{print $1}'`" + if [ "${hard-}" ] ; then + echo "** trying harder" + echo "** directly delete given package name" + pacman -Rcs "$1" + fi + } + ;; + (*debian-like*) + if [ "${dryrun-}" ]; then + apt-file () { echo $@; } + apt-get () { echo $@; } + fi + [ `which apt-file` ] || apt-get install --yes apt-file && apt-file update + punani_Scientist_update() { + apt-get update + apt-file update + } + punani_Scientist_search() { + apt-file search $1 && exit 0 + if [ "${hard-}" ] ; then + apt-cache search $1 + fi + } + punani_Engineer_insert() { + if apt-get install `apt-file search $1`;then + echo "++ finished" + else + if [ "${hard-}" ] ; then + echo "** trying harder" + apt-get install $1 + fi + fi + } + punani_Engineer_remove() { + apt-get remove --purge "`apt-file search $1`" + if [ "${hard-}" ] ; then + echo "** trying harder" + echo "** directly delete given package name" + apt-get remove --purge "$1" + fi + } + ;; + (*) + email='krebs@syntax-fehler.de' + irc_host='irc.freenode.org' + irc_channel='#tincspasm' + cat>&2<<EOF +Error 2: Your System Will Be Supported ASAP +1. send us a bug report +1.1 your operating system's name and version +1.2 this message: $0 $* +1.3 mailto:$email +2. join the relevant IRC channel +2.1 /connect $irc_host +2.2 /join $irc_channel +EOF + exit 23 + esac +} +help(){ + cat <<EOF +Usage: $0 [Options] [role][command] + +Options: + -f force + -h hard + -v verbose + -d dryrun + -? this message + +Role: + -E Engineer + -S Scientist + +Engineer: + i insert + r remove +Scientist: + s search + y update +EOF + exit 1 +} punani (){ ns=punani role=undefined @@ -53,6 +188,7 @@ punani (){ (h) hard=true; continue;; (v) verbose=true; continue;; (d) dryrun=true; continue;; + (\?) help;continue ;; esac case ${role-Manager} in (Engineer) @@ -62,11 +198,19 @@ punani (){ (*) echo 'Error 1: You are made of stupid!' >&2 exit 23;; - esac - ;; + esac;; + (Scientist) + case $OPT in + (s) command="${ns}_${role}_search";; + (y) command="${ns}_${role}_update";; + (*) + echo 'Error 1: You are made of stupid!' >&2 + exit 23;; + esac ;; (undefined) case $OPT in (E) role=Engineer;; + (S) role=Scientist;; (*) exit 23;; esac @@ -82,96 +226,17 @@ punani $@ case $role in (Engineer) godmode $@;; + (Scientist) + case $command in + (*_update) godmode $@;; + esac;; esac shift `echo $OPTIND-1 | bc` guess_system -case "$system" in - (*arch-like*) - # get dependencies : - # we need pkgfile - if [ "${dryrun-}" ];then - pacman () { echo "pacman $@" ; } - pkgfile () { echo "pkgfile $@"; } - yaourt () { echo "yaourt $@" ; } - fi - if ! [ `which pkgfile` ] ; then - pacman -S --noconfirm pkgtools - pkgfile -u - fi - punani_Scientist_update() { - pacman -Sy - pkgtool -u - } - - punani_Engineer_insert() { - # punani under archlinux first tries to load the packages with the given file name - # it needs pkgfile for that - # - # when trying harder it tries to load the package with the given name directly via yaourt - echo "** trying to find package with given file" - if pacman -Sy `pkgfile $1`; then - echo "++ finished" - exit 0 - else - echo "!! nothing found in base repos" - if [ "${hard-}" ] ; then - echo "** trying harder" - echo "** trying yaourt directly with given package" - mgr=`arch_aur_helper` - if $mgr -S $1 ;then - echo "++ finished" - exit 0 - else - echo "!! giving up...i am sorry" - exit 1 - fi - echo - else - echo "?? When in doubt try $0 -Ei --hard $1 " - fi - fi - } - punani_Engineer_remove() { - pacman -Rcs "`pacman -Ql | grep $1$ | awk '{print $1}'`" - if [ "${hard-}" ] ; then - echo "trying harder" - echo "** directly delete given package name" - pacman -Rcs "$1" - fi - } - ;; - (*debian-like*) - if [ "${dryrun-}" ]; then - apt-file () { echo $@; } - apt-get () { echo $@; } - fi - [ `which apt-file` ] || apt-get install --yes apt-file && apt-file update - punani_Scientist_update() { - apt-get update - apt-file update - } - - ;; - (*) - email='krebs@syntax-fehler.de' - irc_host='irc.freenode.org' - irc_channel='#tincspasm' - cat>&2<<EOF -Error 2: Your System Will Be Supported ASAP -1. send us a bug report -1.1 your operating system's name and version -1.2 this message: $0 $* -1.3 mailto:$email -2. join the relevant IRC channel -2.1 /connect $irc_host -2.2 /join $irc_channel -EOF - exit 23 -esac - +handle_system command="${ns}_Engineer_insert" for name; do "$command" "$name" |