[pacman-dev] bash-3 only error trap activation
allan at archlinux.org
Mon Jun 21 20:03:56 EDT 2010
On 22/06/10 03:42, Andres P wrote:
> On Mon, Jun 21, 2010 at 1:06 AM, Allan McRae<allan at archlinux.org> wrote:
>> pmout=$(run_pacman -T "$@")<- HERE
>> The first one gets set off anytime "depends" or "makedepends" are empty and
>> can be fixed by using "|| return 0", but the second is doing my head in...
>> Of course, turning off the error trap around those commands makes it work,
>> and that may be an OK approach given we are dealing with all error states
>> below that.
> pmout=$(run_pacman -T "$@") || ret=$?
> Using || after the asigment will prevent setting the err trap.
Of course I tried that... It does not work:
==> Making package: pacman-contrib 3.4.0-1 (Tue Jun 22 08:46:58 EST 2010)
==> Checking Runtime Dependencies...
==> 127 ($ret value from within run_pacman)
==> ERROR: An unknown error has occurred. Exiting...
==> 1 ($ret value after "|| ret=$?")
==> ERROR: 'pacman' returned a fatal error (1): pacman>4
(wrong return value so wrong error message)
I looks like in bash-3.2 the following happens. run_pacman returns 127
which sets off the error trap. Then the assignment fails which sets of
another error trap. The use of "|| ret=$?" prevents the assignment
failure error but now there is the wrong return value.
> Funny how you noticed the first, because I was about to submit a patch
> that did not return false if there were no arguments.
> In reality though, it should be this:
> [[ $@ ]] || return 0
> Because (( $# )) will not count emtpy arguments.
> If check_deps is passed quoted arguments that expand to nothing, it
> will malfunction.
I think that if check_deps is passed empty arguments, then there is not
dependencies to check and it should just return.
More information about the pacman-dev