From: Phillip Wood Date: Fri, 03 Jun 2022 13:21:31 GMT Subject: Re: [PATCH v5 0/2] hook API: connect hooks to the TTY again, fixes a v2.36.0 regression Message-ID: <993aff66-01b7-4aa3-78ae-0027c9c04ea8@gmail.com> In-Reply-To: <220603.86o7zaxfhf.gmgdl@evledraar.gmail.com> 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. 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. Best Wishes Phillip > Can that snippet bebe made to work? Sure, but I know the test I have > works, and that proposed replacement didn't even pass chainlint > (i.e. hasn't been run even once in our test suite). So I didn't think > that trying to micro-optimize the test length was worth it in this case. > > It's also getting much of that length reduction e.g. by not cleaning up > after itself, which the test in 2/2 does. >