Merge branch 'dj/fetch-all-tags' into maint
"git fetch --all", when passed "--no-tags", did not honor the "--no-tags" option while fetching from individual remotes (the same issue existed with "--tags", but combination "--all --tags" makes much less sense than "--all --no-tags"). * dj/fetch-all-tags: fetch --all: pass --tags/--no-tags through to each remote submodule: use argv_array instead of hand-building arrays fetch: use argv_array instead of hand-building arrays argv-array: fix bogus cast when freeing array argv-array: add pop function
This commit is contained in:
31
submodule.c
31
submodule.c
@ -588,13 +588,13 @@ static void calculate_changed_submodule_paths(void)
|
||||
initialized_fetch_ref_tips = 0;
|
||||
}
|
||||
|
||||
int fetch_populated_submodules(int num_options, const char **options,
|
||||
int fetch_populated_submodules(const struct argv_array *options,
|
||||
const char *prefix, int command_line_option,
|
||||
int quiet)
|
||||
{
|
||||
int i, result = 0, argc = 0, default_argc;
|
||||
int i, result = 0;
|
||||
struct child_process cp;
|
||||
const char **argv;
|
||||
struct argv_array argv = ARGV_ARRAY_INIT;
|
||||
struct string_list_item *name_for_path;
|
||||
const char *work_tree = get_git_work_tree();
|
||||
if (!work_tree)
|
||||
@ -604,17 +604,13 @@ int fetch_populated_submodules(int num_options, const char **options,
|
||||
if (read_cache() < 0)
|
||||
die("index file corrupt");
|
||||
|
||||
/* 6: "fetch" (options) --recurse-submodules-default default "--submodule-prefix" prefix NULL */
|
||||
argv = xcalloc(num_options + 6, sizeof(const char *));
|
||||
argv[argc++] = "fetch";
|
||||
for (i = 0; i < num_options; i++)
|
||||
argv[argc++] = options[i];
|
||||
argv[argc++] = "--recurse-submodules-default";
|
||||
default_argc = argc++;
|
||||
argv[argc++] = "--submodule-prefix";
|
||||
argv_array_push(&argv, "fetch");
|
||||
for (i = 0; i < options->argc; i++)
|
||||
argv_array_push(&argv, options->argv[i]);
|
||||
argv_array_push(&argv, "--recurse-submodules-default");
|
||||
/* default value, "--submodule-prefix" and its value are added later */
|
||||
|
||||
memset(&cp, 0, sizeof(cp));
|
||||
cp.argv = argv;
|
||||
cp.env = local_repo_env;
|
||||
cp.git_cmd = 1;
|
||||
cp.no_stdin = 1;
|
||||
@ -674,16 +670,21 @@ int fetch_populated_submodules(int num_options, const char **options,
|
||||
if (!quiet)
|
||||
printf("Fetching submodule %s%s\n", prefix, ce->name);
|
||||
cp.dir = submodule_path.buf;
|
||||
argv[default_argc] = default_argv;
|
||||
argv[argc] = submodule_prefix.buf;
|
||||
argv_array_push(&argv, default_argv);
|
||||
argv_array_push(&argv, "--submodule-prefix");
|
||||
argv_array_push(&argv, submodule_prefix.buf);
|
||||
cp.argv = argv.argv;
|
||||
if (run_command(&cp))
|
||||
result = 1;
|
||||
argv_array_pop(&argv);
|
||||
argv_array_pop(&argv);
|
||||
argv_array_pop(&argv);
|
||||
}
|
||||
strbuf_release(&submodule_path);
|
||||
strbuf_release(&submodule_git_dir);
|
||||
strbuf_release(&submodule_prefix);
|
||||
}
|
||||
free(argv);
|
||||
argv_array_clear(&argv);
|
||||
out:
|
||||
string_list_clear(&changed_submodule_paths, 1);
|
||||
return result;
|
||||
|
Reference in New Issue
Block a user