epm-autoorphans 3.62 KB
Newer Older
1 2
#!/bin/sh
#
3 4
# Copyright (C) 2015, 2017  Etersoft
# Copyright (C) 2015, 2017  Vitaly Lipatov <lav@etersoft.ru>
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#
# 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/>.
#

20 21
__epm_orphan_altrpm()
{
22
	docmd apt-cache list-extras
23 24
}

25 26
epm_autoorphans()
{
27

28
[ -z "$*" ] || fatal "No arguments are allowed here"
29 30


31
case $PMTYPE in
32
	apt-rpm)
33
		# ALT Linux only
34
		assure_exists /usr/share/apt/scripts/list-extras.lua apt-scripts
35 36 37 38
		if [ -z "$dryrun" ] ; then
			echo "We will try remove all installed packages which are missed in repositories"
			warning "Use with caution!"
		fi
39
		epm Upgrade || fatal
Vitaly Lipatov's avatar
Vitaly Lipatov committed
40 41
		local PKGLIST=$(__epm_orphan_altrpm \
			| sed -e "s/\.32bit//g" \
42
			| grep -v -- "^eepm$" \
43
			| grep -v -- "^distro_info$" \
Vitaly Lipatov's avatar
Vitaly Lipatov committed
44
			| grep -v -- "^kernel")
45

46 47 48 49 50 51
		local play_installed="$(epm play --list-installed-packages)"
		if [ -n "$play_installed" ] ; then
			echo "Skip follow packages installed via epm play: $play_installed"
		fi
		PKGLIST="$(estrlist exclude "$play_installed" "$PKGLIST")"

52
		if [ -z "$dryrun" ] && [ -n "$PKGLIST" ] ; then
53
			showcmd epm remove $dryrun $force $PKGLIST
54 55 56
			confirm_info "We will remove packages above."
		fi

57 58 59
#		if [ -n "$dryrun" ] ; then
#			echo "$PKGLIST"
#		else
60
			docmd epm remove $dryrun $force $(subst_option non_interactive --auto) $PKGLIST
61
#		fi
62
		;;
63 64 65
	apt-dpkg|aptitude-dpkg)
		assure_exists deborphan
		showcmd deborphan
66
		a='' deborphan | docmd epm remove $dryrun
67 68 69 70 71
		;;
	#aura)
	#	sudocmd aura -Oj
	#	;;
	yum-rpm)
72 73
		docmd epm upgrade
		assure_exists package-cleanup yum-utils
74
		showcmd package-cleanup --orphans
75
		local PKGLIST=$(package-cleanup -q --orphans | grep -v "^eepm-")
76
		docmd epm remove $dryrun $PKGLIST
77 78 79
		;;
	dnf-rpm)
		# TODO: dnf list extras
80 81
		docmd epm upgrade
		assure_exists package-cleanup dnf-utils
82
		showcmd package-cleanup --orphans
83
		local PKGLIST=$(package-cleanup -q --orphans | grep -v "^eepm-")
84
		docmd epm remove $dryrun $PKGLIST
85 86
		;;
	urpm-rpm)
87 88 89 90 91 92
		if [ -n "$dryrun" ] ; then
			fatal "--dry-run is not supported yet"
		else
			showcmd urpme --report-orphans
			sudocmd urpme --auto-orphans
		fi
93 94 95 96 97 98 99
		;;
	#emerge)
	#	sudocmd emerge --depclean
	#	assure_exists revdep-rebuild
	#	sudocmd revdep-rebuild
	#	;;
	pacman)
100 101 102 103 104 105
		if [ -n "$dryrun" ] ; then
			info "Autoorphans packages list:"
			sudocmd pacman -Qdtq
		else
			sudocmd pacman -Qdtq | sudocmd pacman -Rs -
		fi
106
		;;
107
	slackpkg)
108
		# clean-system removes non official packages
109 110
		sudocmd slackpkg clean-system
		;;
111 112 113
	eopkg)
		sudocmd eopkg remove-orphans
		;;
114 115 116 117 118 119
	#guix)
	#	sudocmd guix gc
	#	;;
	#pkgng)
	#	sudocmd pkg autoremove
	#	;;
120 121 122 123 124 125 126
	zypper-rpm)
		# https://www.linux.org.ru/forum/desktop/11931830
		assure_exists zypper zypper 1.9.2
		# For zypper < 1.9.2: zypper se -si | grep 'System Packages'
		sudocmd zypper packages --orphaned
		# FIXME: x86_64/i586 are duplicated
		local PKGLIST=$(zypper packages --orphaned | tail -n +5 | cut -d \| -f 3 | sort -u)
127
		docmd epm remove $dryrun --clean-deps $PKGLIST
128
		;;
129
	xbps)
130 131 132 133 134
		if [ -n "$dryrun" ] ; then
			fatal "--dry-run is not supported yet"
		else
			sudocmd xbps-remove -o
		fi
135
		;;
136 137 138 139 140 141
	*)
		fatal "Have no suitable command for $PMTYPE"
		;;
esac

}