From cd0fd812d53c3f06591a30d1c8391431c9411636 Mon Sep 17 00:00:00 2001 From: Christian Heusel <christian@heusel.eu> Date: Wed, 2 Aug 2023 12:33:59 +0200 Subject: [PATCH] dbscrips: make createlinks also work if filename contains spaces This addresses the problem that so far the for loop recognizes each filename with a space as different word, i.e.: $ for f in $(find pkg.1 -type f); do echo "$f"; done pkg.1/usr/bin/Surge XT Effects pkg.1/usr/bin/Surge XT while output would have been: pkg.1/usr/bin/Surge XT Effects pkg.1/usr/bin/Surge XT We fix this by explictly passing each find result as its own variable. fixes https://gitlab.archlinux.org/archlinux/infrastructure/-/issues/524 Signed-off-by: Christian Heusel <christian@heusel.eu> --- roles/dbscripts/files/createlinks | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/roles/dbscripts/files/createlinks b/roles/dbscripts/files/createlinks index cc99f0f0a..a09d367b5 100755 --- a/roles/dbscripts/files/createlinks +++ b/roles/dbscripts/files/createlinks @@ -44,9 +44,10 @@ for repo in ${repos[@]}; do echo "$repo/$arch: $pkgname" mkdir -p ${tmppkgdir}/pkg bsdtar -xof $pkg -C ${tmppkgdir}/pkg --include={opt,{,usr/}{lib{,32},{s,}bin}}'/*' 2>/dev/null - for f in $(find ${tmppkgdir}/pkg -type f); do - readelf -d "$f" 2> /dev/null | sed -nr 's/.*Shared library: \[(.*)\].*/\1/p' - done | sort -u > ${tmppkgdir}/links + find "${tmppkgdir}/pkg" -type f -print0 | + while IFS= read -r -d '' file; do + readelf -d "$file" 2> /dev/null | sed -nr 's/.*Shared library: \[(.*)\].*/\1/p' + done | sort -u > "${tmppkgdir}/links" rm -rf ${tmppkgdir}/pkg fi done -- GitLab