Merge branch 'jl/submodule-fetch-on-demand'
* jl/submodule-fetch-on-demand: fetch/pull: Describe --recurse-submodule restrictions in the BUGS section submodule update: Don't fetch when the submodule commit is already present fetch/pull: Don't recurse into a submodule when commits are already present Submodules: Add 'on-demand' value for the 'fetchRecurseSubmodule' option config: teach the fetch.recurseSubmodules option the 'on-demand' value fetch/pull: Add the 'on-demand' value to the --recurse-submodules option fetch/pull: recurse into submodules when necessary Conflicts: builtin/fetch.c submodule.c
This commit is contained in:
@ -28,12 +28,6 @@ enum {
|
||||
TAGS_SET = 2
|
||||
};
|
||||
|
||||
enum {
|
||||
RECURSE_SUBMODULES_OFF = 0,
|
||||
RECURSE_SUBMODULES_DEFAULT = 1,
|
||||
RECURSE_SUBMODULES_ON = 2
|
||||
};
|
||||
|
||||
static int all, append, dry_run, force, keep, multiple, prune, update_head_ok, verbosity;
|
||||
static int progress, recurse_submodules = RECURSE_SUBMODULES_DEFAULT;
|
||||
static int tags = TAGS_DEFAULT;
|
||||
@ -42,6 +36,21 @@ static const char *upload_pack;
|
||||
static struct strbuf default_rla = STRBUF_INIT;
|
||||
static struct transport *transport;
|
||||
static const char *submodule_prefix = "";
|
||||
static const char *recurse_submodules_default;
|
||||
|
||||
static int option_parse_recurse_submodules(const struct option *opt,
|
||||
const char *arg, int unset)
|
||||
{
|
||||
if (unset) {
|
||||
recurse_submodules = RECURSE_SUBMODULES_OFF;
|
||||
} else {
|
||||
if (arg)
|
||||
recurse_submodules = parse_fetch_recurse_submodules_arg(opt->long_name, arg);
|
||||
else
|
||||
recurse_submodules = RECURSE_SUBMODULES_ON;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct option builtin_fetch_options[] = {
|
||||
OPT__VERBOSITY(&verbosity),
|
||||
@ -60,9 +69,9 @@ static struct option builtin_fetch_options[] = {
|
||||
"do not fetch all tags (--no-tags)", TAGS_UNSET),
|
||||
OPT_BOOLEAN('p', "prune", &prune,
|
||||
"prune remote-tracking branches no longer on remote"),
|
||||
OPT_SET_INT(0, "recurse-submodules", &recurse_submodules,
|
||||
{ OPTION_CALLBACK, 0, "recurse-submodules", NULL, "on-demand",
|
||||
"control recursive fetching of submodules",
|
||||
RECURSE_SUBMODULES_ON),
|
||||
PARSE_OPT_OPTARG, option_parse_recurse_submodules },
|
||||
OPT_BOOLEAN(0, "dry-run", &dry_run,
|
||||
"dry run"),
|
||||
OPT_BOOLEAN('k', "keep", &keep, "keep downloaded pack"),
|
||||
@ -73,6 +82,9 @@ static struct option builtin_fetch_options[] = {
|
||||
"deepen history of shallow clone"),
|
||||
{ OPTION_STRING, 0, "submodule-prefix", &submodule_prefix, "dir",
|
||||
"prepend this to submodule path output", PARSE_OPT_HIDDEN },
|
||||
{ OPTION_STRING, 0, "recurse-submodules-default",
|
||||
&recurse_submodules_default, NULL,
|
||||
"default mode for recursion", PARSE_OPT_HIDDEN },
|
||||
OPT_END()
|
||||
};
|
||||
|
||||
@ -284,6 +296,9 @@ static int update_local_ref(struct ref *ref,
|
||||
else {
|
||||
msg = "storing head";
|
||||
what = _("[new branch]");
|
||||
if ((recurse_submodules != RECURSE_SUBMODULES_OFF) &&
|
||||
(recurse_submodules != RECURSE_SUBMODULES_ON))
|
||||
check_for_new_submodule_commits(ref->new_sha1);
|
||||
}
|
||||
|
||||
r = s_update_ref(msg, ref, 0);
|
||||
@ -299,6 +314,9 @@ static int update_local_ref(struct ref *ref,
|
||||
strcpy(quickref, find_unique_abbrev(current->object.sha1, DEFAULT_ABBREV));
|
||||
strcat(quickref, "..");
|
||||
strcat(quickref, find_unique_abbrev(ref->new_sha1, DEFAULT_ABBREV));
|
||||
if ((recurse_submodules != RECURSE_SUBMODULES_OFF) &&
|
||||
(recurse_submodules != RECURSE_SUBMODULES_ON))
|
||||
check_for_new_submodule_commits(ref->new_sha1);
|
||||
r = s_update_ref("fast-forward", ref, 1);
|
||||
sprintf(display, "%c %-*s %-*s -> %s%s", r ? '!' : ' ',
|
||||
TRANSPORT_SUMMARY_WIDTH, quickref, REFCOL_WIDTH, remote,
|
||||
@ -310,6 +328,9 @@ static int update_local_ref(struct ref *ref,
|
||||
strcpy(quickref, find_unique_abbrev(current->object.sha1, DEFAULT_ABBREV));
|
||||
strcat(quickref, "...");
|
||||
strcat(quickref, find_unique_abbrev(ref->new_sha1, DEFAULT_ABBREV));
|
||||
if ((recurse_submodules != RECURSE_SUBMODULES_OFF) &&
|
||||
(recurse_submodules != RECURSE_SUBMODULES_ON))
|
||||
check_for_new_submodule_commits(ref->new_sha1);
|
||||
r = s_update_ref("forced-update", ref, 1);
|
||||
sprintf(display, "%c %-*s %-*s -> %s (%s)", r ? '!' : '+',
|
||||
TRANSPORT_SUMMARY_WIDTH, quickref, REFCOL_WIDTH, remote,
|
||||
@ -810,6 +831,8 @@ static void add_options_to_argv(int *argc, const char **argv)
|
||||
argv[(*argc)++] = "--keep";
|
||||
if (recurse_submodules == RECURSE_SUBMODULES_ON)
|
||||
argv[(*argc)++] = "--recurse-submodules";
|
||||
else if (recurse_submodules == RECURSE_SUBMODULES_ON_DEMAND)
|
||||
argv[(*argc)++] = "--recurse-submodules=on-demand";
|
||||
if (verbosity >= 2)
|
||||
argv[(*argc)++] = "-v";
|
||||
if (verbosity >= 1)
|
||||
@ -951,15 +974,16 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
|
||||
if (!result && (recurse_submodules != RECURSE_SUBMODULES_OFF)) {
|
||||
const char *options[10];
|
||||
int num_options = 0;
|
||||
/* Set recursion as default when we already are recursing */
|
||||
if (submodule_prefix[0])
|
||||
set_config_fetch_recurse_submodules(1);
|
||||
if (recurse_submodules_default) {
|
||||
int arg = parse_fetch_recurse_submodules_arg("--recurse-submodules-default", recurse_submodules_default);
|
||||
set_config_fetch_recurse_submodules(arg);
|
||||
}
|
||||
gitmodules_config();
|
||||
git_config(submodule_config, NULL);
|
||||
add_options_to_argv(&num_options, options);
|
||||
result = fetch_populated_submodules(num_options, options,
|
||||
submodule_prefix,
|
||||
recurse_submodules == RECURSE_SUBMODULES_ON,
|
||||
recurse_submodules,
|
||||
verbosity < 0);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user