[PATCH v8 06/12] hook: allow separate std[out|err] streams
- From
Adrian Ratiu <adrian.ratiu@collabora.com>
- Date
- Jan 28, 2026, 21:39 UTC
- Message-ID
- <20260128213927.3026875-7-adrian.ratiu@collabora.com>
- In-Reply-To
- <20260128213927.3026875-1-adrian.ratiu@collabora.com>
The hook API assumes that all hooks merge stdout to stderr.
This assumption is proven wrong by pre-push: some of its users actually expect separate stdout and stderr streams and merging them will cause a regression.
Therefore this adds a mechanism to allow pre-push to separate the streams, which will be used in the next commit.
The mechanism is generic via struct run_hooks_opt just in case there are any more surprise exceptions like this.
Reported-by: Chris Darroch <chrisd@apache.org> Suggested-by: brian m. carlson <sandals@crustytoothpaste.net> Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com> --- hook.c | 2 +- hook.h | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/hook.c b/hook.c index 5ddd7678d1..fde1f88ce8 100644 --- a/hook.c +++ b/hook.c @@ -81,7 +81,7 @@ static int pick_next_hook(struct child_process *cp, cp->in = -1; } - cp->stdout_to_stderr = 1; + cp->stdout_to_stderr = hook_cb->options->stdout_to_stderr; cp->trace2_hook_name = hook_cb->hook_name; cp->dir = hook_cb->options->dir; diff --git a/hook.h b/hook.h index 2169d4a6bd..2c8a23a569 100644 --- a/hook.h +++ b/hook.h @@ -34,6 +34,15 @@ struct run_hooks_opt */ int *invoked_hook; + /** + * Send the hook's stdout to stderr. + * + * This is the default behavior for all hooks except pre-push, + * which has separate stdout and stderr streams for backwards + * compatibility reasons. + */ + unsigned int stdout_to_stderr:1; + /** * Path to file which should be piped to stdin for each hook. */ @@ -80,6 +89,7 @@ struct run_hooks_opt #define RUN_HOOKS_OPT_INIT { \ .env = STRVEC_INIT, \ .args = STRVEC_INIT, \ + .stdout_to_stderr = 1, \ } struct hook_cb_data {
-- 2.52.0.732.gb351b5166d.dirty