Junio C Hamano <[email protected]> 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);