transport: introduce parse_transport_option() method

Add the `parse_transport_option()` method to parse the `push.pushOption`
configuration. This method will also be used in the next commit to
handle the new `remote.<name>.serverOption` configuration for setting
server options in Git protocol v2.

Signed-off-by: Xing Xin <xingxin.xx@bytedance.com>
Reviewed-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Xing Xin 2024-10-08 03:38:15 +00:00 committed by Junio C Hamano
parent 777489f9e0
commit 06708ce180
3 changed files with 17 additions and 8 deletions

View File

@ -519,14 +519,7 @@ static int git_push_config(const char *k, const char *v,
RECURSE_SUBMODULES_ON_DEMAND : RECURSE_SUBMODULES_OFF;
recurse_submodules = val;
} else if (!strcmp(k, "push.pushoption")) {
if (!v)
return config_error_nonbool(k);
else
if (!*v)
string_list_clear(&push_options_config, 0);
else
string_list_append(&push_options_config, v);
return 0;
return parse_transport_option(k, v, &push_options_config);
} else if (!strcmp(k, "color.push")) {
push_use_color = git_config_colorbool(k, v);
return 0;

View File

@ -1108,6 +1108,18 @@ int is_transport_allowed(const char *type, int from_user)
BUG("invalid protocol_allow_config type");
}
int parse_transport_option(const char *var, const char *value,
struct string_list *transport_options)
{
if (!value)
return config_error_nonbool(var);
if (!*value)
string_list_clear(transport_options, 0);
else
string_list_append(transport_options, value);
return 0;
}
void transport_check_allowed(const char *type)
{
if (!is_transport_allowed(type, -1))

View File

@ -342,4 +342,8 @@ void transport_print_push_status(const char *dest, struct ref *refs,
/* common method used by transport-helper.c and send-pack.c */
void reject_atomic_push(struct ref *refs, int mirror_mode);
/* common method to parse push-option or server-option from config */
int parse_transport_option(const char *var, const char *value,
struct string_list *transport_options);
#endif