]> git.ipfire.org Git - thirdparty/git.git/blame - run-command.h
replace and remove run_command_v_opt_cd_env_tr2()
[thirdparty/git.git] / run-command.h
CommitLineData
b1bf95bb
JW
1#ifndef RUN_COMMAND_H
2#define RUN_COMMAND_H
3
10bc232d 4#include "thread-utils.h"
200a76b7 5
dbbcd44f 6#include "strvec.h"
c460c0ec 7
4c4066d9
HW
8/**
9 * The run-command API offers a versatile tool to run sub-processes with
10 * redirected input and output as well as with a modified environment
11 * and an alternate current directory.
12 *
13 * A similar API offers the capability to run a function asynchronously,
14 * which is primarily used to capture the output that the function
15 * produces in the caller in order to process it.
16 */
17
18
19/**
20 * This describes the arguments, redirections, and environment of a
21 * command to run in a sub-process.
22 *
23 * The caller:
24 *
25 * 1. allocates and clears (using child_process_init() or
26 * CHILD_PROCESS_INIT) a struct child_process variable;
27 * 2. initializes the members;
28 * 3. calls start_command();
29 * 4. processes the data;
30 * 5. closes file descriptors (if necessary; see below);
31 * 6. calls finish_command().
32 *
33 * Special forms of redirection are available by setting these members
34 * to 1:
35 *
36 * .no_stdin, .no_stdout, .no_stderr: The respective channel is
37 * redirected to /dev/null.
38 *
39 * .stdout_to_stderr: stdout of the child is redirected to its
40 * stderr. This happens after stderr is itself redirected.
41 * So stdout will follow stderr to wherever it is
42 * redirected.
43 */
f1000898 44struct child_process {
4c4066d9
HW
45
46 /**
d3b21597
ÆAB
47 * The .args is a `struct strvec', use that API to manipulate
48 * it, e.g. strvec_pushv() to add an existing "const char **"
49 * vector.
4c4066d9 50 *
d3b21597
ÆAB
51 * If the command to run is a git command, set the first
52 * element in the strvec to the command name without the
53 * 'git-' prefix and set .git_cmd = 1.
4c4066d9 54 *
d3b21597
ÆAB
55 * The memory in .args will be cleaned up automatically during
56 * `finish_command` (or during `start_command` when it is unsuccessful).
4c4066d9 57 */
c972bf4c 58 struct strvec args;
c7c4bdec
ÆAB
59
60 /**
b3193252 61 * Like .args the .env is a `struct strvec'.
c7c4bdec
ÆAB
62 *
63 * To modify the environment of the sub-process, specify an array of
64 * environment settings. Each string in the array manipulates the
65 * environment.
66 *
67 * - If the string is of the form "VAR=value", i.e. it contains '='
68 * the variable is added to the child process's environment.
69 *
70 * - If the string does not contain '=', it names an environment
71 * variable that will be removed from the child process's environment.
72 *
b3193252 73 * The memory in .env will be cleaned up automatically during
c7c4bdec
ÆAB
74 * `finish_command` (or during `start_command` when it is unsuccessful).
75 */
29fda24d 76 struct strvec env;
ebcb5d16 77 pid_t pid;
ee4512ed
JH
78
79 int trace2_child_id;
80 uint64_t trace2_child_us_start;
81 const char *trace2_child_class;
82 const char *trace2_hook_name;
83
c20181e3
JS
84 /*
85 * Using .in, .out, .err:
4c4066d9
HW
86 * - Specify 0 for no redirections. No new file descriptor is allocated.
87 * (child inherits stdin, stdout, stderr from parent).
c20181e3
JS
88 * - Specify -1 to have a pipe allocated as follows:
89 * .in: returns the writable pipe end; parent writes to it,
90 * the readable pipe end becomes child's stdin
91 * .out, .err: returns the readable pipe end; parent reads from
92 * it, the writable pipe end becomes child's stdout/stderr
93 * The caller of start_command() must close the returned FDs
94 * after it has completed reading from/writing to it!
95 * - Specify > 0 to set a channel to a particular FD as follows:
96 * .in: a readable FD, becomes child's stdin
97 * .out: a writable FD, becomes child's stdout/stderr
4f41b611 98 * .err: a writable FD, becomes child's stderr
c20181e3
JS
99 * The specified FD is closed by start_command(), even in case
100 * of errors!
101 */
4919bf03 102 int in;
f4bba25b 103 int out;
f3b33f1d 104 int err;
4c4066d9
HW
105
106 /**
107 * To specify a new initial working directory for the sub-process,
108 * specify it in the .dir member.
109 */
1568fea0 110 const char *dir;
4c4066d9 111
f1000898 112 unsigned no_stdin:1;
e4507ae8 113 unsigned no_stdout:1;
b73a4397 114 unsigned no_stderr:1;
539052f4 115 unsigned git_cmd:1; /* if this is to be git sub-command */
4c4066d9
HW
116
117 /**
118 * If the program cannot be found, the functions return -1 and set
119 * errno to ENOENT. Normally, an error message is printed, but if
120 * .silent_exec_failure is set to 1, no message is printed for this
121 * special error condition.
122 */
c024beb5 123 unsigned silent_exec_failure:1;
4c4066d9 124
ee4e2255
JK
125 /**
126 * Run the command from argv[0] using a shell (but note that we may
127 * still optimize out the shell call if the command contains no
128 * metacharacters). Note that further arguments to the command in
129 * argv[1], etc, do not need to be shell-quoted.
130 */
8dba1e63 131 unsigned use_shell:1;
ee4e2255 132
28d04e1e
JS
133 /**
134 * Release any open file handles to the object store before running
135 * the command; This is necessary e.g. when the spawned process may
136 * want to repack because that would delete `.pack` files (and on
137 * Windows, you cannot delete files that are still in use).
138 */
139 unsigned close_object_store:1;
140
ee4e2255 141 unsigned stdout_to_stderr:1;
afe19ff7 142 unsigned clean_on_exit:1;
46df6906 143 unsigned wait_after_clean:1;
ac2fbaa6 144 void (*clean_on_exit_handler)(struct child_process *process);
f1000898
SP
145};
146
3d97ea47
ÆAB
147#define CHILD_PROCESS_INIT { \
148 .args = STRVEC_INIT, \
29fda24d 149 .env = STRVEC_INIT, \
3d97ea47 150}
4c4066d9
HW
151
152/**
53c4be3f 153 * The functions: start_command, finish_command, run_command,
eb5b6b57 154 * run_command_v_opt do the following:
4c4066d9
HW
155 *
156 * - If a system call failed, errno is set and -1 is returned. A diagnostic
157 * is printed.
158 *
159 * - If the program was not found, then -1 is returned and errno is set to
160 * ENOENT; a diagnostic is printed only if .silent_exec_failure is 0.
161 *
162 * - Otherwise, the program is run. If it terminates regularly, its exit
163 * code is returned. No diagnostic is printed, even if the exit code is
164 * non-zero.
165 *
166 * - If the program terminated due to a signal, then the return value is the
167 * signal number + 128, ie. the same value that a POSIX shell's $? would
168 * report. A diagnostic is printed.
169 *
170 */
171
172/**
173 * Initialize a struct child_process variable.
174 */
483bbd4e 175void child_process_init(struct child_process *);
4c4066d9
HW
176
177/**
178 * Release the memory associated with the struct child_process.
179 * Most users of the run-command API don't need to call this
180 * function explicitly because `start_command` invokes it on
181 * failure and `finish_command` calls it automatically already.
182 */
2d71608e 183void child_process_clear(struct child_process *);
4c4066d9 184
55454427 185int is_executable(const char *name);
d3180279 186
3f36e6f3
PB
187/**
188 * Check if the command exists on $PATH. This emulates the path search that
189 * execvp would perform, without actually executing the command so it
190 * can be used before fork() to prepare to run a command using
191 * execve() or after execvp() to diagnose why it failed.
192 *
193 * The caller should ensure that command contains no directory separators.
194 *
195 * Returns 1 if it is found in $PATH or 0 if the command could not be found.
196 */
197int exists_in_PATH(const char *command);
198
4c4066d9
HW
199/**
200 * Start a sub-process. Takes a pointer to a `struct child_process`
201 * that specifies the details and returns pipe FDs (if requested).
202 * See below for details.
203 */
ebcb5d16 204int start_command(struct child_process *);
4c4066d9
HW
205
206/**
207 * Wait for the completion of a sub-process that was started with
208 * start_command().
209 */
ebcb5d16 210int finish_command(struct child_process *);
4c4066d9 211
507d7804 212int finish_command_in_signal(struct child_process *);
4c4066d9
HW
213
214/**
215 * A convenience function that encapsulates a sequence of
216 * start_command() followed by finish_command(). Takes a pointer
217 * to a `struct child_process` that specifies the details.
218 */
f1000898
SP
219int run_command(struct child_process *);
220
850b6ede
JH
221/*
222 * Trigger an auto-gc
223 */
a95ce124 224int run_auto_maintenance(int quiet);
850b6ede 225
3322a9d8
JS
226#define RUN_COMMAND_NO_STDIN (1<<0)
227#define RUN_GIT_CMD (1<<1)
228#define RUN_COMMAND_STDOUT_TO_STDERR (1<<2)
229#define RUN_SILENT_EXEC_FAILURE (1<<3)
230#define RUN_USING_SHELL (1<<4)
231#define RUN_CLEAN_ON_EXIT (1<<5)
232#define RUN_WAIT_AFTER_CLEAN (1<<6)
28d04e1e 233#define RUN_CLOSE_OBJECT_STORE (1<<7)
4c4066d9
HW
234
235/**
ef249b39 236 * Convenience function that encapsulates a sequence of
4c4066d9
HW
237 * start_command() followed by finish_command(). The argument argv
238 * specifies the program and its arguments. The argument opt is zero
239 * or more of the flags `RUN_COMMAND_NO_STDIN`, `RUN_GIT_CMD`,
240 * `RUN_COMMAND_STDOUT_TO_STDERR`, or `RUN_SILENT_EXEC_FAILURE`
241 * that correspond to the members .no_stdin, .git_cmd,
242 * .stdout_to_stderr, .silent_exec_failure of `struct child_process`.
4c4066d9 243 */
9b0b5093 244int run_command_v_opt(const char **argv, int opt);
b1bf95bb 245
911ec99b 246/**
96335bcf
JK
247 * Execute the given command, sending "in" to its stdin, and capturing its
248 * stdout and stderr in the "out" and "err" strbufs. Any of the three may
249 * be NULL to skip processing.
250 *
911ec99b 251 * Returns -1 if starting the command fails or reading fails, and otherwise
96335bcf
JK
252 * returns the exit code of the command. Any output collected in the
253 * buffers is kept even if the command returns a non-zero exit. The hint fields
254 * gives starting sizes for the strbuf allocations.
911ec99b
JK
255 *
256 * The fields of "cmd" should be set up as they would for a normal run_command
96335bcf
JK
257 * invocation. But note that there is no need to set the in, out, or err
258 * fields; pipe_command handles that automatically.
259 */
260int pipe_command(struct child_process *cmd,
261 const char *in, size_t in_len,
262 struct strbuf *out, size_t out_hint,
263 struct strbuf *err, size_t err_hint);
264
265/**
266 * Convenience wrapper around pipe_command for the common case
267 * of capturing only stdout.
911ec99b 268 */
96335bcf
JK
269static inline int capture_command(struct child_process *cmd,
270 struct strbuf *out,
271 size_t hint)
272{
273 return pipe_command(cmd, NULL, 0, out, hint, NULL, 0);
274}
911ec99b 275
2d22c208
JS
276/*
277 * The purpose of the following functions is to feed a pipe by running
278 * a function asynchronously and providing output that the caller reads.
279 *
280 * It is expected that no synchronization and mutual exclusion between
281 * the caller and the feed function is necessary so that the function
282 * can run in a thread without interfering with the caller.
4c4066d9
HW
283 *
284 * The caller:
285 *
286 * 1. allocates and clears (memset(&asy, 0, sizeof(asy));) a
287 * struct async variable;
288 * 2. initializes .proc and .data;
289 * 3. calls start_async();
290 * 4. processes communicates with proc through .in and .out;
291 * 5. closes .in and .out;
292 * 6. calls finish_async().
293 *
294 * There are serious restrictions on what the asynchronous function can do
295 * because this facility is implemented by a thread in the same address
296 * space on most platforms (when pthreads is available), but by a pipe to
297 * a forked process otherwise:
298 *
299 * - It cannot change the program's state (global variables, environment,
300 * etc.) in a way that the caller notices; in other words, .in and .out
301 * are the only communication channels to the caller.
302 *
303 * - It must not change the program's state that the caller of the
304 * facility also uses.
305 *
2d22c208
JS
306 */
307struct async {
4c4066d9
HW
308
309 /**
310 * The function pointer in .proc has the following signature:
311 *
312 * int proc(int in, int out, void *data);
313 *
314 * - in, out specifies a set of file descriptors to which the function
315 * must read/write the data that it needs/produces. The function
316 * *must* close these descriptors before it returns. A descriptor
317 * may be -1 if the caller did not configure a descriptor for that
318 * direction.
319 *
320 * - data is the value that the caller has specified in the .data member
321 * of struct async.
322 *
323 * - The return value of the function is 0 on success and non-zero
324 * on failure. If the function indicates failure, finish_async() will
325 * report failure as well.
326 *
2d22c208 327 */
ae6a5609 328 int (*proc)(int in, int out, void *data);
4c4066d9 329
2d22c208 330 void *data;
4c4066d9
HW
331
332 /**
333 * The members .in, .out are used to provide a set of fd's for
334 * communication between the caller and the callee as follows:
335 *
336 * - Specify 0 to have no file descriptor passed. The callee will
337 * receive -1 in the corresponding argument.
338 *
339 * - Specify < 0 to have a pipe allocated; start_async() replaces
340 * with the pipe FD in the following way:
341 *
342 * .in: Returns the writable pipe end into which the caller
343 * writes; the readable end of the pipe becomes the function's
344 * in argument.
345 *
346 * .out: Returns the readable pipe end from which the caller
347 * reads; the writable end of the pipe becomes the function's
348 * out argument.
349 *
350 * The caller of start_async() must close the returned FDs after it
351 * has completed reading from/writing from them.
352 *
353 * - Specify a file descriptor > 0 to be used by the function:
354 *
355 * .in: The FD must be readable; it becomes the function's in.
356 * .out: The FD must be writable; it becomes the function's out.
357 *
358 * The specified FD is closed by start_async(), even if it fails to
359 * run the function.
360 */
ae6a5609 361 int in; /* caller writes here and closes it */
2d22c208 362 int out; /* caller reads from here and closes it */
f6b60983 363#ifdef NO_PTHREADS
2d22c208 364 pid_t pid;
618ebe9f 365#else
200a76b7 366 pthread_t tid;
ae6a5609
EFL
367 int proc_in;
368 int proc_out;
618ebe9f 369#endif
c792d7b6 370 int isolate_sigpipe;
2d22c208
JS
371};
372
4c4066d9
HW
373/**
374 * Run a function asynchronously. Takes a pointer to a `struct
375 * async` that specifies the details and returns a set of pipe FDs
376 * for communication with the function. See below for details.
377 */
2d22c208 378int start_async(struct async *async);
4c4066d9
HW
379
380/**
381 * Wait for the completion of an asynchronous function that was
382 * started with start_async().
383 */
2d22c208 384int finish_async(struct async *async);
4c4066d9 385
661a8cf4 386int in_async(void);
c0e40a2d 387int async_with_fork(void);
b992fe10 388void check_pipe(int err);
2d22c208 389
c553c72e
SB
390/**
391 * This callback should initialize the child process and preload the
392 * error channel if desired. The preloading of is useful if you want to
393 * have a message printed directly before the output of the child process.
394 * pp_cb is the callback cookie as passed to run_processes_parallel.
395 * You can store a child process specific callback cookie in pp_task_cb.
396 *
fd3aaf53
ÆAB
397 * See run_processes_parallel() below for a discussion of the "struct
398 * strbuf *out" parameter.
399 *
c553c72e
SB
400 * Even after returning 0 to indicate that there are no more processes,
401 * this function will be called again until there are no more running
402 * child processes.
403 *
404 * Return 1 if the next child is ready to run.
405 * Return 0 if there are currently no more tasks to be processed.
406 * To send a signal to other child processes for abortion,
407 * return the negative signal number.
408 */
409typedef int (*get_next_task_fn)(struct child_process *cp,
aa710494 410 struct strbuf *out,
c553c72e
SB
411 void *pp_cb,
412 void **pp_task_cb);
413
414/**
415 * This callback is called whenever there are problems starting
416 * a new process.
417 *
fd3aaf53
ÆAB
418 * See run_processes_parallel() below for a discussion of the "struct
419 * strbuf *out" parameter.
c553c72e
SB
420 *
421 * pp_cb is the callback cookie as passed into run_processes_parallel,
422 * pp_task_cb is the callback cookie as passed into get_next_task_fn.
423 *
424 * Return 0 to continue the parallel processing. To abort return non zero.
425 * To send a signal to other child processes for abortion, return
426 * the negative signal number.
427 */
aa710494 428typedef int (*start_failure_fn)(struct strbuf *out,
c553c72e
SB
429 void *pp_cb,
430 void *pp_task_cb);
431
432/**
433 * This callback is called on every child process that finished processing.
434 *
fd3aaf53
ÆAB
435 * See run_processes_parallel() below for a discussion of the "struct
436 * strbuf *out" parameter.
c553c72e
SB
437 *
438 * pp_cb is the callback cookie as passed into run_processes_parallel,
439 * pp_task_cb is the callback cookie as passed into get_next_task_fn.
440 *
441 * Return 0 to continue the parallel processing. To abort return non zero.
442 * To send a signal to other child processes for abortion, return
443 * the negative signal number.
444 */
445typedef int (*task_finished_fn)(int result,
aa710494 446 struct strbuf *out,
c553c72e
SB
447 void *pp_cb,
448 void *pp_task_cb);
449
450/**
451 * Runs up to n processes at the same time. Whenever a process can be
452 * started, the callback get_next_task_fn is called to obtain the data
453 * required to start another child process.
454 *
455 * The children started via this function run in parallel. Their output
456 * (both stdout and stderr) is routed to stderr in a manner that output
fd3aaf53 457 * from different tasks does not interleave (but see "ungroup" below).
c553c72e 458 *
2a73b3da
SB
459 * start_failure_fn and task_finished_fn can be NULL to omit any
460 * special handling.
fd3aaf53
ÆAB
461 *
462 * If the "ungroup" option isn't specified, the API will set the
463 * "stdout_to_stderr" parameter in "struct child_process" and provide
464 * the callbacks with a "struct strbuf *out" parameter to write output
465 * to. In this case the callbacks must not write to stdout or
466 * stderr as such output will mess up the output of the other parallel
467 * processes. If "ungroup" option is specified callbacks will get a
468 * NULL "struct strbuf *out" parameter, and are responsible for
469 * emitting their own output, including dealing with any race
470 * conditions due to writing in parallel to stdout and stderr.
471 * The "ungroup" option can be enabled by setting the global
472 * "run_processes_parallel_ungroup" to "1" before invoking
473 * run_processes_parallel(), it will be set back to "0" as soon as the
474 * API reads that setting.
c553c72e 475 */
fd3aaf53 476extern int run_processes_parallel_ungroup;
c553c72e
SB
477int run_processes_parallel(int n,
478 get_next_task_fn,
479 start_failure_fn,
480 task_finished_fn,
481 void *pp_cb);
ee4512ed
JH
482int run_processes_parallel_tr2(int n, get_next_task_fn, start_failure_fn,
483 task_finished_fn, void *pp_cb,
484 const char *tr2_category, const char *tr2_label);
c553c72e 485
d1fa9435 486/**
b3193252
ÆAB
487 * Convenience function which prepares env for a command to be run in a
488 * new repo. This adds all GIT_* environment variables to env with the
d1fa9435
JT
489 * exception of GIT_CONFIG_PARAMETERS and GIT_CONFIG_COUNT (which cause the
490 * corresponding environment variables to be unset in the subprocess) and adds
491 * an environment variable pointing to new_git_dir. See local_repo_env in
492 * cache.h for more information.
493 */
b3193252 494void prepare_other_repo_env(struct strvec *env, const char *new_git_dir);
d1fa9435 495
fdb13226
JH
496/**
497 * Possible return values for start_bg_command().
498 */
499enum start_bg_result {
500 /* child process is "ready" */
501 SBGR_READY = 0,
502
503 /* child process could not be started */
504 SBGR_ERROR,
505
506 /* callback error when testing for "ready" */
507 SBGR_CB_ERROR,
508
509 /* timeout expired waiting for child to become "ready" */
510 SBGR_TIMEOUT,
511
512 /* child process exited or was signalled before becomming "ready" */
513 SBGR_DIED,
514};
515
516/**
517 * Callback used by start_bg_command() to ask whether the
518 * child process is ready or needs more time to become "ready".
519 *
520 * The callback will receive the cmd and cb_data arguments given to
521 * start_bg_command().
522 *
523 * Returns 1 is child needs more time (subject to the requested timeout).
524 * Returns 0 if child is "ready".
525 * Returns -1 on any error and cause start_bg_command() to also error out.
526 */
527typedef int(start_bg_wait_cb)(const struct child_process *cmd, void *cb_data);
528
529/**
530 * Start a command in the background. Wait long enough for the child
531 * to become "ready" (as defined by the provided callback). Capture
532 * immediate errors (like failure to start) and any immediate exit
533 * status (such as a shutdown/signal before the child became "ready")
534 * and return this like start_command().
535 *
536 * We run a custom wait loop using the provided callback to wait for
537 * the child to start and become "ready". This is limited by the given
538 * timeout value.
539 *
540 * If the child does successfully start and become "ready", we orphan
541 * it into the background.
542 *
543 * The caller must not call finish_command().
544 *
545 * The opaque cb_data argument will be forwarded to the callback for
546 * any instance data that it might require. This may be NULL.
547 */
548enum start_bg_result start_bg_command(struct child_process *cmd,
549 start_bg_wait_cb *wait_cb,
550 void *cb_data,
551 unsigned int timeout_sec);
552
b1bf95bb 553#endif