refs/files-backend: add longer-scoped copy of string to list
[git.git] / Documentation / technical / api-sub-process.txt
blob793508cf3e75d0e5c0e3ce29053ff0f4ee037b02
1 sub-process API
2 ===============
4 The sub-process API makes it possible to run background sub-processes
5 for the entire lifetime of a Git invocation. If Git needs to communicate
6 with an external process multiple times, then this can reduces the process
7 invocation overhead. Git and the sub-process communicate through stdin and
8 stdout.
10 The sub-processes are kept in a hashmap by command name and looked up
11 via the subprocess_find_entry function.  If an existing instance can not
12 be found then a new process should be created and started.  When the
13 parent git command terminates, all sub-processes are also terminated.
15 This API is based on the run-command API.
17 Data structures
18 ---------------
20 * `struct subprocess_entry`
22 The sub-process structure.  Members should not be accessed directly.
24 Types
25 -----
27 'int(*subprocess_start_fn)(struct subprocess_entry *entry)'::
29         User-supplied function to initialize the sub-process.  This is
30         typically used to negotiate the interface version and capabilities.
33 Functions
34 ---------
36 `cmd2process_cmp`::
38         Function to test two subprocess hashmap entries for equality.
40 `subprocess_start`::
42         Start a subprocess and add it to the subprocess hashmap.
44 `subprocess_stop`::
46         Kill a subprocess and remove it from the subprocess hashmap.
48 `subprocess_find_entry`::
50         Find a subprocess in the subprocess hashmap.
52 `subprocess_get_child_process`::
54         Get the underlying `struct child_process` from a subprocess.
56 `subprocess_read_status`::
58         Helper function to read packets looking for the last "status=<foo>"
59         key/value pair.