Junio C Hamano <gitster@xxxxxxxxx> writes: > base to show an incremental improvement, but here is how I would do > the "code" part. > > builtin/push.c | 22 ++++++++++++++++++---- > 1 file changed, 18 insertions(+), 4 deletions(-) > > diff --git a/builtin/push.c b/builtin/push.c > index 03846e8379..89ef029c67 100644 > --- a/builtin/push.c > +++ b/builtin/push.c > @@ -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,13 @@ 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); Here needs to be return 0; as there is no point in falling through to call git_default_config(). > } > > return git_default_config(k, v, NULL);