Merge branch 'nd/fetch-multi-gc-once'
"git fetch" that grabs from a group of remotes learned to run the auto-gc only once at the very end. * nd/fetch-multi-gc-once: fetch: only run 'gc' once when fetching multiple remotes
This commit is contained in:
@ -88,6 +88,10 @@ ifndef::git-pull[]
|
|||||||
Allow several <repository> and <group> arguments to be
|
Allow several <repository> and <group> arguments to be
|
||||||
specified. No <refspec>s may be specified.
|
specified. No <refspec>s may be specified.
|
||||||
|
|
||||||
|
--[no-]auto-gc::
|
||||||
|
Run `git gc --auto` at the end to perform garbage collection
|
||||||
|
if needed. This is enabled by default.
|
||||||
|
|
||||||
-p::
|
-p::
|
||||||
--prune::
|
--prune::
|
||||||
Before fetching, remove any remote-tracking references that no
|
Before fetching, remove any remote-tracking references that no
|
||||||
|
@ -48,6 +48,7 @@ static int prune_tags = -1; /* unspecified */
|
|||||||
|
|
||||||
static int all, append, dry_run, force, keep, multiple, update_head_ok, verbosity, deepen_relative;
|
static int all, append, dry_run, force, keep, multiple, update_head_ok, verbosity, deepen_relative;
|
||||||
static int progress = -1;
|
static int progress = -1;
|
||||||
|
static int enable_auto_gc = 1;
|
||||||
static int tags = TAGS_DEFAULT, unshallow, update_shallow, deepen;
|
static int tags = TAGS_DEFAULT, unshallow, update_shallow, deepen;
|
||||||
static int max_children = 1;
|
static int max_children = 1;
|
||||||
static enum transport_family family;
|
static enum transport_family family;
|
||||||
@ -169,6 +170,8 @@ static struct option builtin_fetch_options[] = {
|
|||||||
OPT_STRING_LIST(0, "negotiation-tip", &negotiation_tip, N_("revision"),
|
OPT_STRING_LIST(0, "negotiation-tip", &negotiation_tip, N_("revision"),
|
||||||
N_("report that we have only objects reachable from this object")),
|
N_("report that we have only objects reachable from this object")),
|
||||||
OPT_PARSE_LIST_OBJECTS_FILTER(&filter_options),
|
OPT_PARSE_LIST_OBJECTS_FILTER(&filter_options),
|
||||||
|
OPT_BOOL(0, "auto-gc", &enable_auto_gc,
|
||||||
|
N_("run 'gc --auto' after fetching")),
|
||||||
OPT_END()
|
OPT_END()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1432,7 +1435,7 @@ static int fetch_multiple(struct string_list *list)
|
|||||||
return errcode;
|
return errcode;
|
||||||
}
|
}
|
||||||
|
|
||||||
argv_array_pushl(&argv, "fetch", "--append", NULL);
|
argv_array_pushl(&argv, "fetch", "--append", "--no-auto-gc", NULL);
|
||||||
add_options_to_argv(&argv);
|
add_options_to_argv(&argv);
|
||||||
|
|
||||||
for (i = 0; i < list->nr; i++) {
|
for (i = 0; i < list->nr; i++) {
|
||||||
@ -1682,11 +1685,13 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
|
|||||||
|
|
||||||
close_object_store(the_repository->objects);
|
close_object_store(the_repository->objects);
|
||||||
|
|
||||||
argv_array_pushl(&argv_gc_auto, "gc", "--auto", NULL);
|
if (enable_auto_gc) {
|
||||||
if (verbosity < 0)
|
argv_array_pushl(&argv_gc_auto, "gc", "--auto", NULL);
|
||||||
argv_array_push(&argv_gc_auto, "--quiet");
|
if (verbosity < 0)
|
||||||
run_command_v_opt(argv_gc_auto.argv, RUN_GIT_CMD);
|
argv_array_push(&argv_gc_auto, "--quiet");
|
||||||
argv_array_clear(&argv_gc_auto);
|
run_command_v_opt(argv_gc_auto.argv, RUN_GIT_CMD);
|
||||||
|
argv_array_clear(&argv_gc_auto);
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -105,9 +105,12 @@ test_expect_success 'git fetch --multiple (two remotes)' '
|
|||||||
git remote rm origin &&
|
git remote rm origin &&
|
||||||
git remote add one ../one &&
|
git remote add one ../one &&
|
||||||
git remote add two ../two &&
|
git remote add two ../two &&
|
||||||
git fetch --multiple one two &&
|
GIT_TRACE=1 git fetch --multiple one two 2>trace &&
|
||||||
git branch -r > output &&
|
git branch -r > output &&
|
||||||
test_cmp ../expect output)
|
test_cmp ../expect output &&
|
||||||
|
grep "built-in: git gc" trace >gc &&
|
||||||
|
test_line_count = 1 gc
|
||||||
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'git fetch --multiple (bad remote names)' '
|
test_expect_success 'git fetch --multiple (bad remote names)' '
|
||||||
|
Reference in New Issue
Block a user