In commit 27ff286ee78eb2faac803e3ef67f3171ddfa0098, we moved from
sourcing the primary cachedir via /etc/pacman.conf, to using the
pacman.conf in the workdir. One unanticipated side effect of this was
breaking the special host mirrors magic we used to turn a host mirror
into a cachedir. It was still processed as a server, but we relied on it
being in the host's cachedirs in order to be persisted, and this no
longer occurred.

Solve this by explicitly adding each host mirror root as a cachedir.

Signed-off-by: Eli Schwartz <eschwa...@archlinux.org>
---
 arch-nspawn.in | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/arch-nspawn.in b/arch-nspawn.in
index 5817143..90fe967 100644
--- a/arch-nspawn.in
+++ b/arch-nspawn.in
@@ -99,7 +99,14 @@ build_mount_args() {
 copy_hostconf () {
        unshare --fork --pid gpg --homedir "$working_dir"/etc/pacman.d/gnupg/ 
--no-permission-warning --quiet --batch --import --import-options 
import-local-sigs "$(pacman-conf GpgDir)"/pubring.gpg >/dev/null 2>&1
        pacman-key --gpgdir "$working_dir"/etc/pacman.d/gnupg/ --import-trustdb 
"$(pacman-conf GpgDir)" >/dev/null 2>&1
+
        printf 'Server = %s\n' "${host_mirrors[@]}" 
>"$working_dir/etc/pacman.d/mirrorlist"
+       for host_mirror in "${host_mirrors[@]}"; do
+               if [[ $host_mirror == *file://* ]]; then
+                       host_mirror=$(echo "$host_mirror" | sed -r 
's#file://(/.*)/\$repo/os/\$arch#\1#g')
+                       in_array "$host_mirror" "${cache_dirs[@]}" || 
cache_dirs+=("$host_mirror")
+               fi
+       done
 
        [[ -n $pac_conf ]] && cp "$pac_conf" "$working_dir/etc/pacman.conf"
        [[ -n $makepkg_conf ]] && cp "$makepkg_conf" 
"$working_dir/etc/makepkg.conf"
-- 
2.24.0

Reply via email to