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

Re: pre-push hooks and stdout regression

From
brian m. carlson <sandals@crustytoothpaste.net>
Date
Jan 13, 2026, 02:12 UTC
Message-ID
<aWWp-FPzKdL72c9v@fruit.crustytoothpaste.net>
In-Reply-To
<ab578804-891e-edcc-12a6-8b1030d1bacb@apache.org>
On 2026-01-12 at 23:21:42, Chris Darroch wrote:
Show 12 quoted lines
> Hello --
> 
>    I'm one of the current maintainers of the Git LFS project, and we
> happened to notice that a recent change in Git's "master" branch has
> introduced a regression in our test suite.
> 
>    Specifically, with commit 3e2836a742d8b2b2da25ca06e9d0ac3a539bd966
> ("transport: convert pre-push to hook API") from the "ar/run-command-hook"
> merged last week, it appears that when a pre-push hook such as our
> git-lfs-pre-push program runs, messages it writes to its standard output
> are now delivered to the user's standard error stream instead of
> their standard output stream.
CCing the author and submitter.
>    I suspect this is because the pick_next_hook() function in hook.c
> sets the stdout_to_stderr flag for its "cb" child_process argument,
> and that function is now used to run the pre-push hook.

That's likely the case. 96e7225b31 ("hook: add 'run' subcommand", 2021-12-22), which introduced that code, didn't provide an explanation for that decision. I think that's required for hooks such as pre-receive that send data over the sideband, and it may be that the code was simply reused. Of course, I could be mistaken.

Show 5 quoted lines
>    However, I think there remains the larger concern that users who
> depend on the existing Git pre-push behaviour in some way may also
> encounter regressions, perhaps because they expect (as our test suite
> does) to see certain messages either output or not output to stderr
> during a Git push operation.

I suspect that we're also going to see similar regressions in other software. pre-push hooks are really popular, as well as pre-commit hooks, and people are going to expect both standard output and standard error to be connected to the same place they were before.

A quick check of pre-push hook frameworks on GitHub indicates that a substantial number of them print to standard output, even for error messages. I expect that we will actually see quite a bit of breakage in this case, especially from automated tooling and Git graphical frontends, which may expect data in a certain place. I don't have any proof of this, however, but it does seem like the kind of thing that people will have come to rely on.

I'd recommend that we avoid using `stdout_to_stderr` for hooks unless we did originally or really need to (e.g., for things that might go over the sideband).

>    Please do let me know your thoughts on this subject!  If the
> consensus is that the new behaviour is correct, we'll adjust our test
> suite to match it, but I'll wait to hear the outcome of any discussion
> before making that change.

I will just state for the benefit of the list that Chris and I are colleagues and we discussed this at work, so I asked him to CC me on this issue since I was curious. My opinions here, as with everything originating from this email address, are mine and not my employer's.

-- 
brian m. carlson (they/them)
Toronto, Ontario, CA
Previous: Chris DarrochNext: Adrian Ratiu
Message 2 of 5 in “pre-push hooks and stdout regression”
  1. Chris DarrochJan 12, 2026
  2. brian m. carlsonJan 13, 2026
  3. Adrian RatiuJan 13, 2026
  4. Adrian RatiuJan 13, 2026
  5. Chris DarrochJan 13, 2026

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.