HTTP(S) is usually one of the most common protocols, using "http" and "https" as the default parameter values of `--uri-protocol`, which can simplify the use of packfile-uri feature on client side when run a git-clone or git-fetch. Signed-off-by: Teng Long <dyroneteng@xxxxxxxxx> --- builtin/pack-objects.c | 18 +++++++++++++++--- fetch-pack.c | 13 ++++++++----- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index de00adbb9e..5f6db92a4c 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -3892,6 +3892,18 @@ static int option_parse_unpack_unreachable(const struct option *opt, return 0; } +static int option_parse_uri_protocol(const struct option *opt, + const char *arg, int unset) +{ + if (!arg) { + string_list_append(&uri_protocols, "http"); + string_list_append(&uri_protocols, "https"); + } else { + string_list_append(&uri_protocols, arg); + } + return 0; +} + int cmd_pack_objects(int argc, const char **argv, const char *prefix) { int use_internal_rev_list = 0; @@ -3995,9 +4007,9 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix) N_("do not pack objects in promisor packfiles")), OPT_BOOL(0, "delta-islands", &use_delta_islands, N_("respect islands during delta compression")), - OPT_STRING_LIST(0, "uri-protocol", &uri_protocols, - N_("protocol"), - N_("exclude any configured uploadpack.blobpackfileuri with this protocol")), + OPT_CALLBACK_F(0, "uri-protocol", NULL, N_("protocol"), + N_("exclude any configured uploadpack.blobpackfileuri with this protocol"), + PARSE_OPT_OPTARG, option_parse_uri_protocol), OPT_END(), }; diff --git a/fetch-pack.c b/fetch-pack.c index c135635e34..511a892d4c 100644 --- a/fetch-pack.c +++ b/fetch-pack.c @@ -1755,11 +1755,14 @@ static void fetch_pack_config(void) git_config_get_bool("transfer.fsckobjects", &transfer_fsck_objects); git_config_get_bool("transfer.advertisesid", &advertise_sid); if (!uri_protocols.nr) { - char *str; - - if (!git_config_get_string("fetch.uriprotocols", &str) && str) { - string_list_split(&uri_protocols, str, ',', -1); - free(str); + const char *value; + + if (!git_config_get_value("fetch.uriprotocols", &value)) { + if (!value || !strcmp(value, "")) { + string_list_append(&uri_protocols, "http"); + string_list_append(&uri_protocols, "https"); + } else + string_list_split(&uri_protocols, value, ',', -1); } } -- 2.32.0.1.g0de8fe24d1.dirty