[pacman-dev] [PATCH 2/2] Append '-$arch' to 'installed' array in .BUILDINFO

Dave Reisner d at falconindy.com
Tue May 15 14:46:15 UTC 2018


On Sun, Mar 18, 2018 at 11:40:53AM +1000, Allan McRae wrote:
> 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 at 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?
> 

Answer: run_pacman calls sudo, which means that a bare 'makepkg' will
require elevated privileges.

> > +		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
> > 


More information about the pacman-dev mailing list