repack: add config to skip updating server info

By default, git-repack(1) will update server info that is required by
the dumb HTTP transport. This can be skipped by passing the `-n` flag,
but what we're noticably missing is a config option to permanently
disable updating this information.

Add a new option "repack.updateServerInfo" which can be used to disable
the logic. Most hosting providers have turned off the dumb HTTP protocol
anyway, and on the client-side it woudln't typically be useful either.
Giving a persistent way to disable this feature thus makes quite some
sense to avoid wasting compute cycles and storage.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Patrick Steinhardt 2022-03-14 08:42:51 +01:00 committed by Junio C Hamano
parent 64a6151da7
commit a2565c48e4
3 changed files with 28 additions and 1 deletions

View File

@ -25,3 +25,8 @@ repack.writeBitmaps::
space and extra time spent on the initial repack. This has space and extra time spent on the initial repack. This has
no effect if multiple packfiles are created. no effect if multiple packfiles are created.
Defaults to true on bare repos, false otherwise. Defaults to true on bare repos, false otherwise.
repack.updateServerInfo::
If set to false, linkgit:git-repack[1] will not run
linkgit:git-update-server-info[1]. Defaults to true. Can be overridden
when true by the `-n` option of linkgit:git-repack[1].

View File

@ -22,6 +22,7 @@ static int delta_base_offset = 1;
static int pack_kept_objects = -1; static int pack_kept_objects = -1;
static int write_bitmaps = -1; static int write_bitmaps = -1;
static int use_delta_islands; static int use_delta_islands;
static int run_update_server_info = 1;
static char *packdir, *packtmp_name, *packtmp; static char *packdir, *packtmp_name, *packtmp;
static const char *const git_repack_usage[] = { static const char *const git_repack_usage[] = {
@ -54,6 +55,10 @@ static int repack_config(const char *var, const char *value, void *cb)
use_delta_islands = git_config_bool(var, value); use_delta_islands = git_config_bool(var, value);
return 0; return 0;
} }
if (strcmp(var, "repack.updateserverinfo") == 0) {
run_update_server_info = git_config_bool(var, value);
return 0;
}
return git_default_config(var, value, cb); return git_default_config(var, value, cb);
} }
@ -620,7 +625,6 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
const char *unpack_unreachable = NULL; const char *unpack_unreachable = NULL;
int keep_unreachable = 0; int keep_unreachable = 0;
struct string_list keep_pack_list = STRING_LIST_INIT_NODUP; struct string_list keep_pack_list = STRING_LIST_INIT_NODUP;
int run_update_server_info = 1;
struct pack_objects_args po_args = {NULL}; struct pack_objects_args po_args = {NULL};
int geometric_factor = 0; int geometric_factor = 0;
int write_midx = 0; int write_midx = 0;

View File

@ -417,4 +417,22 @@ test_expect_success '-n skips updating server info' '
test_server_info_missing test_server_info_missing
' '
test_expect_success 'repack.updateServerInfo=true updates server info' '
test_server_info_cleanup &&
git -C update-server-info -c repack.updateServerInfo=true repack &&
test_server_info_present
'
test_expect_success 'repack.updateServerInfo=false skips updating server info' '
test_server_info_cleanup &&
git -C update-server-info -c repack.updateServerInfo=false repack &&
test_server_info_missing
'
test_expect_success '-n overrides repack.updateServerInfo=true' '
test_server_info_cleanup &&
git -C update-server-info -c repack.updateServerInfo=true repack -n &&
test_server_info_missing
'
test_done test_done