threads / discuss / 53424

"--quiet" for git-push does not suppress remote hook output

Subject: "--quiet" for git-push does not suppress remote hook output

## tl;dr

4 messages between May 7, 2020 and May 8, 2020.

replies: 3people: 2as markdown or json

Laszlo Ersek· May 7, 2020, 12:05 UTC · lore
Hi,

being a total novice in git internals, it seems like "builtin/receive-pack.c" (on the server) forwards any receive hook output with copy_to_sideband() back to git-push (on the client), even if git-push was invoked with "--quiet".

And "case 2" in demultiplex_sideband() seems to print that "band" to stderr (on the client), despite "--quiet".

Is this intentional? I'd prefer "git push --quiet" to suppress remote hook output (unless the remote hook fails).

Thanks! Laszlo

Laszlo Ersek· May 7, 2020, 12:16 UTC · re: Laszlo Ersek · lore

Re: "--quiet" for git-push does not suppress remote hook output

(Sorry about the self-followup...)
On 05/07/20 14:05, Laszlo Ersek wrote:
Show 12 quoted lines
> Hi,
> 
> being a total novice in git internals, it seems like
> "builtin/receive-pack.c" (on the server) forwards any receive hook
> output with copy_to_sideband() back to git-push (on the client), even if
> git-push was invoked with "--quiet".
> 
> And "case 2" in demultiplex_sideband() seems to print that "band" to
> stderr (on the client), despite "--quiet".
> 
> Is this intentional? I'd prefer "git push --quiet" to suppress remote
> hook output (unless the remote hook fails).
Or else:

would it be the job of the particular receive hooks to observe and obey the "--quiet" option in the GIT_PUSH_OPTION_* environment variables?

Thanks! Laszlo

Jeff King· May 7, 2020, 21:02 UTC · re: Laszlo Ersek · lore

Re: "--quiet" for git-push does not suppress remote hook output

On Thu, May 07, 2020 at 02:16:36PM +0200, Laszlo Ersek wrote:
Show 13 quoted lines
> On 05/07/20 14:05, Laszlo Ersek wrote:
> > Hi,
> > 
> > being a total novice in git internals, it seems like
> > "builtin/receive-pack.c" (on the server) forwards any receive hook
> > output with copy_to_sideband() back to git-push (on the client), even if
> > git-push was invoked with "--quiet".
> > 
> > And "case 2" in demultiplex_sideband() seems to print that "band" to
> > stderr (on the client), despite "--quiet".
> > 
> > Is this intentional? I'd prefer "git push --quiet" to suppress remote
> > hook output (unless the remote hook fails).

I think the client has to propagate sideband 2 from the server, since it doesn't know whether the messages are informational or errors (and even with --quiet, we'd want to show errors).

There is a "quiet" protocol capability; when you run "git push --quiet" on the client, it tells the server to use "quiet", and then it passes options to index-pack, etc, to suppress progress. But that never makes it to hooks.

> Or else:
> 
> would it be the job of the particular receive hooks to observe and obey
> the "--quiet" option in the GIT_PUSH_OPTION_* environment variables?

That would work, but push options require the client to send them. We should probably be passing knowledge of the "quiet" capability from receive-pack down to the hooks, probably via an environment variable (but not GIT_PUSH_OPTION_*, because that already has meaning).

-Peff
Laszlo Ersek· May 8, 2020, 09:50 UTC · re: Jeff King · lore

Re: "--quiet" for git-push does not suppress remote hook output

On 05/07/20 23:02, Jeff King wrote:
Show 34 quoted lines
> On Thu, May 07, 2020 at 02:16:36PM +0200, Laszlo Ersek wrote:
> 
>> On 05/07/20 14:05, Laszlo Ersek wrote:
>>> Hi,
>>>
>>> being a total novice in git internals, it seems like
>>> "builtin/receive-pack.c" (on the server) forwards any receive hook
>>> output with copy_to_sideband() back to git-push (on the client), even if
>>> git-push was invoked with "--quiet".
>>>
>>> And "case 2" in demultiplex_sideband() seems to print that "band" to
>>> stderr (on the client), despite "--quiet".
>>>
>>> Is this intentional? I'd prefer "git push --quiet" to suppress remote
>>> hook output (unless the remote hook fails).
> 
> I think the client has to propagate sideband 2 from the server, since it
> doesn't know whether the messages are informational or errors (and even
> with --quiet, we'd want to show errors).
> 
> There is a "quiet" protocol capability; when you run "git push --quiet"
> on the client, it tells the server to use "quiet", and then it passes
> options to index-pack, etc, to suppress progress. But that never makes
> it to hooks.
> 
>> Or else:
>>
>> would it be the job of the particular receive hooks to observe and obey
>> the "--quiet" option in the GIT_PUSH_OPTION_* environment variables?
> 
> That would work, but push options require the client to send them. We
> should probably be passing knowledge of the "quiet" capability from
> receive-pack down to the hooks, probably via an environment variable
> (but not GIT_PUSH_OPTION_*, because that already has meaning).

Thank you for explaining! Laszlo

← back to recent threads