From 2ad7fefadbe2b4d2dee0c6c1bc9db57dacc4c7a8 Mon Sep 17 00:00:00 2001
From: Christian Heusel <christian@heusel.eu>
Date: Wed, 2 Aug 2023 12:33:59 +0200
Subject: [PATCH] dbscripts: fix createlinks for filenames that contain spaces

So far the for loop recognized filenames with spaces as different words:

$ for f in $(find pkg -type f); do echo "$f"; done
pkg/usr/bin/Surge
XT
Effects
pkg/usr/bin/Surge
XT

While the correct output here would have been:
pkg/usr/bin/Surge XT Effects
pkg/usr/bin/Surge XT

We fix this by just passing everything directly to readelf, which also
removes the loop overhead. This results in a significant speedup for
packages with a lot of libraries and binaries.

fixes: https://gitlab.archlinux.org/archlinux/infrastructure/-/issues/524
Co-Authored-By: Evangelos Foutras <evangelos@foutras.com>
---
 roles/dbscripts/files/createlinks | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/roles/dbscripts/files/createlinks b/roles/dbscripts/files/createlinks
index cc99f0f0a..6388149ca 100755
--- a/roles/dbscripts/files/createlinks
+++ b/roles/dbscripts/files/createlinks
@@ -44,9 +44,7 @@ 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 -exec readelf -d {} + 2>/dev/null | sed -nr 's/.*Shared library: \[(.*)\].*/\1/p' | sort -u > "${tmppkgdir}/links"
 				rm -rf ${tmppkgdir}/pkg
  			fi
 		done
-- 
GitLab