aboutsummaryrefslogtreecommitdiffstats
path: root/run-command.h
diff options
context:
space:
mode:
authorEmily Shaffer <emilyshaffer@google.com>2025-10-17 17:15:41 +0300
committerJunio C Hamano <gitster@pobox.com>2025-10-17 14:32:52 -0700
commitbdf49ba9aa4090d1b3784eaa0e9e364e340202fa (patch)
treed0c92c136b18787488671e30ef33edd95cd8e1ba /run-command.h
parentreference-transaction: use hook API instead of run-command (diff)
downloadgit-bdf49ba9aa4090d1b3784eaa0e9e364e340202fa.tar.gz
git-bdf49ba9aa4090d1b3784eaa0e9e364e340202fa.zip
run-command: allow capturing of collated output
Some callers, for example server-side hooks which wish to relay hook output to clients across a transport, want to capture what would normally print to stderr and do something else with it. Allow that via a callback. By calling the callback regardless of whether there's output available, we allow clients to send e.g. a keepalive if necessary. Because we expose a strbuf, not a fd or FILE*, there's no need to create a temporary pipe or similar - we can just skip the print to stderr and instead hand it to the caller. 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>
Diffstat (limited to 'run-command.h')
-rw-r--r--run-command.h20
1 files changed, 20 insertions, 0 deletions
diff --git a/run-command.h b/run-command.h
index e536ed7544..2c2484478b 100644
--- a/run-command.h
+++ b/run-command.h
@@ -437,6 +437,20 @@ typedef int (*feed_pipe_fn)(int child_in,
void *pp_task_cb);
/**
+ * If this callback is provided, instead of collating process output to stderr,
+ * they will be collated into a new pipe. consume_sideband_fn will be called
+ * repeatedly. When output is available on that pipe, it will be contained in
+ * 'output'. But it will be called with an empty 'output' too, to allow for
+ * keepalives or similar operations if necessary.
+ *
+ * pp_cb is the callback cookie as passed into run_processes_parallel.
+ *
+ * Since this callback is provided with the collated output, no task cookie is
+ * provided.
+ */
+typedef void (*consume_sideband_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
@@ -495,6 +509,12 @@ struct run_process_parallel_opts
*/
feed_pipe_fn feed_pipe;
+ /*
+ * consume_sideband: see consume_sideband_fn() above. This can be NULL
+ * to omit any special handling.
+ */
+ consume_sideband_fn consume_sideband;
+
/**
* task_finished: See task_finished_fn() above. This can be
* NULL to omit any special handling.