diff options
-rwxr-xr-x | clean-pacman | 39 |
1 files changed, 25 insertions, 14 deletions
diff --git a/clean-pacman b/clean-pacman index 9ef4a46..2bfa225 100755 --- a/clean-pacman +++ b/clean-pacman @@ -12,15 +12,24 @@ # leftovers # # Use it as the PACMAN var for makepkg: `PACMAN=$0 makepkg` +# +# Notes +# makepkg runs the following flags three times (depends, makedepends, checkdepends) +# -T check deps (collect here) +# -S install missing deps (remove leftovers here) +# -T check if installed correctly (ignore) +# -R remove installed deps (skip) 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="$@" +makepid=$(ps --no-header -o pid -C makepkg | head -n1 | tr -d " ") +cleanup_log=/tmp/libretools-cleanup-${makepid}.log +checkdep=/tmp/libretools-dep-check-${makepid} + +cmd="$(echo "$@" | grep -o "\-\(T\|S\|R\|Q\)[^ ]*")" +# remove all flags +args="$(echo " $@" | sed "s/ \-[^ ]\+//g")" case $cmd in @@ -28,36 +37,38 @@ case $cmd in # to get the full needed list. # See update-cleansystem -T) -# Use sudo because $0 is run as normal user + if [ ! -f "${checkdep}" ]; then +# Use sudo because $0 is run as normal user on -T # TODO -Sy only once sudo pacman -b "${BD:-/var/lib/libretools/clean}" -Sy >/dev/null 2>&1 sudo pacman -b "${BD:-/var/lib/libretools/clean}" \ -Sp \ --print-format "%n" \ - ${args[@]} >>${cleanup_log} 2>/dev/null - ;; + ${args[@]} >${cleanup_log} 2>/dev/null +# Deps are collected, so skip next time + touch "${checkdep}" # Diff against previously installed packages and remove the unneeded ones # # We don't collect during -S because we never get here if depencies are met # during -T - -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[@]} + sudo pacman -Rn --noconfirm ${cleanup[@]} 1>&2 fi - +# This is the second -T run + else # Remove the cleanup log at the end - rm ${cleanup_log} + rm "${cleanup_log}" "${checkdep}" + fi ;; # DON'T LET MAKEPKG DO REMOVALS OF ITS OWN -R) exit 0;; esac # Make makepkg dreams come true -pacman $cmd ${args[@]} +pacman $@ |