From c88d66a0cbaa2baa258f212cb39fb940b86d2d30 Mon Sep 17 00:00:00 2001 From: root Date: Sat, 2 Nov 2013 02:00:39 +0100 Subject: refactor punani --- lib/punani | 155 +++++++++++++++++++++++++++++++++---------------------------- 1 file changed, 83 insertions(+), 72 deletions(-) diff --git a/lib/punani b/lib/punani index d2bcbed2..41c59a46 100644 --- a/lib/punani +++ b/lib/punani @@ -2,92 +2,103 @@ #include core ## begin punani DB -punani_pacman_= -punani_yum_= -punani_aptget_= +_punanidb_pacman_= +_punanidb_yum_= +_punanidb_aptget_= -punani_pacman_git=git -punani_yum_git=git -punani_aptget_git=git-core +_punanidb_pacman_git=git +_punanidb_yum_git=git +_punanidb_aptget_git=git-core -punani_pacman_python2=python2 -punani_yum_python2=python -punani_aptget_python2=python +_punanidb_pacman_python2=python2 +_punanidb_yum_python2=python +_punanidb_aptget_python2=python -punani_pacman_python3=python -punani_aptget_python3=python3 +_punanidb_pacman_python3=python +_punanidb_aptget_python3=python3 -punani_pacman_hostname=inetutils -punani_aptget_hostname=hostname +_punanidb_pacman_hostname=inetutils +_punanidb_aptget_hostname=hostname -punani_pacman_hostname=inetutils -punani_aptget_hostname=hostname +_punanidb_pacman_hostname=inetutils +_punanidb_aptget_hostname=hostname -punani_pacman_make=make -punani_yum_make=make -punani_aptget_make=make +_punanidb_pacman_make=make +_punanidb_yum_make=make +_punanidb_aptget_make=make -punani_pacman_tinc=tinc -punani_yum_tinc=tinc -punani_aptget_tinc=tinc +_punanidb_pacman_tinc=tinc +_punanidb_yum_tinc=tinc +_punanidb_aptget_tinc=tinc + +_punanidb_pacman_tor=tor +_punanidb_yum_tor=tor +_punanidb_aptget_tor=tor + +_punanidb_pacman_nano=nano +_punanidb_yum_nano=nano +_punanidb_aptget_nano=nano + +_punanidb_pacman_vim=vim +_punanidb_yum_vim=vim-enhanced +_punanidb_aptget_vim=vim -punani_pacman_nano=nano -punani_yum_nano=nano -punani_aptget_nano=nano ## end punani DB -punani_resolve_package(){ - : ${PACKER_CMD?PACKER_CMD is not set,bailing out} +_punani_resolve_package(){ + : ${PACKER?PACKER is not set,bailing out} pkg=${1?please provide package name to resolve} - PACKER_DB=$(printf ${PACKER_CMD}| sed 's/-//g') - eval printf \"\${punani_${PACKER_DB}_${pkg}-}\" | grep . + eval printf \"\${_punanidb_${PACKER_DB}_${pkg}-}\" | grep . } +_punani_aptget_install(){ apt-get -y install "$@" ;} +_punani_aptget_remove(){ apt-get -y remove "$@" ;} +_punani_aptget_has() { dpkg -s "$1" >/dev/null 2>/dev/null ;} +_punani_yum_install(){ yum -y install "$@" ;} +_punani_yum_remove(){ yum -y remove "$@" ;} +_punani_yum_has() { rpm -qa --qf "%{NAME}\n"| egrep "^${1}\$" >/dev/null ;} +_punani_pacman_install(){ pacman --noconfirm -S --needed "$@" ;} +_punani_pacman_remove(){ pacman -Rcs "$@" ;} +_punani_pacman_has(){ pacman -Q "$1" >/dev/null;} +_punani_brew_install(){ brew install "$@"; } +_punani_brew_remove(){ brew remove "$@";} +_punani_brew_has(){ error "not implemented"; return 1 ;} + punani(){ ! is_root && error "punani requires super-user rights" && return 1 ACTION="$1"; shift PKGS="$*" - if ! :; then : # dummy case, so the rest has a common format - elif exists apt-get;then - PACKER_CMD='apt-get' - INSTALL_PARAM='-y install' - REMOVE_PARAM='-y remove' - elif exists pacman;then - PACKER_CMD='pacman' - INSTALL_PARAM='--noconfirm -S --needed' - REMOVE_PARAM='-Rcs' - elif exists yum;then - PACKER_CMD='yum' - INSTALL_PARAM='-y install' - REMOVE_PARAM='-y remove' - elif exists brew;then - PACKER_CMD='brew' - INSTALL_PARAM='install' - REMOVE_PARAM='remove' - else - error "Error 2: no known package manager found; no punani for you!" - return 1 - fi - info "using $PACKER_CMD for install" - RESOLVED="" - if test -n "$PKGS"; then - for PKG in $PKGS; do - RES="$(punani_resolve_package $PKG)" - test -z "$RES" && error "could not resolve '$PKG'; no punani for you!"&& return 23 - RESOLVED="${RESOLVED+$RESOLVED }$RES" - done - else - error "no PACKAGE specified." - ACTION="usage" - fi - case "$ACTION" in - install) - eval $PACKER_CMD $INSTALL_PARAM $RESOLVED || error "Cannot install $PKG!" - ;; - remove) - eval $PACKER_CMD $REMOVE_PARAM $RESOLVED || error "Cannot remove $PKG!" - ;; - *) - error "usage: punani (install|remove) PACKAGE..." - return 23 - esac + PACKER_DB=$(printf ${PACKER}| sed 's/-//g') + for p in apt-get pacman yum brew;do + exists "$p" && PACKER=`printf $p | sed 's/-//g'` && break + done + + [ -z "${PACKER:-}" ] && error "Error 2: no known package manager found; no punani for you!" && return 1 + info "using $PACKER for install" + [ -z "$PKGS" ] && error "no PACKAGE specified." && ACTION="usage" + + + for PKG in $PKGS; do + RES="`_punani_resolve_package $PKG`" + test -z "$RES" && error "could not resolve '$PKG'; no punani for you!"&& return 23 + case "$ACTION" in + install) + eval _punani_${PACKER}_has $RES && info "$RES already installed, skipping" && continue + eval _punani_${PACKER}_install $RES || error "cannot install $RES with $PACKER" + ;; + remove) + ! eval _punani_${PACKER}_has $RES && info "$RES not installed, skipping" && continue + eval _punani_${PACKER}_remove $RES || error "cannot install $RES with $PACKER" + ;; + has) + if eval _punani_${PACKER}_has $RES ;then + info "$RES is installed" + else + info "$RES is not installed" + fi + ;; + *) + error "usage: punani (install|remove|has) PACKAGE..." + return 23 + esac + done } -- cgit v1.2.3