[PATCH v2 3/4] upload-pack: allow missing promisor objects
- From
John Cai via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Feb 9, 2022, 02:10 UTC
- Message-ID
- <40612b9663b8d20e8cfa25ccfce76c7f97e4934d.1644372606.git.gitgitgadget@gmail.com>
- In-Reply-To
- <pull.1206.v2.git.git.1644372606.gitgitgadget@gmail.com>
From: John Cai <johncai86@gmail.com>
When a git server (A) is being used alongside an http server (B) remote that stores large blobs, and a client fetches objects from both (A) as well as (B), we do not want (A) to fetch missing objects during object traversal.
Add a config value uploadpack.allowmissingpromisor that, when set to true, will allow (A) to skip fetching missing objects.
Based-on-patch-by: Christian Couder <chriscool@tuxfamily.org> Signed-off-by: John Cai <johncai86@gmail.com> --- upload-pack.c | 5 +++++ 1 file changed, 5 insertions(+)
diff --git a/upload-pack.c b/upload-pack.c index 8acc98741bb..39b56650b77 100644 --- a/upload-pack.c +++ b/upload-pack.c @@ -112,6 +112,7 @@ struct upload_pack_data { unsigned allow_ref_in_want : 1; /* v2 only */ unsigned allow_sideband_all : 1; /* v2 only */ unsigned advertise_sid : 1; + unsigned allow_missing_promisor : 1; }; static void upload_pack_data_init(struct upload_pack_data *data) @@ -309,6 +310,8 @@ static void create_pack_file(struct upload_pack_data *pack_data, strvec_push(&pack_objects.args, "--delta-base-offset"); if (pack_data->use_include_tag) strvec_push(&pack_objects.args, "--include-tag"); + if (pack_data->allow_missing_promisor) + strvec_push(&pack_objects.args, "--missing=allow-promisor"); if (pack_data->filter_options.choice) { const char *spec = expand_list_objects_filter_spec(&pack_data->filter_options); @@ -1315,6 +1318,8 @@ static int upload_pack_config(const char *var, const char *value, void *cb_data) data->allow_ref_in_want = git_config_bool(var, value); } else if (!strcmp("uploadpack.allowsidebandall", var)) { data->allow_sideband_all = git_config_bool(var, value); + } else if (!strcmp("uploadpack.allowmissingpromisor", var)) { + data->allow_missing_promisor = git_config_bool(var, value); } else if (!strcmp("core.precomposeunicode", var)) { precomposed_unicode = git_config_bool(var, value); } else if (!strcmp("transfer.advertisesid", var)) {
-- gitgitgadget