summaryrefslogtreecommitdiff
path: root/sub-process.h
diff options
context:
space:
mode:
authorJonathan Tan <jonathantanmy@google.com>2017-07-26 11:17:28 -0700
committerJunio C Hamano <gitster@pobox.com>2017-07-26 12:56:40 -0700
commit7e2e1bbb24a5a0868fc83f1eddf804574f9e4b54 (patch)
treee3b2fd937f6b834e198441e4f1747ce0e530ac22 /sub-process.h
parent487fe1ffcd3b3a38477b7e564f235bb7d1b89ecc (diff)
downloadgit-7e2e1bbb24a5a0868fc83f1eddf804574f9e4b54.tar.gz
Documentation: migrate sub-process docs to header
Move the documentation for the sub-process API from a separate txt file to its header file. Signed-off-by: Jonathan Tan <jonathantanmy@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'sub-process.h')
-rw-r--r--sub-process.h25
1 files changed, 23 insertions, 2 deletions
diff --git a/sub-process.h b/sub-process.h
index 96a2cca360..e546216145 100644
--- a/sub-process.h
+++ b/sub-process.h
@@ -6,12 +6,23 @@
#include "run-command.h"
/*
- * Generic implementation of background process infrastructure.
- * See: Documentation/technical/api-sub-process.txt
+ * The sub-process API makes it possible to run background sub-processes
+ * for the entire lifetime of a Git invocation. If Git needs to communicate
+ * with an external process multiple times, then this can reduces the process
+ * invocation overhead. Git and the sub-process communicate through stdin and
+ * stdout.
+ *
+ * The sub-processes are kept in a hashmap by command name and looked up
+ * via the subprocess_find_entry function. If an existing instance can not
+ * be found then a new process should be created and started. When the
+ * parent git command terminates, all sub-processes are also terminated.
+ *
+ * This API is based on the run-command API.
*/
/* data structures */
+/* Members should not be accessed directly. */
struct subprocess_entry {
struct hashmap_entry ent; /* must be the first member! */
const char *cmd;
@@ -20,21 +31,31 @@ struct subprocess_entry {
/* subprocess functions */
+/* Function to test two subprocess hashmap entries for equality. */
extern int cmd2process_cmp(const void *unused_cmp_data,
const struct subprocess_entry *e1,
const struct subprocess_entry *e2,
const void *unused_keydata);
+/*
+ * User-supplied function to initialize the sub-process. This is
+ * typically used to negotiate the interface version and capabilities.
+ */
typedef int(*subprocess_start_fn)(struct subprocess_entry *entry);
+
+/* Start a subprocess and add it to the subprocess hashmap. */
int subprocess_start(struct hashmap *hashmap, struct subprocess_entry *entry, const char *cmd,
subprocess_start_fn startfn);
+/* Kill a subprocess and remove it from the subprocess hashmap. */
void subprocess_stop(struct hashmap *hashmap, struct subprocess_entry *entry);
+/* Find a subprocess in the subprocess hashmap. */
struct subprocess_entry *subprocess_find_entry(struct hashmap *hashmap, const char *cmd);
/* subprocess helper functions */
+/* Get the underlying `struct child_process` from a subprocess. */
static inline struct child_process *subprocess_get_child_process(
struct subprocess_entry *entry)
{