epm-remove 3.72 KB
Newer Older
1 2 3 4 5
#!/bin/sh
#
# Copyright (C) 2012  Etersoft
# Copyright (C) 2012  Vitaly Lipatov <lav@etersoft.ru>
#
6 7 8
# 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
9 10 11 12 13
# (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
14
# GNU Affero General Public License for more details.
15
#
16 17
# 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/>.
18 19
#

20
# Try remove with low level removing
21 22
epm_remove_low()
{
23 24
	[ -z "$1" ] && return
	case $PMTYPE in
25
		apt-rpm|yum-rpm|zypper-rpm|urpm-rpm|dnf-rpm)
26
			sudocmd rpm -ev $nodeps $@
27 28
			return ;;
		apt-dpkg)
29 30
			[ -n "$nodeps" ] && nodeps="--force-all"
			sudocmd dpkg -P $nodeps $@
31
			return ;;
32
		pkgsrc)
33
			sudocmd pkg_delete -r $@
34 35
			return ;;
		emerge)
Vitaly Lipatov's avatar
Vitaly Lipatov committed
36
			sudocmd emerge --unmerge $@
37
			return ;;
38 39 40
		pacman)
			sudocmd pacman -R $@
			return ;;
41
		slackpkg)
42
			sudocmd /sbin/removepkg $@
43
			return ;;
44 45
	esac
	return 1
46 47
}

48 49 50
epm_remove_names()
{
	[ -z "$1" ] && return
Vitaly Lipatov's avatar
Vitaly Lipatov committed
51

52 53
	case $PMTYPE in
		apt-rpm|apt-dpkg)
54
			sudocmd apt-get remove --purge $@
55
			return ;;
56 57 58
		deepsolver-rpm)
			sudocmd ds-remove $@
			return ;;
59
		urpm-rpm)
60
			sudocmd urpme $@
61
			return ;;
62
		pkgsrc) # without dependencies
63
			sudocmd pkg_delete $@
64 65
			return ;;
		emerge)
66 67
			#sudocmd emerge --unmerge $@
			sudocmd emerge -aC $@
68 69
			return ;;
		pacman)
70
			sudocmd pacman -Rc $@
71 72
			return ;;
		yum-rpm)
73
			sudocmd yum remove $@
74
			return ;;
75 76 77
		dnf-rpm)
			sudocmd dnf remove $@
			return ;;
78
		zypper-rpm)
79
			sudocmd zypper remove $@
80 81
			return ;;
		mpkg)
82
			sudocmd mpkg remove $@
83
			return ;;
84 85 86
		npackd)
			docmd npackdcl remove --package=$@
			return ;;
87 88 89
		chocolatey)
			docmd chocolatey uninstall $@
			return ;;
90
		slackpkg)
91
			sudocmd /usr/sbin/slackpkg remove $@
92
			return ;;
93 94 95 96 97 98 99
		homebrew)
			sudocmd brew remove $@
			return ;;
		ipkg)
			[ -n "$force" ] && force=-force-depends
			sudocmd ipkg $force remove $@
			return ;;
100 101 102
		*)
			fatal "Do not known command for $PMTYPE"
			;;
Vitaly Lipatov's avatar
Vitaly Lipatov committed
103
	esac
104 105
}

106 107 108
# TODO
epm_remove_nonint()
{
109 110
	case $PMTYPE in
		apt-rpm|apt-dpkg)
111
			sudocmd apt-get -y --force-yes remove --purge $@
112 113
			return ;;
		urpm-rpm)
114
			sudocmd urpme --auto $@
115 116
			return ;;
		pacman)
117
			sudocmd pacman -Rc --noconfirm $@
118 119
			return ;;
		yum-rpm)
120
			sudocmd yum -y remove $@
121 122
			return ;;
		zypper-rpm)
123
			sudocmd zypper --non-interactive remove $@
124
			return ;;
125
		slackpkg)
126
			sudocmd /usr/sbin/slackpkg -batch=on -default_answer=yes remove $@
127
			return ;;
128 129 130
		ipkg)
			sudocmd ipkg -force-defaults remove $@
			return ;;
131 132
	esac
	return 5
133 134
}

135 136 137
epm_print_remove_command()
{
	case $PMTYPE in
138
		apt-rpm|yum-rpm|zypper-rpm|urpm-rpm|dnf-rpm)
139 140 141 142 143
			echo "rpm -ev $nodeps $@"
			;;
		apt-dpkg)
			echo "dpkg -P $@"
			;;
144
		pkgsrc)
145 146
			echo "pkg_delete -r $@"
			;;
147 148 149
		pacman)
			echo "pacman -R $@"
			;;
150 151 152 153
		emerge)
			echo "emerge --unmerge $@"
			;;
		slackpkg)
154
			echo "/sbin/removepkg $@"
155
			;;
156 157 158
		ipkg)
			echo "ipkg remove $@"
			;;
159 160 161 162 163 164
		*)
			fatal "Do not known appropriate remove command for $PMTYPE"
			;;
	esac
}

165 166 167

epm_remove()
{
168 169 170 171 172
	if [ -n "$show_command_only" ] ; then
		epm_print_remove_command $pkg_filenames
		return
	fi

173 174
	[ -n "$pkg_files" ] && fatal "FIXME: remove by package file is not supported yet"

175 176 177 178 179 180 181 182 183 184 185 186 187
	[ -n "$pkg_filenames" ] || fatal "Run remove without args"
	epm_remove_low $pkg_filenames && return

	if [ -n "$non_interactive" ] ; then
		epm_remove_nonint $pkg_filenames
		local RET=$?
		# if not separate command, use usual command
		[ "$RET" = "5" ] || return $RET
	fi

	epm_remove_names $pkg_filenames
}