mirror of
https://github.com/git/git.git
synced 2026-01-11 05:13:13 +09:00
hook: convert 'post-rewrite' hook in sequencer.c to hook API
Replace the custom run-command calls used by post-rewrite with the newer and simpler hook_run_opt(), which does not need to create a custom 'struct child_process' or call find_hook(). Another benefit of using the hook API is that hook_run_opt() handles the SIGPIPE toggle logic. Signed-off-by: Emily Shaffer <emilyshaffer@google.com> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
26238496a7
commit
05eccff8c7
44
sequencer.c
44
sequencer.c
@ -1292,32 +1292,40 @@ int update_head_with_reflog(const struct commit *old_head,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int pipe_from_strbuf(int hook_stdin_fd, void *pp_cb, void *pp_task_cb UNUSED)
|
||||||
|
{
|
||||||
|
struct hook_cb_data *hook_cb = pp_cb;
|
||||||
|
struct strbuf *to_pipe = hook_cb->options->feed_pipe_ctx;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if (!to_pipe)
|
||||||
|
BUG("pipe_from_strbuf called without feed_pipe_ctx");
|
||||||
|
|
||||||
|
ret = write_in_full(hook_stdin_fd, to_pipe->buf, to_pipe->len);
|
||||||
|
if (ret < 0 && errno != EPIPE)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
return 1; /* done writing */
|
||||||
|
}
|
||||||
|
|
||||||
static int run_rewrite_hook(const struct object_id *oldoid,
|
static int run_rewrite_hook(const struct object_id *oldoid,
|
||||||
const struct object_id *newoid)
|
const struct object_id *newoid)
|
||||||
{
|
{
|
||||||
struct child_process proc = CHILD_PROCESS_INIT;
|
struct run_hooks_opt opt = RUN_HOOKS_OPT_INIT;
|
||||||
int code;
|
int code;
|
||||||
struct strbuf sb = STRBUF_INIT;
|
struct strbuf sb = STRBUF_INIT;
|
||||||
const char *hook_path = find_hook(the_repository, "post-rewrite");
|
|
||||||
|
|
||||||
if (!hook_path)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
strvec_pushl(&proc.args, hook_path, "amend", NULL);
|
|
||||||
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));
|
strbuf_addf(&sb, "%s %s\n", oid_to_hex(oldoid), oid_to_hex(newoid));
|
||||||
sigchain_push(SIGPIPE, SIG_IGN);
|
|
||||||
write_in_full(proc.in, sb.buf, sb.len);
|
opt.feed_pipe_ctx = &sb;
|
||||||
close(proc.in);
|
opt.feed_pipe = pipe_from_strbuf;
|
||||||
|
|
||||||
|
strvec_push(&opt.args, "amend");
|
||||||
|
|
||||||
|
code = run_hooks_opt(the_repository, "post-rewrite", &opt);
|
||||||
|
|
||||||
strbuf_release(&sb);
|
strbuf_release(&sb);
|
||||||
sigchain_pop(SIGPIPE);
|
return code;
|
||||||
return finish_command(&proc);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void commit_post_rewrite(struct repository *r,
|
void commit_post_rewrite(struct repository *r,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user