convert: rename reusable sub-process functions
Do a mechanical rename of the functions that will become the reusable sub-process module. Signed-off-by: Ben Peart <benpeart@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
7ddb9b2ca9
commit
f514d7d177
40
convert.c
40
convert.c
@ -507,8 +507,8 @@ struct cmd2process {
|
|||||||
unsigned int supported_capabilities;
|
unsigned int supported_capabilities;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int cmd_process_map_initialized;
|
static int subprocess_map_initialized;
|
||||||
static struct hashmap cmd_process_map;
|
static struct hashmap subprocess_map;
|
||||||
|
|
||||||
static int cmd2process_cmp(const struct subprocess_entry *e1,
|
static int cmd2process_cmp(const struct subprocess_entry *e1,
|
||||||
const struct subprocess_entry *e2,
|
const struct subprocess_entry *e2,
|
||||||
@ -517,7 +517,7 @@ static int cmd2process_cmp(const struct subprocess_entry *e1,
|
|||||||
return strcmp(e1->cmd, e2->cmd);
|
return strcmp(e1->cmd, e2->cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct subprocess_entry *find_multi_file_filter_entry(struct hashmap *hashmap, const char *cmd)
|
static struct subprocess_entry *subprocess_find_entry(struct hashmap *hashmap, const char *cmd)
|
||||||
{
|
{
|
||||||
struct subprocess_entry key;
|
struct subprocess_entry key;
|
||||||
|
|
||||||
@ -526,7 +526,7 @@ static struct subprocess_entry *find_multi_file_filter_entry(struct hashmap *has
|
|||||||
return hashmap_get(hashmap, &key, NULL);
|
return hashmap_get(hashmap, &key, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void read_multi_file_filter_status(int fd, struct strbuf *status)
|
static void subprocess_read_status(int fd, struct strbuf *status)
|
||||||
{
|
{
|
||||||
struct strbuf **pair;
|
struct strbuf **pair;
|
||||||
char *line;
|
char *line;
|
||||||
@ -546,7 +546,7 @@ static void read_multi_file_filter_status(int fd, struct strbuf *status)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void kill_multi_file_filter(struct hashmap *hashmap, struct subprocess_entry *entry)
|
static void subprocess_stop(struct hashmap *hashmap, struct subprocess_entry *entry)
|
||||||
{
|
{
|
||||||
if (!entry)
|
if (!entry)
|
||||||
return;
|
return;
|
||||||
@ -558,10 +558,10 @@ static void kill_multi_file_filter(struct hashmap *hashmap, struct subprocess_en
|
|||||||
hashmap_remove(hashmap, entry, NULL);
|
hashmap_remove(hashmap, entry, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void stop_multi_file_filter(struct child_process *process)
|
static void subprocess_exit_handler(struct child_process *process)
|
||||||
{
|
{
|
||||||
sigchain_push(SIGPIPE, SIG_IGN);
|
sigchain_push(SIGPIPE, SIG_IGN);
|
||||||
/* Closing the pipe signals the filter to initiate a shutdown. */
|
/* Closing the pipe signals the subprocess to initiate a shutdown. */
|
||||||
close(process->in);
|
close(process->in);
|
||||||
close(process->out);
|
close(process->out);
|
||||||
sigchain_pop(SIGPIPE);
|
sigchain_pop(SIGPIPE);
|
||||||
@ -630,7 +630,7 @@ done:
|
|||||||
}
|
}
|
||||||
|
|
||||||
typedef int(*subprocess_start_fn)(struct subprocess_entry *entry);
|
typedef int(*subprocess_start_fn)(struct subprocess_entry *entry);
|
||||||
int start_multi_file_filter(struct hashmap *hashmap, struct subprocess_entry *entry, const char *cmd,
|
int subprocess_start(struct hashmap *hashmap, struct subprocess_entry *entry, const char *cmd,
|
||||||
subprocess_start_fn startfn)
|
subprocess_start_fn startfn)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
@ -646,11 +646,11 @@ int start_multi_file_filter(struct hashmap *hashmap, struct subprocess_entry *en
|
|||||||
process->in = -1;
|
process->in = -1;
|
||||||
process->out = -1;
|
process->out = -1;
|
||||||
process->clean_on_exit = 1;
|
process->clean_on_exit = 1;
|
||||||
process->clean_on_exit_handler = stop_multi_file_filter;
|
process->clean_on_exit_handler = subprocess_exit_handler;
|
||||||
|
|
||||||
err = start_command(process);
|
err = start_command(process);
|
||||||
if (err) {
|
if (err) {
|
||||||
error("cannot fork to run external filter '%s'", cmd);
|
error("cannot fork to run subprocess '%s'", cmd);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -658,8 +658,8 @@ int start_multi_file_filter(struct hashmap *hashmap, struct subprocess_entry *en
|
|||||||
|
|
||||||
err = startfn(entry);
|
err = startfn(entry);
|
||||||
if (err) {
|
if (err) {
|
||||||
error("initialization for external filter '%s' failed", cmd);
|
error("initialization for subprocess '%s' failed", cmd);
|
||||||
kill_multi_file_filter(hashmap, entry);
|
subprocess_stop(hashmap, entry);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -678,12 +678,12 @@ static int apply_multi_file_filter(const char *path, const char *src, size_t len
|
|||||||
struct strbuf filter_status = STRBUF_INIT;
|
struct strbuf filter_status = STRBUF_INIT;
|
||||||
const char *filter_type;
|
const char *filter_type;
|
||||||
|
|
||||||
if (!cmd_process_map_initialized) {
|
if (!subprocess_map_initialized) {
|
||||||
cmd_process_map_initialized = 1;
|
subprocess_map_initialized = 1;
|
||||||
hashmap_init(&cmd_process_map, (hashmap_cmp_fn) cmd2process_cmp, 0);
|
hashmap_init(&subprocess_map, (hashmap_cmp_fn) cmd2process_cmp, 0);
|
||||||
entry = NULL;
|
entry = NULL;
|
||||||
} else {
|
} else {
|
||||||
entry = (struct cmd2process *)find_multi_file_filter_entry(&cmd_process_map, cmd);
|
entry = (struct cmd2process *)subprocess_find_entry(&subprocess_map, cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
fflush(NULL);
|
fflush(NULL);
|
||||||
@ -692,7 +692,7 @@ static int apply_multi_file_filter(const char *path, const char *src, size_t len
|
|||||||
entry = xmalloc(sizeof(*entry));
|
entry = xmalloc(sizeof(*entry));
|
||||||
entry->supported_capabilities = 0;
|
entry->supported_capabilities = 0;
|
||||||
|
|
||||||
if (start_multi_file_filter(&cmd_process_map, &entry->subprocess, cmd, start_multi_file_filter_fn)) {
|
if (subprocess_start(&subprocess_map, &entry->subprocess, cmd, start_multi_file_filter_fn)) {
|
||||||
free(entry);
|
free(entry);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -737,7 +737,7 @@ static int apply_multi_file_filter(const char *path, const char *src, size_t len
|
|||||||
if (err)
|
if (err)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
read_multi_file_filter_status(process->out, &filter_status);
|
subprocess_read_status(process->out, &filter_status);
|
||||||
err = strcmp(filter_status.buf, "success");
|
err = strcmp(filter_status.buf, "success");
|
||||||
if (err)
|
if (err)
|
||||||
goto done;
|
goto done;
|
||||||
@ -746,7 +746,7 @@ static int apply_multi_file_filter(const char *path, const char *src, size_t len
|
|||||||
if (err)
|
if (err)
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
read_multi_file_filter_status(process->out, &filter_status);
|
subprocess_read_status(process->out, &filter_status);
|
||||||
err = strcmp(filter_status.buf, "success");
|
err = strcmp(filter_status.buf, "success");
|
||||||
|
|
||||||
done:
|
done:
|
||||||
@ -768,7 +768,7 @@ done:
|
|||||||
* Force shutdown and restart if another blob requires filtering.
|
* Force shutdown and restart if another blob requires filtering.
|
||||||
*/
|
*/
|
||||||
error("external filter '%s' failed", cmd);
|
error("external filter '%s' failed", cmd);
|
||||||
kill_multi_file_filter(&cmd_process_map, &entry->subprocess);
|
subprocess_stop(&subprocess_map, &entry->subprocess);
|
||||||
free(entry);
|
free(entry);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user