diff options
Diffstat (limited to 'bin/seed-build-list')
-rwxr-xr-x | bin/seed-build-list | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/bin/seed-build-list b/bin/seed-build-list new file mode 100755 index 0000000..436721b --- /dev/null +++ b/bin/seed-build-list @@ -0,0 +1,147 @@ +#!/bin/sh + +# seed the build list from differences between an x86_64 and our master mirror + +. "${0%/*}/../conf/default.conf" + +if [ $# -ne 1 ]; then + >&2 echo 'usage: seed-build-list http://x86_64.mirror.archlinux.org/' + exit 1 +fi + +repos='core community extra gnome-unstable kde-unstable' + +tmp_dir="$(mktemp -d)" +trap "rm -rf --one-file-system '${tmp_dir}'" EXIT + +for repo in ${repo_names}; do + if [ "${repo_names}" = 'archlinux32' ]; then + continue + fi + eval 'repo_path="${repo_paths__'"${repo}"'}"' + git -C "${repo_path}" archive origin/master | \ + tar -t | \ + grep '^[^/]\+/repos/[^/]\+/PKGBUILD$' | \ + grep -v -- '-i686/PKGBUILD$' | \ + grep -v '\(staging\|testing\)$' | \ + sed ' + s|^\([^/]\+\)/repos/\([^/]\+\)-[^/-]\+/PKGBUILD$|\1 \2| + ' +done | \ + sort -k1,1 > \ + "${tmp_dir}/known_packages" + +( + # theirs + for repo in ${repos}; do + curl -sS "$1/${repo}/os/x86_64/${repo}.db.tar.gz" | \ + tar -tz + done | \ + grep '/$' | \ + sed ' + s|/$|| + s|^\(.*\)-\([^-]\+-[^-]\+\)|theirs \1-\2 \2 \1| + ' + + # ours + for repo in $(ls_master_mirror 'i686'); do + ls_master_mirror "i686/$repo" | \ + grep '\.pkg\.tar\.xz$' | \ + sed 's|-[^-]\+$||' + done | \ + sed ' + s|^\(.*\)-\([^-]\+-[^-]\+\)|ours \1-\2 \2 \1| + ' + ) | \ + sort -k4,4 -k3Vr,3 -k1,1 | \ + uniq -f3 | \ + grep '^theirs ' | \ + awk '{print $4}' | \ + sort -k1,1 > \ + "${tmp_dir}/delta_packages" + +join -j1 "${tmp_dir}/delta_packages" "${tmp_dir}/known_packages" > \ + "${tmp_dir}/append_packages" + +( + awk '{print $1}' "${tmp_dir}/append_packages" + cat "${tmp_dir}/delta_packages" +) | \ + sort | \ + uniq -u | \ + sponge "${tmp_dir}/delta_packages" + +while read -r pkg; do + success=false + for arch in x86_64 any; do + pkgbase="$( + curl -sS "https://www.archlinux.org/packages/community/x86_64/${pkg}/" | \ + sed -n ' + /Base Package:/{ + :a + N + s|</tr>.*$|| + Ta + p + } + ' | \ + tr '<>' '\n' | \ + grep '^a href="' | \ + sed ' + s|^a href="|| + s|".*|| + s|/$|| + s|^.*/|| + ' + )" + if [ -n "${pkgbase}" ]; then + echo "${pkgbase}" >> \ + "${tmp_dir}/delta_pkgbases" + success=true + break + fi + done + if ! ${sucess}; then + echo "${pkg}" + fi +done < \ + "${tmp_dir}/delta_packages" | \ + sponge "${tmp_dir}/delta_packages" + +sort -u "${tmp_dir}/delta_pkgbases" | \ + sponge "${tmp_dir}/delta_pkgbases" + +join -j1 "${tmp_dir}/delta_pkgbases" "${tmp_dir}/known_packages" >> \ + "${tmp_dir}/append_packages" + +sort -u "${tmp_dir}/append_packages" | \ + sponge "${tmp_dir}/append_packages" + +rm "${tmp_dir}/delta_pkgbases" + +if [ -s "${tmp_dir}/delta_packages" ]; then + echo 'There are still packages newer for x86_64 which I cannot identify :-/' + exit 2 +fi + +while read -r pkg repo; do + git_repo="$(find_git_repository_to_package_repository "${repo}")" + printf '%s %s %s %s\n' \ + "${pkg}" \ + "$(cat "${work_dir}/${git_repo}.revision")" \ + "$(cat "${work_dir}/archlinux32.revision")" \ + "${repo}" +done < \ + "${tmp_dir}/append_packages" | \ + awk '{print "append " $1 " " $2 " " $3 " " $4 " " $1}' > \ + "${tmp_dir}/build-list.append" + +awk '{print "old " $1 " " $2 " " $3 " " $4 " " $1}' "${work_dir}/build-list" > \ + "${tmp_dir}/build-list.old" + +cat "${tmp_dir}/build-list.append" "${tmp_dir}/build-list.old" | \ + sort -k6,6 | \ + uniq -uf5 | \ + grep '^append ' | \ + awk '{print $2 " " $3 " " $4 " " $5}' > \ + "${work_dir}/build-list.new" |