On 18/03/18 07:24, Robin Broda wrote:
This patch incurs a **severe** performance degradation when generating the .BUILDINFO file, likely due to frequent usage of `pacman -Qi` and `grep -E`. I haven't found a faster way to gather this information.
Signed-off-by: Robin Broda <robin@broda.me>
I will comment on the utility of this patch in another email. This is just pointing out that it is broken...
--- doc/BUILDINFO.5.txt | 2 +- scripts/makepkg.sh.in | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/doc/BUILDINFO.5.txt b/doc/BUILDINFO.5.txt index 4734301e..2c74f9ff 100644 --- a/doc/BUILDINFO.5.txt +++ b/doc/BUILDINFO.5.txt @@ -61,7 +61,7 @@ BUILDINFO file format.
*installed (array)*:: The installed packages at build time including the version information of - the package. Formatted as "$pkgname-$pkgver-$pkgrel". + the package. Formatted as "$pkgname-$pkgver-$pkgrel-$pkgarch".
See Also -------- diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index ece53dca..10303417 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -694,8 +694,16 @@ write_buildinfo() { write_kv_pair "buildenv" "${BUILDENV[@]}" write_kv_pair "options" "${OPTIONS[@]}"
- local pkglist=($(run_pacman -Q | sed "s# #-#")) - write_kv_pair "installed" "${pkglist[@]}" + local pkglist=($(run_pacman -Qq)) + local installed=() + for pkg in "${pkglist[@]}" + do + pkginfo="$(pacman -Qi "${pkg}")"
What makes this call to pacman not need to use run_pacman like the others?
+ pkgver="$(grep -E '^Version' <<< "${pkginfo}" | tr -d ' ' | cut -d':' -f2-)" + pkgarch="$(grep -E '^Architecture' <<< "${pkginfo}" | tr -d ' ' | cut -d':' -f2-)"
Not every system runs in English...
+ installed+=("${pkg}-${pkgver}-${pkgarch}") + done + write_kv_pair "installed" "${installed[@]}" }
# build a sorted NUL-separated list of the full contents of the current