6
6
#include "run-command.h"
7
7
8
8
/*
9
- * Generic implementation of background process infrastructure.
10
- * See: Documentation/technical/api-sub-process.txt
9
+ * The sub-process API makes it possible to run background sub-processes
10
+ * for the entire lifetime of a Git invocation. If Git needs to communicate
11
+ * with an external process multiple times, then this can reduces the process
12
+ * invocation overhead. Git and the sub-process communicate through stdin and
13
+ * stdout.
14
+ *
15
+ * The sub-processes are kept in a hashmap by command name and looked up
16
+ * via the subprocess_find_entry function. If an existing instance can not
17
+ * be found then a new process should be created and started. When the
18
+ * parent git command terminates, all sub-processes are also terminated.
19
+ *
20
+ * This API is based on the run-command API.
11
21
*/
12
22
13
23
/* data structures */
14
24
25
+ /* Members should not be accessed directly. */
15
26
struct subprocess_entry {
16
27
struct hashmap_entry ent ; /* must be the first member! */
17
28
const char * cmd ;
@@ -20,21 +31,31 @@ struct subprocess_entry {
20
31
21
32
/* subprocess functions */
22
33
34
+ /* Function to test two subprocess hashmap entries for equality. */
23
35
extern int cmd2process_cmp (const void * unused_cmp_data ,
24
36
const struct subprocess_entry * e1 ,
25
37
const struct subprocess_entry * e2 ,
26
38
const void * unused_keydata );
27
39
40
+ /*
41
+ * User-supplied function to initialize the sub-process. This is
42
+ * typically used to negotiate the interface version and capabilities.
43
+ */
28
44
typedef int (* subprocess_start_fn )(struct subprocess_entry * entry );
45
+
46
+ /* Start a subprocess and add it to the subprocess hashmap. */
29
47
int subprocess_start (struct hashmap * hashmap , struct subprocess_entry * entry , const char * cmd ,
30
48
subprocess_start_fn startfn );
31
49
50
+ /* Kill a subprocess and remove it from the subprocess hashmap. */
32
51
void subprocess_stop (struct hashmap * hashmap , struct subprocess_entry * entry );
33
52
53
+ /* Find a subprocess in the subprocess hashmap. */
34
54
struct subprocess_entry * subprocess_find_entry (struct hashmap * hashmap , const char * cmd );
35
55
36
56
/* subprocess helper functions */
37
57
58
+ /* Get the underlying `struct child_process` from a subprocess. */
38
59
static inline struct child_process * subprocess_get_child_process (
39
60
struct subprocess_entry * entry )
40
61
{
0 commit comments