summaryrefslogtreecommitdiff
path: root/bin/get-package-updates
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2017-06-15 15:20:39 +0200
committerErich Eckner <git@eckner.net>2017-06-15 15:20:39 +0200
commit5b49e70d5606f36667a55291d5345e95d42674fd (patch)
treec4b7ea9958c2cc4a7300d318b5386e9b8db6d1b6 /bin/get-package-updates
parent2c4bd582619e6ab73d613b000128886232dbafc9 (diff)
downloadbuilder-5b49e70d5606f36667a55291d5345e95d42674fd.tar.xz
removed all bashisms - should work in any POSIX shell, now
Diffstat (limited to 'bin/get-package-updates')
-rwxr-xr-xbin/get-package-updates62
1 files changed, 32 insertions, 30 deletions
diff --git a/bin/get-package-updates b/bin/get-package-updates
index 09f2958..b78187e 100755
--- a/bin/get-package-updates
+++ b/bin/get-package-updates
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/sh
# check for packages that need to be built, and build a list in the proper build order
# Details:
@@ -71,36 +71,35 @@ fi
delete_package() {
echo "$1" >> \
"${work_dir}/deletion-list.new"
- sed -i "/^${1//./\\.} /d" "${work_dir}/build-list.new"
+ sed -i "/^$(str_to_regex "${1}") /d" "${work_dir}/build-list.new"
}
# Update git repositories (official packages, community packages and the repository of package customizations).
-for repo in "${repo_paths[@]}"; do
+for repo in ${repo_names}; do
+ eval repo_path='$repo_paths__'"${repo}"
# TODO:
# this is somewhat redundant and slow -- improve it!
- git -C "${repo}" checkout -f master
- git -C "${repo}" clean -xdf
- git -C "${repo}" fetch
+ git -C "${repo_path}" checkout -f master
+ git -C "${repo_path}" clean -xdf
+ git -C "${repo_path}" fetch
if ${pull}; then
- git -C "${repo}" reset --hard origin/master
+ git -C "${repo_path}" reset --hard origin/master
fi
done
# Read previous git revision numbers from files.
-declare -A old_repo_revisions
-declare -A new_repo_revisions
-
-for repo in "${!repo_paths[@]}"; do
- old_repo_revisions["${repo}"]="$(
+for repo in ${repo_names}; do
+ eval "old_repo_revisions__${repo}='$(
cat "${work_dir}/${repo}.revision" 2> /dev/null || \
echo NONE
- )"
- new_repo_revisions["${repo}"]="$(
- git -C "${repo_paths["${repo}"]}" rev-parse HEAD | \
+ )'"
+ eval repo_path='$repo_paths__'"${repo}"
+ eval "new_repo_revisions__${repo}='$(
+ git -C "${repo_path}" rev-parse HEAD | \
tee "${work_dir}/${repo}.revision.new"
- )"
+ )'"
done
# Create a lock file for build list.
@@ -125,15 +124,18 @@ cp \
"${work_dir}/deletion-list" \
"${work_dir}/deletion-list.new"
-for repo in "${!repo_paths[@]}"; do
+for repo in ${repo_names}; do
+ eval repo_path='$repo_paths__'"${repo}"
+ eval old_repo_revision='$old_repo_revisions__'"${repo}"
+ eval new_repo_revision='$new_repo_revisions__'"${repo}"
(
# if old revision unknown, mimic "git diff"-output
- if [ "${old_repo_revisions["${repo}"]}" = "NONE" ]; then
- git -C "${repo_paths["${repo}"]}" archive --format=tar HEAD | \
+ if [ "${old_repo_revision}" = "NONE" ]; then
+ git -C "${repo_path}" archive --format=tar HEAD | \
tar -t | \
sed 's|^|A\t|'
else
- git -C "${repo_paths["${repo}"]}" diff --no-renames --name-status "${old_repo_revisions["${repo}"]}" HEAD
+ git -C "${repo_path}" diff --no-renames --name-status "${old_repo_revision}" HEAD
fi
) | \
# only track changes in PKGBUILDs
@@ -143,10 +145,12 @@ for repo in "${!repo_paths[@]}"; do
# to the one of an original source repository
sed 's|^\(.\t\)\([^/]\+\)/\([^/]\+\)/\(.\+\)$|\2 \1\3/repos/\2-x86_64/\4|' | \
while read -r pkg_repo rest; do
- echo "${new_repo_revisions["$(find_git_repository_to_package_repository "${pkg_repo}")"]} ${rest}"
+ printf '%s %s\n' \
+ "$(eval printf '$new_repo_revisions__%s' "$(find_git_repository_to_package_repository "${pkg_repo}")")" \
+ "${rest}"
done
else
- sed "s|^|${new_repo_revisions["${repo}"]} |"
+ sed "s|^|${new_repo_revision} |"
fi | \
grep '^\S\+ .\s[^/]\+/repos/[^/]\+/PKGBUILD$' | \
# ignore i686
@@ -161,10 +165,10 @@ done | \
# new or modified PKGBUILD
"A"|"M")
- sed -i "/^${package//./\\.} /d" "${work_dir}/build-list.new"
- echo "${package} ${git_revision} ${new_repo_revisions["archlinux32"]} ${repository}" >> \
+ sed -i "/^$(str_to_regex "${package}") /d" "${work_dir}/build-list.new"
+ echo "${package} ${git_revision} ${new_repo_revisions__archlinux32} ${repository}" >> \
"${work_dir}/build-list.new"
- sed -i "/^${package//./\\.}\$/d" "${work_dir}/deletion-list.new"
+ sed -i "/^$(str_to_regex "${package}")\$/d" "${work_dir}/deletion-list.new"
;;
# deleted PKGBUILD
@@ -205,7 +209,7 @@ echo 'apply blacklisting'
black_listed=''
black_listed_new="$(
- cat "${repo_paths["archlinux32"]}/blacklist"
+ cat "${repo_paths__archlinux32}/blacklist"
ls "${work_dir}/package-infos/" | \
grep '^lib32-.*\.depends' | \
sed '
@@ -324,11 +328,9 @@ fi
rm -rf --one-file-system "${work_dir}/build-list.loops"
(
- echo "build-list.loops" "build-list.new" "build-list" "deletion-list"
- echo "${!repo_paths[@]}" | \
- sed 's@\( \|$\)@.revision\1@g'
+ printf '%s\n' "build-list.loops" "build-list.new" "build-list" "deletion-list"
+ printf '%s.revision\n' ${repo_names}
) | \
- tr ' ' '\n' | \
while read -r file; do
mv "${work_dir}/${file}.new" "${work_dir}/${file}"
done