progress: simplify "delayed" progress API
[git] / sub-process.h
1 #ifndef SUBPROCESS_H
2 #define SUBPROCESS_H
3
4 #include "git-compat-util.h"
5 #include "hashmap.h"
6 #include "run-command.h"
7
8 /*
9  * Generic implementation of background process infrastructure.
10  * See: Documentation/technical/api-sub-process.txt
11  */
12
13  /* data structures */
14
15 struct subprocess_entry {
16         struct hashmap_entry ent; /* must be the first member! */
17         const char *cmd;
18         struct child_process process;
19 };
20
21 /* subprocess functions */
22
23 extern int cmd2process_cmp(const void *unused_cmp_data,
24                            const struct subprocess_entry *e1,
25                            const struct subprocess_entry *e2,
26                            const void *unused_keydata);
27
28 typedef int(*subprocess_start_fn)(struct subprocess_entry *entry);
29 int subprocess_start(struct hashmap *hashmap, struct subprocess_entry *entry, const char *cmd,
30                 subprocess_start_fn startfn);
31
32 void subprocess_stop(struct hashmap *hashmap, struct subprocess_entry *entry);
33
34 struct subprocess_entry *subprocess_find_entry(struct hashmap *hashmap, const char *cmd);
35
36 /* subprocess helper functions */
37
38 static inline struct child_process *subprocess_get_child_process(
39                 struct subprocess_entry *entry)
40 {
41         return &entry->process;
42 }
43
44 /*
45  * Helper function that will read packets looking for "status=<foo>"
46  * key/value pairs and return the value from the last "status" packet
47  */
48
49 int subprocess_read_status(int fd, struct strbuf *status);
50
51 #endif