Re: [PATCH v5 0/2] hook API: connect hooks to the TTY again, fixes a v2.36.0 regression
- From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- Date
- Jun 7, 2022, 08:49 UTC
- Message-ID
- <220607.86bkv4votc.gmgdl@evledraar.gmail.com>
- In-Reply-To
- <993aff66-01b7-4aa3-78ae-0027c9c04ea8@gmail.com>
On Fri, Jun 03 2022, Phillip Wood wrote:
Show 43 quoted lines
> Hi Ævar > > On 03/06/2022 10:20, Ævar Arnfjörð Bjarmason wrote: >> On Fri, Jun 03 2022, Phillip Wood wrote: >> >>> Hi Ævar >>> >>> On 02/06/2022 15:07, Ævar Arnfjörð Bjarmason wrote: >>>> This series fixes a v2.36.0 regression[1]. See [2] for the v4. The >>>> reasons for why a regression needs this relatively large change to >>>> move forward is discussed in past rounds, e.g. around [3]. CI at >>>> https://github.com/avar/git/actions/runs/2428475773 >>>> Changes since v4, mainly to address comments by Johannes (thanks for >>>> the review!): >>>> * First, some things like renaming "ungroup" to something else & >>>> rewriting the tests I didn't do because I thought keeping the >>>> inter/range-diff down in size outweighed re-arranging or changing >>>> the code at this late stage. >>>> In the case of the suggested shorter test in >>>> https://lore.kernel.org/git/nycvar.QRO.7.76.6.2206011827300.349@tvgsbejvaqbjf.bet/ >>>> the replacement wasn't testing the same thing. I.e. we don't see >>>> what's connected to a TTY if we redirect one of stdout or stderr >>>> anymore, which is important to get right. >>> >>> I'm a bit confused by this, the proposed test uses this hook script >>> >>> write_script .git/hooks/pre-commit <<-EOF >>> test -t 1 && echo "stdout is a TTY" >out >>> test -t 2 && echo "stderr is a TTY" >>out >>> EOF >>> >>> if either of stderr or stdout is redirected then the corresponding >>> "test -t" should fail and so we will detect that it is not a tty. >> Yes, exactly, but the proposed test doesn't test that, in that case >> both >> of them are connected, the test in 2/2 does test that case. > > I think I must be missing something. As I understand it we want to > check that the hook can see a tty on stdout and stderr. In the test > above we'll get a line printed for each fd that is a tty. Your test > always redirects one of stdout and stderr - why is it important to > test that? - it feels like it is testing the shell's redirection code > rather than git.
Yes, I think I'm the one who was missing something.
I looked at this again and I thought I'd been testing that e.g. one of the two not returning true from isatty() wasn't making both "not TTY", i.e. that run-command.c wasn't performing some shenanigans.
But that was probably too paranoid, and in any case I couldn't find a good way to test it.
> I was concerned that we had also regressed the handling of stdin but > looking at (the now deleted) run_hook_ve() it used to set .no_stdin = > 1 so that is unchanged in the new code.
*nod*
I re-rolled a v6 just now which I think should address your comments here: https://lore.kernel.org/git/cover-v6-0.2-00000000000-20220606T170356Z-avarab@gmail.com/
I've still kept the "clean up after yourself" etc. behavior in the test, and since it was easy we now test both "git hook run" and "git commit".
Thanks a lot for the careful review.