#!/bin/bash if [ $# -eq 2 ]; then cd "${1}" if [ ! -f '.SRCINFO' ] || [ "$(stat -c%Y PKGBUILD)" -gt "$(stat -c%Y .SRCINFO)" ]; then makepkg --printsrcinfo > .SRCINFO fi sed ' /^\S/ b /^\s\+\(arch\|epoch\|pkgver\|pkgrel\) = \S/ b /^$/ b d ' '.SRCINFO' \ > "${2}" all=$( sed -n ' /^pkgbase = /,/^$/ { /^\s/ p } ' "${2}" \ | sed ' $! s/$/\\/ ' ) all_noarch=$( printf '%s\n' "${all}" \ | grep -v '^\sarch = ' \ | sed ' $ s/\\$// ' ) sed -i ' /^pkgbase = /,/^$/ d /^pkgname = / { :a N /\n$/ ! ba /\n\sarch = / { a\ '"${all_noarch}"' b } a\ '"${all}"' } ' "${2}" sed -i ' /^\s*$/d ' "${2}" exit fi if [ $# -ne 0 ]; then >&2 echo 'usage error' >&2 printf '"%s" ' "$@" >&2 printf '\n' exit 1 fi if ! mountpoint -q /mnt/archlinuxewe \ && ! ls /mnt/archlinuxewe | grep -qF ''; then >&2 printf '/mnt/archlinuxewe is empty\n' exit 1 fi tmp_dir=$(mktemp -d) trap 'rm -rf --one-file-system "${tmp_dir}"' EXIT find "$(pwd)" -maxdepth 2 -mindepth 2 -name 'PKGBUILD' -type f \ | sed -n ' s@/[^/]\+$@@ T s@/[^/]\+$@\0\n'"${tmp_dir%/}"'\0.srcinfo@ T p ' \ | parallel -j0 -L2 "$0" print_names() { if [ -z "${pkgname}" ] \ || [ -z "${pkgver}" ] \ || [ -z "${pkgrel}" ]; then >&2 echo 'error: some variable is missing' exit 1 fi for arch in "${archs[@]}"; do printf '%s-%s%s-%s-%s.pkg.tar.xz\n' \ "${pkgname}" \ "${epoch:+${epoch}:}" \ "${pkgver}" \ "${pkgrel}" \ "${arch}" done } diff -u --color <( find /mnt/archlinuxewe -type f -name '*.pkg.tar.xz' -printf '%f\n' \ | sort -u ) <( find "$tmp_dir" -name '*.srcinfo' -exec cat {} + \ | { while read key eq value; do if [ "x${eq}" != 'x=' ]; then >&2 echo "syntax error" exit 1 fi case "${key}" in 'pkgname') if [ -n "${pkgname}" ]; then print_names fi archs=() pkgname="${value}" unset epoch unset pkgver unset pkgrel ;; 'arch') archs+=("${value}") ;; 'epoch') epoch="${value}" ;; 'pkgver') pkgver="${value}" ;; 'pkgrel') pkgrel="${value}" ;; *) >&2 printf 'unknown key "%s"\n' "${key}" exit 1 ;; esac done if [ -n "${pkgname}" ]; then print_names fi } \ | sort -u )