[pacman-dev] bash-3 only error trap activation
Andres P
aepd87 at gmail.com
Mon Jun 21 20:37:35 EDT 2010
On Mon, Jun 21, 2010 at 7:33 PM, Allan McRae <allan at archlinux.org> wrote:
> 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.
>
This is not what anybody wants to hear, but currently the ERR trap that
everything inherits thanks to set -E is just a place holder for a traceback.
Echoing "unrecognized error" isn't helpful at all, and if this is one of the
items that is holding back bash 3.2 compat, then its inclusion should be
reconsidered.
Since trap_exit's symlink cleanup is actually useful, it would be merged to
trap 0, aka clean_up, because it triggers on every signal except kill -9.
This would also shorten other trap definitions.
>> 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.
>
Currently a coincidence with no design consideration; deplist is
unquoted and depends is handled like a unquoted array (see line 1892). What's
the point of using arrays and not quoting them? If arrays get treated as
scalars, then there's no telling if at any point a certain var needs special
consideration or not.
If deplist becomes an array, as it should since there is no reason to not quote
depends and makedepends, then check_deps needs a string check via [[ $@ ]].
Basically, anything that can be quoted, should be. That way you don't have to
hear about bugs with depends arrays with spaces and other special shell
characters, like redirection operators, 6 months from now.
Remember $startdir/4? This could have been prevented with quoting out of
practice, specially for su since its arguments are parsed just like eval's are.
And depends is where you get '>' and '<'...
Andres P
More information about the pacman-dev
mailing list