diff options
| -rw-r--r-- | lib/punani | 155 | 
1 files changed, 83 insertions, 72 deletions
| @@ -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  } | 
