[pacman-dev] [PATCH] makepkg: fix error on unnecessary -r

Dave Reisner d at falconindy.com
Sun Jan 22 21:13:26 EST 2012


On Mon, Jan 23, 2012 at 12:08:14PM +1000, Allan McRae wrote:
> On 20/01/12 23:59, Dave Reisner wrote:
> > On Fri, Jan 20, 2012 at 11:24:23PM +1000, Allan McRae wrote:
> >> The grep statement used to check for a difference between the
> >> installed package list before and after resolving dependencies
> >> returns 1 if there is no difference.  This sets of the error
> >> trap when "-r" is used "unnecessarily".
> >>
> >> Signed-off-by: Allan McRae <allan at archlinux.org>
> >> ---
> >>
> >> Dave: would you prefer this fix or just using $(set +E; grep ...)
> >>
> >>  scripts/makepkg.sh.in |    7 ++++---
> >>  1 files changed, 4 insertions(+), 3 deletions(-)
> >>
> >> diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
> >> index f6d8294..4792c5c 100644
> >> --- a/scripts/makepkg.sh.in
> >> +++ b/scripts/makepkg.sh.in
> >> @@ -507,14 +507,15 @@ remove_deps() {
> >>  	# check for packages removed during dependency install (e.g. due to conflicts)
> >>  	# removing all installed packages is risky in this case
> >>  	if [[ -n $(grep -xvFf <(printf '%s\n' "${current_packagelist[@]}") \
> >> -			<(printf '%s\n' "${original_packagelist[@]}") ) ]]; then
> >> +			<(printf '%s\n' "${original_packagelist[@]}") || true) ]]; then
> >>  		warning "$(gettext "Failed to remove installed dependencies.")"
> >>  		return 0
> >>  	fi
> > 
> > I'd prefer we fix the need for this hackery and not embed grep inside a
> > test.
> > 
> > if grep -qxvFf <(...) <(...); then
> > 
> > grep exits 0 when output is generated, and we can throw the warning.
> > Since it's guarded by an 'if' block, there's no need to worry about it
> > "failing" setting off the ERR trap.
> > 
> 
> Made this change on my working branch.
> 
> >>  
> >>  	local deplist
> >> -	if ! deplist=($(grep -xvFf <(printf "%s\n" "${original_pkglist[@]}") \
> >> -			<(printf "%s\n" "${current_pkglist[@]}"))); then
> >> +	deplist=($(grep -xvFf <(printf "%s\n" "${original_pkglist[@]}") \
> >> +			<(printf "%s\n" "${current_pkglist[@]}") || true))
> >> +	if [[ -n deplist ]]; then
> > 
> > My brain tells me there's a way to avoid this, but I'm not sure I trust
> > it right now.
> > 
> 
> I have not thought of one...  let me know if your brain is working
> better now and has come up with the answer!
> 
> Allan
> 
> 

What about something like...

  local dep deplist
  while read -r dep; do
    deplist+=("$dep")
  done < <(grep -xvFf <(printf "%s\n" "${original_pkglist[@]}") \
      <(printf "%s\n" "${current_pkglist[@]}"))

  if (( ${#deplist[*]} )); then
    return
  fi

d
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 490 bytes
Desc: not available
URL: <http://mailman.archlinux.org/pipermail/pacman-dev/attachments/20120122/845a03b3/attachment.asc>


More information about the pacman-dev mailing list