makepkg: optimize and fix BUILDINFO generation's use of awk
The biggest issue is directly supplying the data within the format string which can result in misinterpreting formatter sequences if a printed variable contains an "%" in it. This character is currently permitted in the pkgver field, though not in the pkgname. Also pacman/libalpm itself has much looser limitations and this can appear anywhere at all if a package was created by some other program. For the package "iambroke-1%s-1-any.pkg.tar.xz", installed in the build environment, the result is: -> Generating .BUILDINFO file... awk: cmd. line:3: (FILENAME=- FNR=1085) fatal: not enough arguments to satisfy format string `-1%s-1' ^ ran out for this one Followed by a .BUILDINFO which contains an LC_ALL=C sorted list of $pkgname-${epoch:+$epoch:}$pkgver-$pkgrel-$arch ending in: installed = iambroke Which is cut short, then fails to list the succeeding packages. The package itself successfully builds. It's also unnecessary to save the output of pacman -Qq in order to get the information for pacman -Qi, since the latter will, just like the former, return information for all installed packages if not given a package name(s). While I am at it, pipe this directly to awk rather than keeping a copy in an unnecessary local variable. This is slightly more efficient in addition to preventing the <<< herestring from re-interpreting the content of "$pkginfos" in ways that don't really matter for our usage. Signed-off-by: Eli Schwartz <eschwartz@archlinux.org> Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
parent
2d8a751943
commit
1a5f308d52
1 changed files with 4 additions and 6 deletions
|
@ -700,13 +700,11 @@ write_buildinfo() {
|
|||
write_kv_pair "buildenv" "${BUILDENV[@]}"
|
||||
write_kv_pair "options" "${OPTIONS[@]}"
|
||||
|
||||
local pkglist=($(run_pacman -Qq))
|
||||
local pkginfos="$(LC_ALL=C run_pacman -Qi ${pkglist[@]})"
|
||||
local pkginfos_parsed=($(awk -F': ' '\
|
||||
/^Name .*/ {printf $2} \
|
||||
/^Version .*/ {printf "-"$2} \
|
||||
local pkginfos_parsed=($(LC_ALL=C run_pacman -Qi | awk -F': ' '\
|
||||
/^Name .*/ {printf "%s", $2} \
|
||||
/^Version .*/ {printf "-%s", $2} \
|
||||
/^Architecture .*/ {print "-"$2} \
|
||||
' <<< "${pkginfos}"))
|
||||
'))
|
||||
|
||||
write_kv_pair "installed" "${pkginfos_parsed[@]}"
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue