#!/bin/bash # Copyright 2012 Nicolás Reynolds Licensed under GPLv3 # # Smart cleanup of the chroot, restores chroot to its original state but also # leaves the dependencies needed by the current package. # # Useful when you're building a lot of packages one after another and they # share some dependencies. # # Logic: tap into `makepkg -s` # # Use it as the PACMAN var for makepkg: `PACMAN=$0 makepkg` set -e set -x cleanup_log=/tmp/libretools-cleanup.log cmd="$1"; shift # make -Rn respect PACMAN_OPTS flags=($(echo "$@" | grep -o "\-\-no\(confirm\|progressbar\)" || true)) args="$@" case $cmd in # Collect the packages that are going to be installed, but use a clean database to # get the full needed list # See update-cleansystem -T) # Use sudo because $0 is run as normal user sudo pacman -b "${BD:-/var/lib/libretools/clean}" -Sy sudo pacman -b "${BD:-/var/lib/libretools/clean}" \ -Sp \ --print-format "%n" \ ${args[@]} >>${cleanup_log} ;; # Diff against previously installed packages and remove the unneeded ones -S) cleanup=($(comm -23 \ <(pacman -Qq | sort) \ <(cat /etc/libretools.d/cleansystem ${cleanup_log} | sort -u) )) if [ ${#cleanup[@]} -gt 0 ]; then # At this point $0 is run as root pacman -Rn ${flags[@]} ${cleanup[@]} fi ;; # Remove the cleanup log at the end -R) rm ${cleanup_log} ;; esac # Make makepkg dreams come true pacman $cmd ${args[@]}