X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=submodule.c;h=0b709bc2914335853e7525076f5e1d026d5dd779;hb=916034b93ce45bdedfb1c5cef270e6eba2a26fea;hp=08756387e207700861cfa6dac039334ecd53c7a1;hpb=cec3e186f7b76cdced54286ef1da42b6978c4c8d;p=git.git diff --git a/submodule.c b/submodule.c index 08756387e..0b709bc29 100644 --- a/submodule.c +++ b/submodule.c @@ -9,6 +9,7 @@ #include "refs.h" #include "string-list.h" #include "sha1-array.h" +#include "argv-array.h" static struct string_list config_name_for_path; static struct string_list config_fetch_recurse_submodules_for_name; @@ -496,56 +497,26 @@ void check_for_new_submodule_commits(unsigned char new_sha1[20]) sha1_array_append(&ref_tips_after_fetch, new_sha1); } -struct argv_array { - const char **argv; - unsigned int argc; - unsigned int alloc; -}; - -static void init_argv(struct argv_array *array) -{ - array->argv = NULL; - array->argc = 0; - array->alloc = 0; -} - -static void push_argv(struct argv_array *array, const char *value) -{ - ALLOC_GROW(array->argv, array->argc + 2, array->alloc); - array->argv[array->argc++] = xstrdup(value); - array->argv[array->argc] = NULL; -} - -static void clear_argv(struct argv_array *array) -{ - int i; - for (i = 0; i < array->argc; i++) - free((char **)array->argv[i]); - free(array->argv); - init_argv(array); -} - static void add_sha1_to_argv(const unsigned char sha1[20], void *data) { - push_argv(data, sha1_to_hex(sha1)); + argv_array_push(data, sha1_to_hex(sha1)); } static void calculate_changed_submodule_paths(void) { struct rev_info rev; struct commit *commit; - struct argv_array argv; + struct argv_array argv = ARGV_ARRAY_INIT; /* No need to check if there are no submodules configured */ if (!config_name_for_path.nr) return; init_revisions(&rev, NULL); - init_argv(&argv); - push_argv(&argv, "--"); /* argv[0] program name */ + argv_array_push(&argv, "--"); /* argv[0] program name */ sha1_array_for_each_unique(&ref_tips_after_fetch, add_sha1_to_argv, &argv); - push_argv(&argv, "--not"); + argv_array_push(&argv, "--not"); sha1_array_for_each_unique(&ref_tips_before_fetch, add_sha1_to_argv, &argv); setup_revisions(argv.argc, argv.argv, &rev, NULL); @@ -573,7 +544,7 @@ static void calculate_changed_submodule_paths(void) } } - clear_argv(&argv); + argv_array_clear(&argv); sha1_array_clear(&ref_tips_before_fetch); sha1_array_clear(&ref_tips_after_fetch); initialized_fetch_ref_tips = 0;