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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
#!/bin/bash
# remove run-time dependencies from the database which are not recorded
# in the package itself
# This should only be run manually, as it cleans something, that should
# never get dirty in the first place!
# It only shows what is superfluid - unless "-f" is provided.
# shellcheck source=../lib/load-configuration
. "${0%/*}/../lib/load-configuration"
deps_file=$(mktemp 'tmp.clean-dependencies.XXXXXXXXXX' --tmpdir)
trap 'rm "${deps_file}"' EXIT
# shellcheck disable=2016
{
printf 'SELECT DISTINCT `binary_packages`.`id`,'
printf 'CONCAT('
printf '`architectures`.`name`,"/",'
printf '`repositories`.`name`,"/",'
printf '`binary_packages`.`pkgname`)'
printf ' FROM `binary_packages`'
mysql_join_binary_packages_binary_packages_in_repositories
mysql_join_binary_packages_in_repositories_repositories
printf ' AND `repositories`.`is_on_master_mirror`'
mysql_join_repositories_architectures
mysql_join_binary_packages_dependencies
mysql_join_dependencies_dependency_types
printf ' AND `dependency_types`.`relevant_for_binary_packages`'
printf ' AND `dependency_types`.`relevant_for_building`'
mysql_join_dependencies_install_targets
printf ' AND `install_targets`.`name` NOT IN ("base","base-devel");\n'
} | \
mysql_run_query | \
while read -r id path; do
>&2 printf '.'
infos=$(
curl -Ss "https://pkgapi.archlinux32.org/$path"
) || \
continue
printf '%s\n' "${infos}" | \
sed '
s/^.*"Requires":\("[^"]\+"\|\[[^][]\+\]\).*$/\1/
t
d
' | \
tr '"[],' '\n' | \
grep -vxF '' | \
sed 's/^/'"${id}"'\t/'
printf '%s\tbase\n' "${id}"
done > \
"${deps_file}"
# shellcheck disable=2016
{
printf 'CREATE TEMPORARY TABLE `deps`('
printf '`bp` BIGINT,'
printf '`dep` VARCHAR(128),'
printf 'UNIQUE KEY `content`(`bp`,`dep`));\n'
printf 'LOAD DATA LOCAL INFILE "%s" INTO TABLE `deps`(`bp`,`dep`);\n' \
"${deps_file}"
printf 'CREATE TEMPORARY TABLE `bps`('
printf '`bp` BIGINT,'
printf 'UNIQUE KEY `bp`(`bp`));\n'
printf 'INSERT IGNORE INTO `bps`(`bp`)'
printf ' SELECT `deps`.`bp`'
printf ' FROM `deps`;\n'
if [ $# -eq 1 ] && [ "$1" = '-f' ]; then
printf 'DELETE `dependencies`'
else
printf 'SELECT *'
fi
printf ' FROM `bps`'
printf ' JOIN `dependencies`'
printf ' ON `dependencies`.`dependent`=`bps`.`bp`'
mysql_join_dependencies_dependency_types
printf ' AND `dependency_types`.`relevant_for_binary_packages`'
printf ' AND `dependency_types`.`relevant_for_building`'
mysql_join_dependencies_install_targets
printf ' AND `install_targets`.`name` NOT IN ("base","base-devel")'
printf ' LEFT JOIN `deps`'
printf ' ON `deps`.`dep`=`install_targets`.`name`'
printf ' AND `deps`.`bp`=`dependencies`.`dependent`'
printf ' WHERE `deps`.`dep` IS NULL;\n'
} | \
mysql_run_query
|