Merge branch 'mp/push-pushoption-config'
The "--push-option=<string>" option to "git push" now defaults to a list of strings configured via push.pushOption variable. * mp/push-pushoption-config: builtin/push.c: add push.pushOption config
This commit is contained in:
@ -32,6 +32,8 @@ static const char **refspec;
|
||||
static int refspec_nr;
|
||||
static int refspec_alloc;
|
||||
|
||||
static struct string_list push_options_config = STRING_LIST_INIT_DUP;
|
||||
|
||||
static void add_refspec(const char *ref)
|
||||
{
|
||||
refspec_nr++;
|
||||
@ -503,6 +505,15 @@ static int git_push_config(const char *k, const char *v, void *cb)
|
||||
int val = git_config_bool(k, 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 git_default_config(k, v, NULL);
|
||||
@ -515,7 +526,8 @@ int cmd_push(int argc, const char **argv, const char *prefix)
|
||||
int push_cert = -1;
|
||||
int rc;
|
||||
const char *repo = NULL; /* default repository */
|
||||
struct string_list push_options = STRING_LIST_INIT_DUP;
|
||||
struct string_list push_options_cmdline = STRING_LIST_INIT_DUP;
|
||||
struct string_list *push_options;
|
||||
const struct string_list_item *item;
|
||||
|
||||
struct option options[] = {
|
||||
@ -551,7 +563,7 @@ int cmd_push(int argc, const char **argv, const char *prefix)
|
||||
0, "signed", &push_cert, "yes|no|if-asked", N_("GPG sign the push"),
|
||||
PARSE_OPT_OPTARG, option_parse_push_signed },
|
||||
OPT_BIT(0, "atomic", &flags, N_("request atomic transaction on remote side"), TRANSPORT_PUSH_ATOMIC),
|
||||
OPT_STRING_LIST('o', "push-option", &push_options, N_("server-specific"), N_("option to transmit")),
|
||||
OPT_STRING_LIST('o', "push-option", &push_options_cmdline, N_("server-specific"), N_("option to transmit")),
|
||||
OPT_SET_INT('4', "ipv4", &family, N_("use IPv4 addresses only"),
|
||||
TRANSPORT_FAMILY_IPV4),
|
||||
OPT_SET_INT('6', "ipv6", &family, N_("use IPv6 addresses only"),
|
||||
@ -562,6 +574,9 @@ int cmd_push(int argc, const char **argv, const char *prefix)
|
||||
packet_trace_identity("push");
|
||||
git_config(git_push_config, &flags);
|
||||
argc = parse_options(argc, argv, prefix, options, push_usage, 0);
|
||||
push_options = (push_options_cmdline.nr
|
||||
? &push_options_cmdline
|
||||
: &push_options_config);
|
||||
set_push_cert_flags(&flags, push_cert);
|
||||
|
||||
if (deleterefs && (tags || (flags & (TRANSPORT_PUSH_ALL | TRANSPORT_PUSH_MIRROR))))
|
||||
@ -584,12 +599,13 @@ int cmd_push(int argc, const char **argv, const char *prefix)
|
||||
set_refspecs(argv + 1, argc - 1, repo);
|
||||
}
|
||||
|
||||
for_each_string_list_item(item, &push_options)
|
||||
for_each_string_list_item(item, push_options)
|
||||
if (strchr(item->string, '\n'))
|
||||
die(_("push options must not have new line characters"));
|
||||
|
||||
rc = do_push(repo, flags, &push_options);
|
||||
string_list_clear(&push_options, 0);
|
||||
rc = do_push(repo, flags, push_options);
|
||||
string_list_clear(&push_options_cmdline, 0);
|
||||
string_list_clear(&push_options_config, 0);
|
||||
if (rc == -1)
|
||||
usage_with_options(push_usage, options);
|
||||
else
|
||||
|
Reference in New Issue
Block a user