On 2020.12.04 17:49, Emily Shaffer wrote: > diff --git a/sequencer.c b/sequencer.c > index 5a98fd2fbc..4befd862ff 100644 > --- a/sequencer.c > +++ b/sequencer.c > @@ -35,6 +35,7 @@ > #include "rebase-interactive.h" > #include "reset.h" > #include "hook.h" > +#include "string-list.h" > > #define GIT_REFLOG_ACTION "GIT_REFLOG_ACTION" > > @@ -1143,33 +1144,23 @@ int update_head_with_reflog(const struct commit *old_head, > static int run_rewrite_hook(const struct object_id *oldoid, > const struct object_id *newoid) > { > - struct child_process proc = CHILD_PROCESS_INIT; > - const char *argv[3]; > + struct run_hooks_opt opt = RUN_HOOKS_OPT_INIT_ASYNC; > + struct strbuf tmp = STRBUF_INIT; > int code; > - struct strbuf sb = STRBUF_INIT; > > - argv[0] = find_hook("post-rewrite"); > - if (!argv[0]) > - return 0; > + strvec_push(&opt.args, "amend"); > > - argv[1] = "amend"; > - argv[2] = NULL; > - > - proc.argv = argv; > - proc.in = -1; > - proc.stdout_to_stderr = 1; > - proc.trace2_hook_name = "post-rewrite"; > - > - code = start_command(&proc); > - if (code) > - return code; > - strbuf_addf(&sb, "%s %s\n", oid_to_hex(oldoid), oid_to_hex(newoid)); > - sigchain_push(SIGPIPE, SIG_IGN); Here and in a few other later patches, we're removing some signal handling that doesn't seem to be replicated in the run_hooks() implementation. Can you add a note to the commit message about why this is OK? > - write_in_full(proc.in, sb.buf, sb.len); > - close(proc.in); > - strbuf_release(&sb); > - sigchain_pop(SIGPIPE); > - return finish_command(&proc); > + strbuf_addf(&tmp, > + "%s %s", > + oid_to_hex(oldoid), > + oid_to_hex(newoid)); > + string_list_append(&opt.str_stdin, tmp.buf); > + > + code = run_hooks("post-rewrite", &opt); > + > + run_hooks_opt_clear(&opt); > + strbuf_release(&tmp); > + return code; > } > > void commit_post_rewrite(struct repository *r, > @@ -4317,30 +4308,21 @@ static int pick_commits(struct repository *r, > flush_rewritten_pending(); > if (!stat(rebase_path_rewritten_list(), &st) && > st.st_size > 0) { > - struct child_process child = CHILD_PROCESS_INIT; > - const char *post_rewrite_hook = > - find_hook("post-rewrite"); > - > - child.in = open(rebase_path_rewritten_list(), O_RDONLY); > - child.git_cmd = 1; > - strvec_push(&child.args, "notes"); > - strvec_push(&child.args, "copy"); > - strvec_push(&child.args, "--for-rewrite=rebase"); > + struct child_process notes_cp = CHILD_PROCESS_INIT; > + struct run_hooks_opt hook_opt = RUN_HOOKS_OPT_INIT_ASYNC; > + > + notes_cp.in = open(rebase_path_rewritten_list(), O_RDONLY); > + notes_cp.git_cmd = 1; > + strvec_push(¬es_cp.args, "notes"); > + strvec_push(¬es_cp.args, "copy"); > + strvec_push(¬es_cp.args, "--for-rewrite=rebase"); > /* we don't care if this copying failed */ > - run_command(&child); > - > - if (post_rewrite_hook) { > - struct child_process hook = CHILD_PROCESS_INIT; > - > - hook.in = open(rebase_path_rewritten_list(), > - O_RDONLY); > - hook.stdout_to_stderr = 1; > - hook.trace2_hook_name = "post-rewrite"; > - strvec_push(&hook.args, post_rewrite_hook); > - strvec_push(&hook.args, "rebase"); > - /* we don't care if this hook failed */ > - run_command(&hook); > - } > + run_command(¬es_cp); > + > + hook_opt.path_to_stdin = rebase_path_rewritten_list(); > + strvec_push(&hook_opt.args, "rebase"); > + run_hooks("post-rewrite", &hook_opt); > + run_hooks_opt_clear(&hook_opt); > } > apply_autostash(rebase_path_autostash()); > > -- > 2.28.0.rc0.142.g3c755180ce-goog >