fetch: after refetch, encourage auto gc repacking
After invoking `fetch --refetch`, the object db will likely contain many duplicate objects. If auto-maintenance is enabled, invoke it with appropriate settings to encourage repacking/consolidation. * gc.autoPackLimit: unless this is set to 0 (disabled), override the value to 1 to force pack consolidation. * maintenance.incremental-repack.auto: unless this is set to 0, override the value to -1 to force incremental repacking. Signed-off-by: Robert Coup <robert@coup.net.nz> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
011b775727
commit
7390f05a3c
|
|
@ -169,7 +169,8 @@ ifndef::git-pull[]
|
||||||
associated objects that are already present locally, this option fetches
|
associated objects that are already present locally, this option fetches
|
||||||
all objects as a fresh clone would. Use this to reapply a partial clone
|
all objects as a fresh clone would. Use this to reapply a partial clone
|
||||||
filter from configuration or using `--filter=` when the filter
|
filter from configuration or using `--filter=` when the filter
|
||||||
definition has changed.
|
definition has changed. Automatic post-fetch maintenance will perform
|
||||||
|
object database pack consolidation to remove any duplicate objects.
|
||||||
endif::git-pull[]
|
endif::git-pull[]
|
||||||
|
|
||||||
--refmap=<refspec>::
|
--refmap=<refspec>::
|
||||||
|
|
|
||||||
|
|
@ -2226,8 +2226,25 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
|
||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enable_auto_gc)
|
if (enable_auto_gc) {
|
||||||
|
if (refetch) {
|
||||||
|
/*
|
||||||
|
* Hint auto-maintenance strongly to encourage repacking,
|
||||||
|
* but respect config settings disabling it.
|
||||||
|
*/
|
||||||
|
int opt_val;
|
||||||
|
if (git_config_get_int("gc.autopacklimit", &opt_val))
|
||||||
|
opt_val = -1;
|
||||||
|
if (opt_val != 0)
|
||||||
|
git_config_push_parameter("gc.autoPackLimit=1");
|
||||||
|
|
||||||
|
if (git_config_get_int("maintenance.incremental-repack.auto", &opt_val))
|
||||||
|
opt_val = -1;
|
||||||
|
if (opt_val != 0)
|
||||||
|
git_config_push_parameter("maintenance.incremental-repack.auto=-1");
|
||||||
|
}
|
||||||
run_auto_maintenance(verbosity < 0);
|
run_auto_maintenance(verbosity < 0);
|
||||||
|
}
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
string_list_clear(&list, 0);
|
string_list_clear(&list, 0);
|
||||||
|
|
|
||||||
|
|
@ -216,6 +216,35 @@ test_expect_success 'fetch --refetch works with a shallow clone' '
|
||||||
test_line_count = 6 observed
|
test_line_count = 6 observed
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'fetch --refetch triggers repacking' '
|
||||||
|
GIT_TRACE2_CONFIG_PARAMS=gc.autoPackLimit,maintenance.incremental-repack.auto &&
|
||||||
|
export GIT_TRACE2_CONFIG_PARAMS &&
|
||||||
|
|
||||||
|
GIT_TRACE2_EVENT="$PWD/trace1.event" \
|
||||||
|
git -C pc1 fetch --refetch origin &&
|
||||||
|
test_subcommand git maintenance run --auto --no-quiet <trace1.event &&
|
||||||
|
grep \"param\":\"gc.autopacklimit\",\"value\":\"1\" trace1.event &&
|
||||||
|
grep \"param\":\"maintenance.incremental-repack.auto\",\"value\":\"-1\" trace1.event &&
|
||||||
|
|
||||||
|
GIT_TRACE2_EVENT="$PWD/trace2.event" \
|
||||||
|
git -c protocol.version=0 \
|
||||||
|
-c gc.autoPackLimit=0 \
|
||||||
|
-c maintenance.incremental-repack.auto=1234 \
|
||||||
|
-C pc1 fetch --refetch origin &&
|
||||||
|
test_subcommand git maintenance run --auto --no-quiet <trace2.event &&
|
||||||
|
grep \"param\":\"gc.autopacklimit\",\"value\":\"0\" trace2.event &&
|
||||||
|
grep \"param\":\"maintenance.incremental-repack.auto\",\"value\":\"-1\" trace2.event &&
|
||||||
|
|
||||||
|
GIT_TRACE2_EVENT="$PWD/trace3.event" \
|
||||||
|
git -c protocol.version=0 \
|
||||||
|
-c gc.autoPackLimit=1234 \
|
||||||
|
-c maintenance.incremental-repack.auto=0 \
|
||||||
|
-C pc1 fetch --refetch origin &&
|
||||||
|
test_subcommand git maintenance run --auto --no-quiet <trace3.event &&
|
||||||
|
grep \"param\":\"gc.autopacklimit\",\"value\":\"1\" trace3.event &&
|
||||||
|
grep \"param\":\"maintenance.incremental-repack.auto\",\"value\":\"0\" trace3.event
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'partial clone with transfer.fsckobjects=1 works with submodules' '
|
test_expect_success 'partial clone with transfer.fsckobjects=1 works with submodules' '
|
||||||
test_create_repo submodule &&
|
test_create_repo submodule &&
|
||||||
test_commit -C submodule mycommit &&
|
test_commit -C submodule mycommit &&
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue