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

Attachment: pgpvteCpoQjrB.pgp
Description: PGP signature



Reply via email to