Thread (7 messages) 7 messages, 2 authors, 2021-10-27

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

From: Jeff King <hidden>
Date: 2021-10-26 21:16:13

On Tue, Oct 26, 2021 at 02:11:22PM +0200, Alex Riesen wrote:
quoted hunk ↗ jump to hunk
diff --git a/builtin/pull.c b/builtin/pull.c
index 425950f469..428baea95b 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_no_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, "no-verify", &opt_no_verify, NULL,
+		N_("bypass pre-merge-commit and commit-msg hooks"),
+		PARSE_OPT_NOARG | PARSE_OPT_NONEG),
 	OPT_PASSTHRU(0, "verify-signatures", &opt_verify_signatures, NULL,
 		N_("verify that the named commit has a valid GPG signature"),
 		PARSE_OPT_NOARG),
OK, so we failed to pass through --no-verify, because it got caught as a
prefix of --verify-signatures, since the outer parse-options didn't know
about it. Makes sense, and I suppose this has been broken since
11b6d17801 (pull: pass git-merge's options to git-merge, 2015-06-14).

I was going to ask whether this should be passing through "verify", and
allowing its "no-" variant, but there is no "--verify" in git-merge.
Arguably there should be (for consistency and to countermand an earlier
--no-verify), but that is outside the scope of your fix (sadly if
somebody does change that, they'll have to remember to touch this spot,
too, but I don't think it can be helped).
+test_expect_success 'git pull --no-verify flag passed to merge' '
+	test_when_finished "rm -fr src dst actual" &&
+	git init src &&
+	test_commit -C src one &&
+	git clone src dst &&
+	echo false >dst/.git/hooks/commit-msg &&
+	chmod +x dst/.git/hooks/commit-msg &&
This script without #! should work portably, I think, though we
generally prefer using the helper (which also handles the chmod):

  write_script dst/.git/hooks/commit-msg <<-\EOF
  false
  EOF

Other than that nit, this looks good to me.

-Peff
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help