From: "Rubén Justo" <rjusto@gmail.com>
To: Jeff King <peff@peff.net>
Cc: Git List <git@vger.kernel.org>
Subject: Re: [PATCH] pager: die when paging to non-existing command
Date: Fri, 21 Jun 2024 23:11:06 +0200 [thread overview]
Message-ID: <7c749c2f-803d-4e97-b4f4-a97c681ed102@gmail.com> (raw)
In-Reply-To: <20240621064020.GB2105230@coredump.intra.peff.net>
On Fri, Jun 21, 2024 at 02:40:20AM -0400, Jeff King wrote:
> > When trying to execute a non-existent program from GIT_PAGER, we display
> > an error. However, we also send the complete text to the terminal
> > and return a successful exit code. This can be confusing for the user
> > and the displayed error could easily become obscured by a lengthy
> > text.
> >
> > For example, here the error message would be very far above after
> > sending 50 MB of text:
> >
> > $ GIT_PAGER=non-existent t/test-terminal.perl git log | wc -c
> > error: cannot run non-existent: No such file or directory
> > 50314363
> >
> > Let's make the error clear by aborting the process and return an error
> > so that the user can easily correct their mistake.
> >
> > This will be the result of the change:
> >
> > $ GIT_PAGER=non-existent t/test-terminal.perl git log | wc -c
> > error: cannot run non-existent: No such file or directory
> > fatal: unable to start the pager: 'non-existent'
> > 0
>
> OK. My initial reaction was "eh, who care? execve() failing is only one
> error mode, and we might see all kinds of failure modes from a missing
> or broken pager".
>
> But this:
>
> > Finally, it's worth noting that we are not changing the behavior if the
> > command specified in GIT_PAGER is a shell command. In such cases, it
> > is:
> >
> > $ GIT_PAGER=:\;non-existent t/test-terminal.perl git log
> > :;non-existent: 1: non-existent: not found
> > died of signal 13 at t/test-terminal.perl line 33.
>
> ...shows what happens in those other cases, and you are making things
> more consistent. So that seems reasonable to me.
>
> > The behavior change we're introducing in this commit affects two tests
> > in t7006, which is a good sign regarding test coverage and requires us
> > to address it.
> >
> > The first test is 'git skips paging non-existing command'. This test
> > comes from f7991f01f2 (t7006: clean up SIGPIPE handling in trace2 tests,
> > 2021-11-21,) where a modification was made to a test that was originally
> > introduced in c24b7f6736 (pager: test for exit code with and without
> > SIGPIPE, 2021-02-02). That original test was, IMHO, in the same
> > direction we're going in this commit.
>
> Yeah, the point of f7991f01f2 was just to clean up the tests. The
> modification was only documenting what Git happened to do for that case
> now, and not meant as an endorsement of the behavior. ;) So I have no
> problem changing it.
>
> > The second test being affected is: 'non-existent pager doesnt cause
> > crash', introduced in f917f57f40 (pager: fix crash when pager program
> > doesn't exist, 2021-11-24). As its name states, it has the intention of
> > checking that we don't introduce a regression that produces a crash when
> > GIT_PAGER points to a nonexistent program.
> >
> > This test could be considered redundant nowadays, due to us already
> > having several tests checking implicitly what a non-existent command in
> > GIT_PAGER produces. However, let's maintain a good belt-and-suspenders
> > strategy; adapt it to the new world.
>
> OK. I would also be happy to see it go. The crash was about reusing the
> pager child_process struct, and no we know that cannot happen. Either we
> run the pager or we immediately bail. I think that the code change in
> that commit could also be reverted (to always re-init the child
> process), but it's probably more defensive to keep it.
Yeah. The name is what took most of my attention, I have to admit. A
test named like "check that it doesn't crash" is defensive. ;)
Let's keep it.
Thanks for your review.
next prev parent reply other threads:[~2024-06-21 21:11 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-20 17:25 [PATCH] pager: die when paging to non-existing command Rubén Justo
2024-06-20 19:04 ` Junio C Hamano
2024-06-20 20:22 ` Rubén Justo
2024-06-20 21:03 ` Junio C Hamano
2024-06-20 22:17 ` Johannes Sixt
2024-06-20 22:35 ` Junio C Hamano
2024-06-21 6:51 ` Jeff King
2024-06-21 17:11 ` Dragan Simic
2024-06-24 7:35 ` Johannes Schindelin
2024-06-21 11:28 ` Phillip Wood
2024-06-21 23:21 ` Junio C Hamano
2024-06-21 6:40 ` Jeff King
2024-06-21 21:11 ` Rubén Justo [this message]
2024-06-21 21:29 ` [PATCH v2] " Rubén Justo
2024-06-21 23:31 ` [PATCH v3] " Rubén Justo
2024-06-22 7:08 ` Johannes Sixt
2024-06-23 7:09 ` [PATCH v4] " Rubén Justo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7c749c2f-803d-4e97-b4f4-a97c681ed102@gmail.com \
--to=rjusto@gmail.com \
--cc=git@vger.kernel.org \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).