[devtools,2/4] arch-nspawn: simplify cachedir/host_mirror parsing

Message ID 20191105234047.1842520-2-eschwartz@archlinux.org
State Accepted, archived
Headers show
Series [devtools,1/4] arch-nspawn: restore cachedir handling for host_mirrors | expand

Commit Message

Emil Velikov via arch-projects Nov. 5, 2019, 11:40 p.m. UTC
consolidate logic flows in the same area for parsing and building
arrays. Don't bother having a special function just to build the
mount_args array, since we now use the same handling for adding any
cachedir (including host mirrors) to the mount arguments, this becomes a
trivial for loop -- and it really did not need to be delayed until after
the sanity check, anyway.

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
---
 arch-nspawn.in | 36 +++++++++++++-----------------------
 1 file changed, 13 insertions(+), 23 deletions(-)

Patch

diff --git a/arch-nspawn.in b/arch-nspawn.in
index 90fe967..7aa6fd6 100644
--- a/arch-nspawn.in
+++ b/arch-nspawn.in
@@ -20,6 +20,7 @@  umask 0022
 working_dir=''
 
 files=()
+mount_args=()
 
 usage() {
 	echo "Usage: ${0##*/} [options] working-dir [systemd-nspawn arguments]"
@@ -65,6 +66,13 @@  fi
 # shellcheck disable=2016
 host_mirrors=($($pacconf_cmd --repo extra Server 2> /dev/null | sed -r 's#(.*/)extra/os/.*#\1$repo/os/$arch#'))
 
+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
+
 while read -r line; do
 	mapfile -t lines < <($pacconf_cmd --config "${pac_conf:-$working_dir/etc/pacman.conf}" \
 		--repo $line Server | sed -r 's#(.*/)[^/]+/os/.+#\1$repo/os/$arch#')
@@ -78,35 +86,18 @@  while read -r line; do
 	fi
 done < <($pacconf_cmd --config "${pac_conf:-$working_dir/etc/pacman.conf}" --repo-list)
 
-# {{{ functions
-build_mount_args() {
-	declare -g mount_args=()
-
-	for host_mirror in "${host_mirrors[@]}"; do
-		if [[ $host_mirror == *file://* ]]; then
-			host_mirror_path=$(echo "$host_mirror" | sed -r 's#file://(/.*)/\$repo/os/\$arch#\1#g')
-			mount_args+=("--bind-ro=${host_mirror_path//:/\\:}")
-		fi
-	done
-
-	mount_args+=("--bind=${cache_dirs[0]//:/\\:}")
+mount_args+=("--bind=${cache_dirs[0]//:/\\:}")
 
-	for cache_dir in "${cache_dirs[@]:1}"; do
-		mount_args+=("--bind-ro=${cache_dir//:/\\:}")
-	done
-}
+for cache_dir in "${cache_dirs[@]:1}"; do
+	mount_args+=("--bind-ro=${cache_dir//:/\\:}")
+done
 
+# {{{ functions
 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"
@@ -130,7 +121,6 @@  elif [[ $(cat "$working_dir/.arch-chroot") != "$CHROOT_VERSION" ]]; then
 	die "chroot '%s' is not at version %s. Please rebuild." "$working_dir" "$CHROOT_VERSION"
 fi
 
-build_mount_args
 copy_hostconf
 
 eval "$(grep -a '^CARCH=' "$working_dir/etc/makepkg.conf")"