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 <[email protected]>
> 
> 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
> > 

Reply via email to