epm-remove 4.61 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 21
load_helper epm-query

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

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

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

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

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

204 205 206

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

212 213 214
	# 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
215
	[ -n "$pkg_names" ] || fatal "Remove: missing package(s) name."
216
	epm_remove_low $pkg_names && return
217

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

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

228
	epm_remove_names $pkg_names
229 230
}