blob: 160a0f544e89dfc90ae1bbee79f4980e96ae3d86 (
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
53
54
55
|
#!/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 already installed that are needed by the current
# package. In other words, it removes everything that's left.
#
# Useful when you're building a lot of packages one after another and they
# share some dependencies.
#
# Logic: tap into `makepkg -sr`, collect required packages and remove the
# leftovers
#
# 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
rm ${cleanup_log}
;;
esac
# Make makepkg dreams come true
pacman $cmd ${args[@]}
|