Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> writes: > diff --git a/hook.c b/hook.c > index a4fa1031f28..86c6dc1fe70 100644 > --- a/hook.c > +++ b/hook.c > @@ -53,8 +53,14 @@ static int pick_next_hook(struct child_process *cp, > if (!hook_path) > return 0; > > - cp->no_stdin = 1; > strvec_pushv(&cp->env, hook_cb->options->env.v); > + /* reopen the file for stdin; run_command closes it. */ > + if (hook_cb->options->path_to_stdin) { > + cp->no_stdin = 0; > + cp->in = xopen(hook_cb->options->path_to_stdin, O_RDONLY); > + } else { > + cp->no_stdin = 1; > + } Do we need this else clause? I thought that we've made sure no_stdin is the default. Is it just being explicit? > diff --git a/hook.h b/hook.h > index 4258b13da0d..19ab9a5806e 100644 > --- a/hook.h > +++ b/hook.h > @@ -30,6 +30,11 @@ struct run_hooks_opt > * was invoked. > */ > int *invoked_hook; > + > + /** > + * Path to file which should be piped to stdin for each hook. > + */ > + const char *path_to_stdin; > }; > > #define RUN_HOOKS_OPT_INIT { \