From: John Cai <johncai86@xxxxxxxxx> 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@xxxxxxxxxxxxx> Signed-off-by: John Cai <johncai86@xxxxxxxxx> --- 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