Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
convert: separate generic structures and variables from the filter specific ones
author
Ben Peart
<peartben@gmail.com>
Fri, 5 May 2017 15:27:58 +0000
(11:27 -0400)
committer
Junio C Hamano
<gitster@pobox.com>
Mon, 15 May 2017 04:01:57 +0000
(13:01 +0900)
To enable future reuse of the filter.<driver>.process infrastructure,
split the cmd2process structure into two separate parts.
subprocess_entry will now contain the generic data required to manage
the creation and tracking of the child process in a hashmap.
cmd2process is a filter protocol specific structure that is used to
track the negotiated capabilities of the filter.
Signed-off-by: Ben Peart <benpeart@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
convert.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
a810ea9
)
diff --git
a/convert.c
b/convert.c
index 36401fe08759567b7b5d51b891ab3f4d3ea7d442..bfb19beed557099666beaf173ac4866732e53b5f 100644
(file)
--- a/
convert.c
+++ b/
convert.c
@@
-496,26
+496,31
@@
static int apply_single_file_filter(const char *path, const char *src, size_t le
#define CAP_CLEAN (1u<<0)
#define CAP_SMUDGE (1u<<1)
#define CAP_CLEAN (1u<<0)
#define CAP_SMUDGE (1u<<1)
-struct
cmd2process
{
+struct
subprocess_entry
{
struct hashmap_entry ent; /* must be the first member! */
struct hashmap_entry ent; /* must be the first member! */
- unsigned int supported_capabilities;
const char *cmd;
struct child_process process;
};
const char *cmd;
struct child_process process;
};
+struct cmd2process {
+ struct subprocess_entry subprocess; /* must be the first member! */
+ unsigned int supported_capabilities;
+};
+
static int cmd_process_map_initialized;
static struct hashmap cmd_process_map;
static int cmd_process_map_initialized;
static struct hashmap cmd_process_map;
-static int cmd2process_cmp(const struct
cmd2process
*e1,
- const struct
cmd2process
*e2,
+static int cmd2process_cmp(const struct
subprocess_entry
*e1,
+ const struct
subprocess_entry
*e2,
const void *unused)
{
return strcmp(e1->cmd, e2->cmd);
}
const void *unused)
{
return strcmp(e1->cmd, e2->cmd);
}
-static struct
cmd2process
*find_multi_file_filter_entry(struct hashmap *hashmap, const char *cmd)
+static struct
subprocess_entry
*find_multi_file_filter_entry(struct hashmap *hashmap, const char *cmd)
{
{
- struct cmd2process key;
+ struct subprocess_entry key;
+
hashmap_entry_init(&key, strhash(cmd));
key.cmd = cmd;
return hashmap_get(hashmap, &key, NULL);
hashmap_entry_init(&key, strhash(cmd));
key.cmd = cmd;
return hashmap_get(hashmap, &key, NULL);
@@
-541,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
cmd2process
*entry)
+static void kill_multi_file_filter(struct hashmap *hashmap, struct
subprocess_entry
*entry)
{
if (!entry)
return;
{
if (!entry)
return;
@@
-571,8
+576,8
@@
static int start_multi_file_filter_fn(struct cmd2process *entry)
struct string_list cap_list = STRING_LIST_INIT_NODUP;
char *cap_buf;
const char *cap_name;
struct string_list cap_list = STRING_LIST_INIT_NODUP;
char *cap_buf;
const char *cap_name;
- struct child_process *process = &entry->process;
- const char *cmd = entry->cmd;
+ struct child_process *process = &entry->
subprocess.
process;
+ const char *cmd = entry->
subprocess.
cmd;
sigchain_push(SIGPIPE, SIG_IGN);
sigchain_push(SIGPIPE, SIG_IGN);
@@
-632,9
+637,9
@@
static struct cmd2process *start_multi_file_filter(struct hashmap *hashmap, cons
const char *argv[] = { cmd, NULL };
entry = xmalloc(sizeof(*entry));
const char *argv[] = { cmd, NULL };
entry = xmalloc(sizeof(*entry));
- entry->cmd = cmd;
+ entry->
subprocess.
cmd = cmd;
entry->supported_capabilities = 0;
entry->supported_capabilities = 0;
- process = &entry->process;
+ process = &entry->
subprocess.
process;
child_process_init(process);
process->argv = argv;
child_process_init(process);
process->argv = argv;
@@
-654,7
+659,7
@@
static struct cmd2process *start_multi_file_filter(struct hashmap *hashmap, cons
err = start_multi_file_filter_fn(entry);
if (err) {
error("initialization for external filter '%s' failed", cmd);
err = start_multi_file_filter_fn(entry);
if (err) {
error("initialization for external filter '%s' failed", cmd);
- kill_multi_file_filter(hashmap,
entry
);
+ kill_multi_file_filter(hashmap,
&entry->subprocess
);
return NULL;
}
return NULL;
}
@@
-678,7
+683,7
@@
static int apply_multi_file_filter(const char *path, const char *src, size_t len
hashmap_init(&cmd_process_map, (hashmap_cmp_fn) cmd2process_cmp, 0);
entry = NULL;
} else {
hashmap_init(&cmd_process_map, (hashmap_cmp_fn) cmd2process_cmp, 0);
entry = NULL;
} else {
- entry = find_multi_file_filter_entry(&cmd_process_map, cmd);
+ entry =
(struct cmd2process *)
find_multi_file_filter_entry(&cmd_process_map, cmd);
}
fflush(NULL);
}
fflush(NULL);
@@
-688,7
+693,7
@@
static int apply_multi_file_filter(const char *path, const char *src, size_t len
if (!entry)
return 0;
}
if (!entry)
return 0;
}
- process = &entry->process;
+ process = &entry->
subprocess.
process;
if (!(wanted_capability & entry->supported_capabilities))
return 0;
if (!(wanted_capability & entry->supported_capabilities))
return 0;
@@
-759,7
+764,7
@@
static int apply_multi_file_filter(const char *path, const char *src, size_t len
* Force shutdown and restart if another blob requires filtering.
*/
error("external filter '%s' failed", cmd);
* Force shutdown and restart if another blob requires filtering.
*/
error("external filter '%s' failed", cmd);
- kill_multi_file_filter(&cmd_process_map,
entry
);
+ kill_multi_file_filter(&cmd_process_map,
&entry->subprocess
);
}
} else {
strbuf_swap(dst, &nbuf);
}
} else {
strbuf_swap(dst, &nbuf);