summaryrefslogtreecommitdiff
path: root/clean-pacman
blob: 0c22ef0931bb0a58675523ede4e0e7fcb4fd1257 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/bin/bash
# Copyright 2012 Nicolás Reynolds <fauno@parabola.nu> 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[@]}