Subject: Re: [PATCH 2/2] Fix "commit-msg" hook unexpectedly called for "git pull --no-verify"

From: Junio C Hamano <[email-masked]>
Date: Thu, 28 Oct 2021 09:51:17 -0700

Alex Riesen <[email-masked]> writes:

> Subject: Re: [PATCH 2/2] Fix "commit-msg" hook unexpectedly called for "git pull --no-verify"

Perhaps

    Subject: [PATCH] pull: honor --no-verify and do not call the commit-msg hook

instead.

> From: Alex Riesen <[email-masked]>
>
> The option was incorrectly auto-translated to "--no-verify-signatures",
> which causes the unexpected effect of the hook being called.
> And an even more unexpected effect of disabling verification of signatures.
>
> The manual page describes the option to behave same as the similarly
> named option of "git merge", which seems to be the original intention
> of this option in the "pull" command.
>
> Signed-off-by: Alexander Riesen <[email-masked]>
> ---
>  builtin/pull.c          |  6 ++++++
>  t/t5521-pull-options.sh | 24 ++++++++++++++++++++++++
>  2 files changed, 30 insertions(+)
>
> diff --git a/builtin/pull.c b/builtin/pull.c
> index 425950f469..e783da10b2 100644
> --- a/builtin/pull.c
> +++ b/builtin/pull.c
> @@ -84,6 +84,7 @@ static char *opt_edit;
>  static char *cleanup_arg;
>  static char *opt_ff;
>  static char *opt_verify_signatures;
> +static char *opt_verify;
>  static int opt_autostash = -1;
>  static int config_autostash;
>  static int check_trust_level = 1;
> @@ -160,6 +161,9 @@ static struct option pull_options[] = {
>  	OPT_PASSTHRU(0, "ff-only", &opt_ff, NULL,
>  		N_("abort if fast-forward is not possible"),
>  		PARSE_OPT_NOARG | PARSE_OPT_NONEG),
> +	OPT_PASSTHRU(0, "verify", &opt_verify, NULL,
> +		N_("control use of pre-merge-commit and commit-msg hooks"),
> +		PARSE_OPT_NOARG),
>  	OPT_PASSTHRU(0, "verify-signatures", &opt_verify_signatures, NULL,
>  		N_("verify that the named commit has a valid GPG signature"),
>  		PARSE_OPT_NOARG),
> @@ -688,6 +692,8 @@ static int run_merge(void)
>  		strvec_pushf(&args, "--cleanup=%s", cleanup_arg);
>  	if (opt_ff)
>  		strvec_push(&args, opt_ff);
> +	if (opt_verify)
> +		strvec_push(&args, opt_verify);
>  	if (opt_verify_signatures)
>  		strvec_push(&args, opt_verify_signatures);

Looks quite straight-forward, especially that now this just mimicks
how --[no-]verify-signatures is passed through.

Thanks, will queue.