Subject: Re: [PATCH 02/10] hook: provide stdin via callback

From: Adrian Ratiu <[email-masked]>
Date: Mon, 13 Oct 2025 17:47:17 +0300

On Fri, 10 Oct 2025, Emily Shaffer <[email-masked]> wrote:
> On Thu, Sep 25, 2025 at 5:54 AM Adrian Ratiu 
> <[email-masked]> wrote: 
>> diff --git a/hook.h b/hook.h index 11863fa734..8fdbc8c673 
>> 100644 --- a/hook.h +++ b/hook.h @@ -1,6 +1,7 @@ 
>>  #ifndef HOOK_H #define HOOK_H #include "strvec.h" 
>> +#include "run-command.h" 
>> 
>>  struct repository; 
>> 
>> @@ -37,6 +38,24 @@ struct run_hooks_opt 
>>          * Path to file which should be piped to stdin for each 
>>          hook.  */ 
>>         const char *path_to_stdin; 
>> + +       /** +        * Callback to ask for more content to 
>> pipe to each hook stdin.  +        * +        * If a hook needs 
>> to consume large quantities of data (e.g. a list of all refs 
>> received in a +        * client push), feeding data via 
>> in-memory strings or slurping to/from files via path_to_stdin + 
>> * will not be efficient, so this callback allows for piecemeal 
>> reading and writing.  +        * +        * Add initalization 
>> context to hook.feed_pipe_ctx.  +        */ + 
>> feed_pipe_fn feed_pipe; +       void *feed_pipe_ctx; + + 
>> /** +        * Use this to keep internal state for your 
>> feed_pipe_fn callback.  +        * Only useful if you are using 
>> run_hooks_opt.feed_pipe. Otherwise, ignore it.  +        */ + 
>> void *feed_pipe_cb_data; 
>>  }; 
>> 
>>  #define RUN_HOOKS_OPT_INIT { \ 
>> @@ -44,6 +63,9 @@ struct run_hooks_opt 
>>         .args = STRVEC_INIT, \ 
>>  } 
>> 
>> +/** + * Callback data provided to feed_pipe_fn.  + */ 
> 
> It looks like this comment was maybe a note to yourself? (Or a 
> note to myself, eons ago?) But hook_cb_data is used in all the 
> parallel hook callbacks, not just feed_pipe_fn, so I don't think 
> this is accurate. 

Nice find! I added the comment while initially understanding the 
code and yes, hook_cb_data is more generic than just its use in 
feed_pipe_fn.

Will drop it in v2. Thanks!