#!/bin/sh # # Copyright (C) 2012-2014 Etersoft # Copyright (C) 2012-2014 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-query load_helper epm-print # Try remove with low level removing epm_remove_low() { [ -z "$1" ] && return case $PMTYPE in apt-rpm|yum-rpm|zypper-rpm|urpm-rpm|dnf-rpm) sudocmd rpm -ev $nodeps $@ return ;; apt-dpkg|aptitude-dpkg) sudocmd dpkg -P $(subst_option nodeps --force-all) $(print_name "$@") return ;; pkgsrc) sudocmd pkg_delete -r $@ return ;; pkgng) sudocmd pkg delete -R $@ return ;; emerge) sudocmd emerge --unmerge $@ return ;; pacman) sudocmd pacman -R $@ return ;; slackpkg) sudocmd /sbin/removepkg $@ return ;; esac return 1 } epm_remove_names() { [ -z "$1" ] && return case $PMTYPE in apt-dpkg) sudocmd apt-get remove --purge $@ return ;; aptitude-dpkg) sudocmd aptitude purge $@ return ;; apt-rpm) sudocmd apt-get remove $@ return ;; deepsolver-rpm) sudocmd ds-remove $@ return ;; urpm-rpm) sudocmd urpme $@ return ;; pkgsrc) # without dependencies sudocmd pkg_delete $@ return ;; pkgng) sudocmd pkg delete -R $@ return ;; emerge) #sudocmd emerge --unmerge $@ sudocmd emerge -aC $@ return ;; pacman) sudocmd pacman -Rc $@ return ;; yum-rpm) sudocmd yum remove $@ return ;; dnf-rpm) sudocmd dnf remove $@ return ;; snappy) sudocmd snappy uninstall $@ return ;; zypper-rpm) sudocmd zypper remove $@ return ;; mpkg) sudocmd mpkg remove $@ return ;; conary) sudocmd conary erase $@ return ;; npackd) sudocmd npackdcl remove --package=$@ return ;; nix) sudocmd nix-env --uninstall $@ return ;; guix) sudocmd guix package -r $@ return ;; android) sudocmd pm uninstall $@ return ;; chocolatey) sudocmd chocolatey uninstall $@ return ;; slackpkg) sudocmd /usr/sbin/slackpkg remove $@ return ;; homebrew) sudocmd brew remove $@ return ;; aptcyg) sudocmd apt-cyg remove $@ return ;; ipkg) sudocmd ipkg $(subst_option force -force-depends) remove $@ return ;; *) fatal "Have no suitable command for $PMTYPE" ;; esac } # TODO epm_remove_nonint() { case $PMTYPE in apt-dpkg) sudocmd apt-get -y --force-yes remove --purge $@ return ;; aptitude-dpkg) sudocmd aptitude -y purge $@ return ;; apt-rpm) sudocmd apt-get -y --force-yes remove $@ return ;; urpm-rpm) sudocmd urpme --auto $@ return ;; pacman) sudocmd pacman -Rc --noconfirm $@ return ;; yum-rpm) sudocmd yum -y remove $@ return ;; zypper-rpm) sudocmd zypper --non-interactive remove $@ return ;; slackpkg) sudocmd /usr/sbin/slackpkg -batch=on -default_answer=yes remove $@ return ;; pkgng) sudocmd pkg delete -y -R $@ return ;; ipkg) sudocmd ipkg -force-defaults remove $@ return ;; esac return 5 } epm_print_remove_command() { case $PMTYPE in apt-rpm|yum-rpm|zypper-rpm|urpm-rpm|dnf-rpm) echo "rpm -ev $nodeps $@" ;; apt-dpkg|aptitude-dpkg) echo "dpkg -P $@" ;; pkgsrc) echo "pkg_delete -r $@" ;; pkgng) echo "pkg delete -R $@" ;; pacman) echo "pacman -R $@" ;; emerge) echo "emerge --unmerge $@" ;; slackpkg) echo "/sbin/removepkg $@" ;; ipkg) echo "ipkg remove $@" ;; aptcyg) echo "apt-cyg remove $@" ;; *) fatal "Have no suitable appropriate remove command for $PMTYPE" ;; esac } epm_remove() { if [ -n "$show_command_only" ] ; then epm_print_remove_command $pkg_filenames return fi # get full package name(s) from the package file(s) [ -n "$pkg_files" ] && pkg_names="$pkg_names $(epm query $pkg_files)" [ -n "$pkg_names" ] || fatal "Remove: missing package(s) name." epm_remove_low $pkg_names && return # get package name for hi level package management command (with version if supported and if possible) pkg_names=$(__epm_get_hilevel_name $pkg_names) if [ -n "$non_interactive" ] ; then epm_remove_nonint $pkg_names local RET=$? # if not separate command, use usual command [ "$RET" = "5" ] || return $RET fi epm_remove_names $pkg_names }