summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEli Schwartz <eschwartz@archlinux.org>2019-12-16 19:27:27 -0500
committerLevente Polyak <anthraxx@archlinux.org>2020-02-27 14:50:19 +0100
commite963b6da9e2c0aa82a0b80a5b6bfe7294561734f (patch)
treebc15039413ea7f2a0cd7ff4b8bddf737da2d3b46
parentb2cbb8628eba3f64207c6d60f8b57ce023599000 (diff)
downloaddevtools-e963b6da9e2c0aa82a0b80a5b6bfe7294561734f.tar.xz
makechrootpkg: use the chroot database to find checkpkg packages
We don't want to check against the current version known to the host system, because that will be incorrect in a wide variety of situations, including: - the build host hasn't done a full system upgrade yet - we're building against staging, and want to see the delta between different staging versions - we're building against extra, but the host runs testing which carries changes we don't want to visualize right now - the chroot has a configured database not available to the host, and the package is only available there Essentially, it's rarely 100% correct to run checkpkg on the host, but we already have a database we *know* is correct, and that is the one we just built the package against. So let's use that. This also fixes a bug in the current logic, where in order to try downloading fresh databases, we work in a non-cached temporary working database to download the package files, but then let checkpkg default to comparing packages in the system database. Since we are explicitly trying to compare against packages that differ from the host's pacman database, we need to pass the package files as options to checkpkg, using the additional modes added in commit c14338c0fe71a74f5e56b4f3af7c548fe0928e15 Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
-rw-r--r--makechrootpkg.in32
1 files changed, 14 insertions, 18 deletions
diff --git a/makechrootpkg.in b/makechrootpkg.in
index dfea18c..bfa69be 100644
--- a/makechrootpkg.in
+++ b/makechrootpkg.in
@@ -366,11 +366,7 @@ if arch-nspawn "$copydir" \
"${bindmounts_ro[@]}" "${bindmounts_rw[@]}" \
/chrootbuild "${makepkg_args[@]}"
then
- pkgnames=()
- for pkgfile in "$copydir"/pkgdest/*; do
- pkgfile=${pkgfile##*/};
- pkgnames+=("${pkgfile%-*-*-*}");
- done
+ mapfile -t pkgnames < <(sudo -u "$makepkg_user" bash -c 'source PKGBUILD; printf "%s\n" "${pkgname[@]}"')
move_products
else
(( ret += 1 ))
@@ -388,29 +384,29 @@ else
if (( run_checkpkg )); then
msg "Running checkpkg"
- # sync off-site databases for up-to-date queries
- trap 'rm -rf $dbpath; cleanup' EXIT INT TERM QUIT
- dbpath=$(mktemp -d --tmpdir makechrootpkg-database.XXXXXXXXXX)
- mkdir -p "$dbpath"
- pacman -Sy --dbpath "$dbpath" --logfile /dev/null
+ mapfile -t remotepkgs < <(pacman --config "$copydir"/etc/pacman.conf \
+ --dbpath "$copydir"/var/lib/pacman \
+ -Sddp "${pkgnames[@]}")
- # query current package locations
- remotepkgs=($(pacman -Sddp --dbpath "$dbpath" --logfile /dev/null "${pkgnames[@]}"))
- if (( $? )); then
+ if ! wait $!; then
warning "Skipped checkpkg due to missing repo packages"
exit 0
fi
# download package files if any non-local location exists
for remotepkg in "${remotepkgs[@]}"; do
- [[ $remotepkg == file://* ]] && continue
- msg2 "Downloading current versions"
- pacman --noconfirm -Swdd --dbpath "$dbpath" --logfile /dev/null "${pkgnames[@]}"
- break
+ if [[ $remotepkg != file://* ]]; then
+ msg2 "Downloading current versions"
+ arch-nspawn "$copydir" pacman --noconfirm -Swdd "${pkgnames[@]}"
+ mapfile -t remotepkgs < <(pacman --config "$copydir"/etc/pacman.conf \
+ --dbpath "$copydir"/var/lib/pacman \
+ -Sddp "${pkgnames[@]}")
+ break
+ fi
done
msg2 "Checking packages"
- sudo -u "$makepkg_user" checkpkg --rmdir --warn
+ sudo -u "$makepkg_user" checkpkg --rmdir --warn "${remotepkgs[@]/#file:\/\//}"
fi
true
fi