Subject: Re: [PATCHv2 02/11] git-p4: test debug macro

From: Pete Wyckoff <[email-masked]>
Date: Sun, 18 Dec 2011 08:50:47 -0500

[email-masked] wrote on Sat, 17 Dec 2011 21:26 -0600:
> Pete Wyckoff wrote:
> 
> > +	# 2 is SIGINT, ash/dash does not know symbolic names
> > +	trap echo 2
> 
> 'trap "$cmd" INT' works, and it's even in POSIX. ;)
> http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#trap

Nice!  But ash/dash handle subshell INT differently.  With ash,
the entire test exits after the ctrl-C, even if caught by a trap in a
subshell.  Not so nice.  Here's a demonstration.

-----------8<-------------
# shell top.sh
echo top.sh
$SHELL trap.sh
echo top.sh: exit status from trap.sh: $?
echo top.sh: exiting
exit 0
-----------8<-------------

-----------8<-------------
# shell trap.sh
echo trap.sh
trap "echo trap.sh caught INT" INT
sleep 3600
trap - INT
echo trap.sh: exiting
exit 0
-----------8<-------------

Run "bash top.sh".  Hit ctrl-c, you'll see:

    $ bash top.sh
    top.sh
    trap.sh
    ^Ctrap.sh caught INT
    trap.sh: exiting
    top.sh: exit status from trap.sh: 0
    top.sh: exiting

Similarly with "ash top.sh":

    $ ash top.sh
    top.sh
    trap.sh
    ^Ctrap.sh caught INT
    trap.sh: exiting

The top-level script also gets the ctrl-c, but exits on the INT
anyway, after reaping its child.  I can't find where POSIX says
if this is correct or not.  It isn't how I want it to work here.

I'll add a comment above debug() to explain that it works in bash
but not ash.  At least it prints out the P4 environment
information needed to debug.

		-- Pete