summaryrefslogtreecommitdiff
path: root/chcleanup
diff options
context:
space:
mode:
Diffstat (limited to 'chcleanup')
-rwxr-xr-xchcleanup44
1 files changed, 41 insertions, 3 deletions
diff --git a/chcleanup b/chcleanup
index 7074b84..e689a4b 100755
--- a/chcleanup
+++ b/chcleanup
@@ -1,11 +1,49 @@
#!/bin/bash
+# (c) Nicolás Reynolds <fauno@parabola.nu>
+# Released under GPLv3
+#
+# Performs chroot cleanup smartly, it only removes the unneeded packages or
+# leaves you with a cleansystem
+#
+# See: HOOKPREBUILD
+
+set -e
[ ! -f /etc/libretools.d/cleansystem ] && exit 1
+[ ! -d "${DB:-/var/lib/libretools/clean}"/sync ] && exit 1
+
+source $(dirname $0)/libremessages
+
+msg "Cleaning chroot..."
+
+cleanup_log=/tmp/libretools-cleanup.log
+touch ${cleanup_log}
+
+# If we're running makepkg
+if [ -f PKGBUILD ]; then
+ source PKGBUILD || true
+
+# Update the cleansystem database
+ sudo pacman -b "${BD:-/var/lib/libretools/clean}" -Sy
+# Get the full list of packages needed by dependencies
+ sudo pacman -b "${BD:-/var/lib/libretools/clean}" \
+ -Sp \
+ --print-format "%n" \
+ ${depends[@]} ${makedepends[@]} ${checkdepends[@]} \
+ >${cleanup_log}
+fi
+
+# Diff installed packages against a clean chroot and needed packages,
+# then remove leftovers
+packages=($(comm -23 <(pacman -Qq | sort) \
+ <(cat /etc/libretools.d/cleansystem ${cleanup_log} | sort -u)
+ ))
-packages=($(comm -23 <(pacman -Qq | sort) <(sort /etc/libretools.d/cleansystem)))
+[ ${#packages[@]} -eq 0 ] && exit 0
-echo "Removing: ${packages[@]}"
+msg2 "Removing ${#packages[@]} packages: ${packages[@]}"
-sudo pacman --noconfirm -Rcs ${packages[@]}
+# Only remove leftovers, -Rcs removes too much
+sudo pacman --noconfirm -Rn ${packages[@]}
exit $?