diff options
author | Ben Peart <peartben@gmail.com> | 2017-05-05 11:27:57 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-05-15 13:01:57 +0900 |
commit | a810ea9945d5959b6cf73d117bc0f20fde58c556 (patch) | |
tree | 5c74dc971406001883c3527f058d7e6a83b6dd9e | |
parent | 7e936842f54c98eb41fb46c94da417065fe333f5 (diff) | |
download | git-a810ea9945d5959b6cf73d117bc0f20fde58c556.tar.gz |
convert: split start_multi_file_filter() into two separate functions
To enable future reuse of the filter.<driver>.process infrastructure,
split start_multi_file_filter() into two separate parts.
start_multi_file_filter() will now only contain the generic logic to
manage the creation and tracking of the child process in a hashmap.
start_multi_file_filter_fn() is a protocol specific initialization
function that will negotiate the multi-file-filter interface version
and capabilities.
Signed-off-by: Ben Peart <benpeart@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | convert.c | 58 |
1 files changed, 34 insertions, 24 deletions
@@ -565,35 +565,14 @@ static void stop_multi_file_filter(struct child_process *process) finish_command(process); } -static struct cmd2process *start_multi_file_filter(struct hashmap *hashmap, const char *cmd) +static int start_multi_file_filter_fn(struct cmd2process *entry) { int err; - struct cmd2process *entry; - struct child_process *process; - const char *argv[] = { cmd, NULL }; struct string_list cap_list = STRING_LIST_INIT_NODUP; char *cap_buf; const char *cap_name; - - entry = xmalloc(sizeof(*entry)); - entry->cmd = cmd; - entry->supported_capabilities = 0; - process = &entry->process; - - child_process_init(process); - process->argv = argv; - process->use_shell = 1; - process->in = -1; - process->out = -1; - process->clean_on_exit = 1; - process->clean_on_exit_handler = stop_multi_file_filter; - - if (start_command(process)) { - error("cannot fork to run external filter '%s'", cmd); - return NULL; - } - - hashmap_entry_init(entry, strhash(cmd)); + struct child_process *process = &entry->process; + const char *cmd = entry->cmd; sigchain_push(SIGPIPE, SIG_IGN); @@ -642,6 +621,37 @@ static struct cmd2process *start_multi_file_filter(struct hashmap *hashmap, cons done: sigchain_pop(SIGPIPE); + return err; +} + +static struct cmd2process *start_multi_file_filter(struct hashmap *hashmap, const char *cmd) +{ + int err; + struct cmd2process *entry; + struct child_process *process; + const char *argv[] = { cmd, NULL }; + + entry = xmalloc(sizeof(*entry)); + entry->cmd = cmd; + entry->supported_capabilities = 0; + process = &entry->process; + + child_process_init(process); + process->argv = argv; + process->use_shell = 1; + process->in = -1; + process->out = -1; + process->clean_on_exit = 1; + process->clean_on_exit_handler = stop_multi_file_filter; + + if (start_command(process)) { + error("cannot fork to run external filter '%s'", cmd); + return NULL; + } + + hashmap_entry_init(entry, strhash(cmd)); + + err = start_multi_file_filter_fn(entry); if (err) { error("initialization for external filter '%s' failed", cmd); kill_multi_file_filter(hashmap, entry); |