aboutsummaryrefslogtreecommitdiff
path: root/run-command.h
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2026-01-06 16:33:53 +0900
committerJunio C Hamano <gitster@pobox.com>2026-01-06 16:33:53 +0900
commitf406b8955295d01089ba2baf35eceadff2d11cae (patch)
tree7b53772788307329d2c0e4005b13f2a5621f529e /run-command.h
parent1627809eeff75e6ec936fc609e7be46d5eb2fa9e (diff)
parentc65f26fca46f742e8e457d859a83c4e6ef3c3953 (diff)
downloadgit-f406b8955295d01089ba2baf35eceadff2d11cae.tar.xz
Merge branch 'ar/run-command-hook'
Use hook API to replace ad-hoc invocation of hook scripts with the run_command() API. * ar/run-command-hook: receive-pack: convert receive hooks to hook API receive-pack: convert update hooks to new API hooks: allow callers to capture output run-command: allow capturing of collated output hook: allow overriding the ungroup option reference-transaction: use hook API instead of run-command transport: convert pre-push to hook API hook: convert 'post-rewrite' hook in sequencer.c to hook API hook: provide stdin via callback run-command: add stdin callback for parallelization run-command: add first helper for pp child states
Diffstat (limited to 'run-command.h')
-rw-r--r--run-command.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/run-command.h b/run-command.h
index 0df25e445f..7093252863 100644
--- a/run-command.h
+++ b/run-command.h
@@ -421,6 +421,32 @@ typedef int (*start_failure_fn)(struct strbuf *out,
void *pp_task_cb);
/**
+ * This callback is repeatedly called on every child process who requests
+ * start_command() to create a pipe by setting child_process.in < 0.
+ *
+ * pp_cb is the callback cookie as passed into run_processes_parallel, and
+ * pp_task_cb is the callback cookie as passed into get_next_task_fn.
+ *
+ * Returns < 0 for error
+ * Returns == 0 when there is more data to be fed (will be called again)
+ * Returns > 0 when finished (child closed fd or no more data to be fed)
+ */
+typedef int (*feed_pipe_fn)(int child_in,
+ void *pp_cb,
+ void *pp_task_cb);
+
+/**
+ * If this callback is provided, output is collated into a new pipe instead
+ * of the process stderr. Then `consume_output_fn` will be called repeatedly
+ * with output contained in the `output` arg. It will also be called with an
+ * empty `output` to allow for keepalives or similar operations if necessary.
+ *
+ * pp_cb is the callback cookie as passed into run_processes_parallel.
+ * No task cookie is provided because the callback receives collated output.
+ */
+typedef void (*consume_output_fn)(struct strbuf *output, void *pp_cb);
+
+/**
* This callback is called on every child process that finished processing.
*
* See run_processes_parallel() below for a discussion of the "struct
@@ -473,6 +499,18 @@ struct run_process_parallel_opts
*/
start_failure_fn start_failure;
+ /*
+ * feed_pipe: see feed_pipe_fn() above. This can be NULL to omit any
+ * special handling.
+ */
+ feed_pipe_fn feed_pipe;
+
+ /*
+ * consume_output: see consume_output_fn() above. This can be NULL
+ * to omit any special handling.
+ */
+ consume_output_fn consume_output;
+
/**
* task_finished: See task_finished_fn() above. This can be
* NULL to omit any special handling.