blob: 119f41d88196e7ca7a809d19ccea0774454fcdc5 (
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
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
89
90
|
#!/bin/bash
# check for packages that need to be built, and build a list in the proper build order
# Details:
# https://github.com/archlinux32/builder/wiki/Build-system#get-package-updates
set -e
lock_file="/tmp/get-package-updates.lock"
# TODO:
# include repository of package customizations
declare -A repo_paths
repo_paths["packages"]="/usr/src/archlinux/packages"
repo_paths["community"]="/usr/src/archlinux/community"
base_dir="$(dirname "$(readlink -f "$0")")/.."
# Create a lock file for build list.
exec 9>"${lock_file}"
flock -n 9 || exit
# Update git repositories (official packages, community packages and the repository of package customizations).
for repo in "${repo_paths[@]}"; do
git -C "${repo}" pull
done
# Read previous git revision numbers from files.
declare -A old_repo_revisions
for repo in "${!repo_paths[@]}"; do
old_repo_revisions["${repo}"]="$(cat ${base_dir}/work/${repo}.revision)"
done
# Check modified packages from the last update, and put them to the build list.
# If a package is updated, but already on the rebuild list, then just update the git revision number.
# If a package is deleted, remove from the rebuild list, and add it to the deletion list.
# If a new package is added, then ensure that it's not on the deletion list.
for repo in "${!repo_paths[@]}"; do
current_HEAD="$(
git -C "${repo_paths["${repo}"]}" rev-parse HEAD
)"
git -C "${repo_paths["${repo}"]}" diff --name-status "${old_repo_revisions["${repo}"]}" HEAD | \
grep '^.\s[^/]\+/repos/[^/]\+/PKGBUILD$' | \
sed 's|^\(.\)\t\([^/]\+\)/repos/\([^/]\+\)-[^/-]\+/PKGBUILD$|\1 \2 '"${current_HEAD}"' \3|' | \
grep -v '\(staging\|testing\)$'
done | \
sort -u | \
while read -r mode package git_revision repository; do
case "${mode}" in
"A"|"M")
sed -i "/^${package} /d" "${base_dir}/work/build-list"
echo "${package} ${git_revision} ${repository}" >> \
"${base_dir}/work/build-list"
sed -i "/^${package}/d" "${base_dir}/work/deletion-list"
;;
"D")
echo "${package}" >> \
"${base_dir}/work/deletion-list"
sed -i "/^${package} /d" "${base_dir}/work/build-list"
;;
*)
>&2 echo "unknown git diff mode '${mode}'"
exit 1
;;
esac
done
# TODO:
# Put the list in the proper build order.
# Write the current git revision numbers to files.
for repo in "${!repo_paths[@]}"; do
git -C "${repo_paths["${repo}"]}" rev-parse HEAD > \
"${base_dir}/work/${repo}.revision"
done
# Remove the lock file
rm -f "${lock_file}"
|