summaryrefslogtreecommitdiff
path: root/bin/get-package-updates
blob: 1b95d7b10087d4f15a6e59ba6137a081ec13ec70 (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

# 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

# TODO:
#  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.

# 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

rm -f "${lock_file}"