git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [Problem] test_must_fail makes possibly questionable assumptions about exit_code.

From
Ddemerphq <demerphq@gmail.com>
Date
Feb 28, 2018, 17:20 UTC
Message-ID
<CANgJU+U+3Lfj0w+8i-un_PO5xrnoaXvs4=BONM9BTDk2SC98vQ@mail.gmail.com>
In-Reply-To
<CANgJU+WFKqou=ZXcdr8V_ST=opHSBm9ksEVowxRB7o7DDEmuvg@mail.gmail.com>
On 28 February 2018 at 18:19, demerphq <demerphq@gmail.com> wrote:
Show 70 quoted lines
> On 28 February 2018 at 18:10, Randall S. Becker <rsbecker@nexbridge.com> wrote:
>> On February 28, 2018 11:46 AM, demerphq wrote:
>>> On 28 February 2018 at 08:49, Jeff King <peff@peff.net> wrote:
>>> > On Wed, Feb 28, 2018 at 07:42:51AM +0000, Eric Wong wrote:
>>> >
>>> >> > > >  a) We could override the meaning of die() in Git.pm.  This feels
>>> >> > > >     ugly but if it works, it would be a very small patch.
>>> >> > >
>>> >> > > Unlikely to work since I think we use eval {} to trap exceptions
>>> >> > > from die.
>>> >> > >
>>> >> > > >  b) We could forbid use of die() and use some git_die() instead (but
>>> >> > > >     with a better name) for our own error handling.
>>> >> > >
>>> >> > > Call sites may be dual-use: "die" can either be caught by an eval
>>> >> > > or used to show an error message to the user.
>>> >>
>>> >> <snip>
>>> >>
>>> >> > > >  d) We could wrap each command in an eval {...} block to convert the
>>> >> > > >     result from die() to exit 128.
>>> >> > >
>>> >> > > I prefer option d)
>>> >> >
>>> >> > FWIW, I agree with all of that. You can do (d) without an enclosing
>>> >> > eval block by just hooking the __DIE__ handler, like:
>>> >> >
>>> >> > $SIG{__DIE__} = sub {
>>> >> >   print STDERR "fatal: @_\n";
>>> >> >   exit 128;
>>> >> > };
>>> >>
>>> >> Looks like it has the same problems I pointed out with a) and b).
>>> >
>>> > You're right. I cut down my example too much and dropped the necessary
>>> > eval magic. Try this:
>>> >
>>> > -- >8 --
>>> > SIG{__DIE__} = sub {
>>> >   CORE::die @_ if $^S || !defined($^S);
>>> >   print STDERR "fatal: @_";
>>> >   exit 128;
>>> > };
>>>
>>> FWIW, this doesn't need to use CORE::die like that unless you have code that
>>> overrides die() or CORE::GLOBAL::die, which would be pretty unusual.
>>>
>>> die() within $SIG{__DIE__} is special cased not to trigger $SIG{__DIE__}
>>> again.
>>>
>>> Of course it doesn't hurt, but it might make a perl hacker do a double take
>>> why you are doing it. Maybe add a comment like
>>>
>>> # using CORE::die to armor against overridden die()
>>
>> The problem is actually in git code in its test suite that uses perl inline, not in my test code itself. The difficulty I'm having is placing this appropriate so that the signal handler gets used throughout the test suite including in the perl -e invocations. This is more a lack of my own understanding of plumbing of git test framework rather than of using or coding perl.
>
> Did you reply to the wrong mail?
>
> Create a file like:
>
> .../Git/DieTrap.pm
>
> which would look like  this:
>
> package Git::DieTrap;
> use strict;
> use warnings;
>
> SIG{__DIE__} = sub {
OOPs, that should read
$SIG{__DIE__} = sub {
sorry about that.
Show 25 quoted lines
>    CORE::die @_ if $^S || !defined($^S);
>    print STDERR "fatal: @_";
>    exit 128;
> };
>
> 1;
> __END__
>
> and then you would do:
>
> export PERL5OPT=-MGit::DieTrap
>
> before executing any tests. ANY use of perl from that point on will
> behave as though it has:
>
> use Git::DieTrap;
>
> at the top of the script, be it a -e, or any other way that Perl code
> is executed.
>
> cheers,
> Yves
>
> --
> perl -Mre=debug -e "/just|another|perl|hacker/"
-- 
perl -Mre=debug -e "/just|another|perl|hacker/"
Previous: demerphqNext: Randall S. Becker
Message 18 of 26 in “[Problem] test_must_fail makes possibly questionable assumptions about exit_code.”
  1. Randall S. BeckerFeb 27, 2018
  2. Jonathan NiederFeb 28, 2018
  3. Eric WongFeb 28, 2018
  4. Jeff KingFeb 28, 2018
  5. Eric WongFeb 28, 2018
  6. Jeff KingFeb 28, 2018
  7. Randall S. BeckerFeb 28, 2018
  8. demerphqFeb 28, 2018
  9. Jeff KingMar 1, 2018
  10. demerphqMar 1, 2018
  11. Randall S. BeckerMar 1, 2018
  12. Jeff KingMar 1, 2018
  13. demerphqMar 1, 2018
  14. Junio C HamanoFeb 28, 2018
  15. demerphqFeb 28, 2018
  16. Randall S. BeckerFeb 28, 2018
  17. demerphqFeb 28, 2018
  18. demerphqFeb 28, 2018
  19. Randall S. BeckerFeb 28, 2018
  20. Jonathan NiederFeb 28, 2018
  21. Randall S. BeckerFeb 28, 2018
  22. Jonathan NiederFeb 28, 2018
  23. Randall S. BeckerFeb 28, 2018
  24. Randall S. BeckerFeb 28, 2018
  25. Jonathan NiederFeb 28, 2018
  26. Jeff KingMar 1, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.