#!/bin/sh # # Copyright (C) 2012-2013 Etersoft # Copyright (C) 2012-2013 Vitaly Lipatov <lav@etersoft.ru> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # load_helper epm-install load_helper epm-search # for zypper before SUSE/11.0 __use_zypper_dry_run() { a= zypper install --help 2>&1 | grep -q -- "--dry-run" && echo "--dry-run" } __use_yum_assumeno() { a= yum --help 2>&1 | grep -q -- "--assumeno" } _epm_do_simulate() { local CMD local filenames="$*" case $PMTYPE in apt-rpm|apt-dpkg) CMD="apt-get --simulate install" ;; yum-rpm) if __use_yum_assumeno ; then LC_ALL=C sudocmd yum --assumeno install $filenames # FIXME: check only error output LC_ALL=C sudocmd yum --assumeno install $filenames 2>&1 | grep "^No package" && return 1 LC_ALL=C sudocmd yum --assumeno install $filenames 2>&1 | grep "^Complete!" && return 0 LC_ALL=C sudocmd yum --assumeno install $filenames 2>&1 | grep "^Exiting on user Command" && return 0 LC_ALL=C sudocmd yum --assumeno install $filenames >/dev/null 2>&1 || return else LC_ALL=C echo n | sudocmd yum install $filenames # FIXME: check only error output LC_ALL=C echo n | sudocmd yum install $filenames 2>&1 | grep "^No package" && return 1 LC_ALL=C echo n | sudocmd yum install $filenames 2>&1 | grep "^Complete!" && return 0 LC_ALL=C echo n | sudocmd yum install $filenames >/dev/null 2>&1 || return fi return 0 ;; urpm-rpm) CMD="urpmi --test --auto" ;; zypper-rpm) if ! __use_zypper_dry_run >/dev/null ; then echo "zypper is too old: does not support --dry-run" return fi CMD="zypper --non-interactive install" ;; emerge) echo "FIXME: Skip with emerge" return ;; pacman) showcmd $SUDO pacman -v -S $filenames echo no | $SUDO pacman -v -S $filenames return ;; slackpkg) #docmd /usr/sbin/slackpkg -batch=on -default_answer=yes download # just try search every package # FIXME: epm_search have to return false status code if the package does not found local pkg res res=0 for pkg in $filenames ; do pkg_filenames="$pkg-[0-9]" epm_search | grep -E "(installed|upgrade)" && continue pkg_filenames="$pkg" epm_search | grep -E "(installed|upgrade)" && continue res=1 echo "Does not found in repository." done return $res ;; *) fatal "Do not known simulate command for $PMTYPE" ;; esac sudocmd $CMD $filenames } epm_simulate() { [ -z "$pkg_filenames" ] && echo "Skip empty list" && return 22 local filenames="$(echo $pkg_filenames | filter_out_installed_packages)" [ -z "$filenames" ] && echo "All packages are already installed" && return 0 _epm_do_simulate $filenames local RES=$? if [ -z "$quiet" ] ; then [ "$RES" = 0 ] && echo "Result: $filenames package(s) CAN BE installed" || echo "Result: There are PROBLEMS with install some package(s)" fi return $RES }