epm-remove 4.65 KB
Newer Older
1 2
#!/bin/sh
#
Vitaly Lipatov's avatar
Vitaly Lipatov committed
3 4
# Copyright (C) 2012-2014  Etersoft
# Copyright (C) 2012-2014  Vitaly Lipatov <lav@etersoft.ru>
5
#
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
load_helper epm-query
21
load_helper epm-print
22

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

53 54 55
epm_remove_names()
{
	[ -z "$1" ] && return
Vitaly Lipatov's avatar
Vitaly Lipatov committed
56

57
	case $PMTYPE in
58
		apt-dpkg)
59
			sudocmd apt-get remove --purge $@
60
			return ;;
Vitaly Lipatov's avatar
Vitaly Lipatov committed
61 62 63
		aptitude-dpkg)
			sudocmd aptitude purge $@
			return ;;
64 65 66
		apt-rpm)
			sudocmd apt-get remove $@
			return ;;
67 68 69
		deepsolver-rpm)
			sudocmd ds-remove $@
			return ;;
70
		urpm-rpm)
71
			sudocmd urpme $@
72
			return ;;
73
		pkgsrc) # without dependencies
74
			sudocmd pkg_delete $@
75
			return ;;
76 77 78
		pkgng)
			sudocmd pkg delete -R $@
			return ;;
79
		emerge)
80 81
			#sudocmd emerge --unmerge $@
			sudocmd emerge -aC $@
82 83
			return ;;
		pacman)
84
			sudocmd pacman -Rc $@
85 86
			return ;;
		yum-rpm)
87
			sudocmd yum remove $@
88
			return ;;
89 90 91
		dnf-rpm)
			sudocmd dnf remove $@
			return ;;
92 93 94
		snappy)
			sudocmd snappy uninstall $@
			return ;;
95
		zypper-rpm)
96
			sudocmd zypper remove $@
97 98
			return ;;
		mpkg)
99
			sudocmd mpkg remove $@
100
			return ;;
101 102 103
		conary)
			sudocmd conary erase $@
			return ;;
104
		npackd)
Vitaly Lipatov's avatar
Vitaly Lipatov committed
105
			sudocmd npackdcl remove --package=$@
106
			return ;;
Vitaly Lipatov's avatar
Vitaly Lipatov committed
107 108 109
		nix)
			sudocmd nix-env --uninstall $@
			return ;;
110 111 112
		guix)
			sudocmd guix package -r $@
			return ;;
113 114 115
		android)
			sudocmd pm uninstall $@
			return ;;
116
		chocolatey)
Vitaly Lipatov's avatar
Vitaly Lipatov committed
117
			sudocmd chocolatey uninstall $@
118
			return ;;
119
		slackpkg)
120
			sudocmd /usr/sbin/slackpkg remove $@
121
			return ;;
122 123 124 125
		homebrew)
			sudocmd brew remove $@
			return ;;
		ipkg)
Vitaly Lipatov's avatar
Vitaly Lipatov committed
126
			sudocmd ipkg $(subst_option force -force-depends) remove $@
127
			return ;;
128
		*)
129
			fatal "Have no suitable command for $PMTYPE"
130
			;;
Vitaly Lipatov's avatar
Vitaly Lipatov committed
131
	esac
132 133
}

134 135 136
# TODO
epm_remove_nonint()
{
137
	case $PMTYPE in
138
		apt-dpkg)
139
			sudocmd apt-get -y --force-yes remove --purge $@
140
			return ;;
Vitaly Lipatov's avatar
Vitaly Lipatov committed
141 142 143
		aptitude-dpkg)
			sudocmd aptitude -y purge $@
			return ;;
144 145 146
		apt-rpm)
			sudocmd apt-get -y --force-yes remove $@
			return ;;
147
		urpm-rpm)
148
			sudocmd urpme --auto $@
149 150
			return ;;
		pacman)
151
			sudocmd pacman -Rc --noconfirm $@
152 153
			return ;;
		yum-rpm)
154
			sudocmd yum -y remove $@
155 156
			return ;;
		zypper-rpm)
157
			sudocmd zypper --non-interactive remove $@
158
			return ;;
159
		slackpkg)
160
			sudocmd /usr/sbin/slackpkg -batch=on -default_answer=yes remove $@
161
			return ;;
162 163 164
		pkgng)
			sudocmd pkg delete -y -R $@
			return ;;
165 166 167
		ipkg)
			sudocmd ipkg -force-defaults remove $@
			return ;;
168 169
	esac
	return 5
170 171
}

172 173 174
epm_print_remove_command()
{
	case $PMTYPE in
175
		apt-rpm|yum-rpm|zypper-rpm|urpm-rpm|dnf-rpm)
176 177
			echo "rpm -ev $nodeps $@"
			;;
Vitaly Lipatov's avatar
Vitaly Lipatov committed
178
		apt-dpkg|aptitude-dpkg)
179 180
			echo "dpkg -P $@"
			;;
181
		pkgsrc)
182 183
			echo "pkg_delete -r $@"
			;;
184 185 186
		pkgng)
			echo "pkg delete -R $@"
			;;
187 188 189
		pacman)
			echo "pacman -R $@"
			;;
190 191 192 193
		emerge)
			echo "emerge --unmerge $@"
			;;
		slackpkg)
194
			echo "/sbin/removepkg $@"
195
			;;
196 197 198
		ipkg)
			echo "ipkg remove $@"
			;;
199
		*)
200
			fatal "Have no suitable appropriate remove command for $PMTYPE"
201 202 203 204
			;;
	esac
}

205 206 207

epm_remove()
{
208 209 210 211 212
	if [ -n "$show_command_only" ] ; then
		epm_print_remove_command $pkg_filenames
		return
	fi

213 214 215
	# get full package name(s) from the package file(s)
	[ -n "$pkg_files" ] && pkg_names="$pkg_names $(epm query $pkg_files)"

Vitaly Lipatov's avatar
Vitaly Lipatov committed
216
	[ -n "$pkg_names" ] || fatal "Remove: missing package(s) name."
217
	epm_remove_low $pkg_names && return
218

219 220
	# get package name for hi level package management command (with version if supported and if possible)
	pkg_names=$(__epm_get_hilevel_name $pkg_names)
221 222

	if [ -n "$non_interactive" ] ; then
223
		epm_remove_nonint $pkg_names
224 225 226 227 228
		local RET=$?
		# if not separate command, use usual command
		[ "$RET" = "5" ] || return $RET
	fi

229
	epm_remove_names $pkg_names
230 231
}