Inter-revision diff: patch 7

Comparing v4 (message) to v2 (message)

--- v4
+++ v2
@@ -1,27 +1,93 @@
-From: Emily Shaffer <emilyshaffer@google.com>
+For certain one-shot hooks we'd like to optimistically run them, and
+not complain if they don't exist. This will be used by send-email in a
+subsequent commit.
 
-Teach applypatch-msg to use the hook.h library instead of the
-run-command.h library.
-
-Signed-off-by: Emily Shaffer <emilyshaffer@google.com>
 Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
 ---
- builtin/am.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
+ Documentation/git-hook.txt | 10 +++++++++-
+ builtin/hook.c             |  7 ++++++-
+ t/t1800-hook.sh            |  5 +++++
+ 3 files changed, 20 insertions(+), 2 deletions(-)
 
-diff --git a/builtin/am.c b/builtin/am.c
-index 4b334cb7b12..ae0c484dcba 100644
---- a/builtin/am.c
-+++ b/builtin/am.c
-@@ -448,7 +448,7 @@ static int run_applypatch_msg_hook(struct am_state *state)
+diff --git a/Documentation/git-hook.txt b/Documentation/git-hook.txt
+index e39b1b5d069..77c3a8ad909 100644
+--- a/Documentation/git-hook.txt
++++ b/Documentation/git-hook.txt
+@@ -8,7 +8,7 @@ git-hook - Run git hooks
+ SYNOPSIS
+ --------
+ [verse]
+-'git hook' run <hook-name> [-- <hook-args>]
++'git hook' run [--ignore-missing] <hook-name> [-- <hook-args>]
+ 
+ DESCRIPTION
+ -----------
+@@ -28,6 +28,14 @@ Any positional arguments to the hook should be passed after a
+ mandatory `--` (or `--end-of-options`, see linkgit:gitcli[7]). See
+ linkgit:githooks[5] for arguments hooks might expect (if any).
+ 
++OPTIONS
++-------
++
++--ignore-missing::
++	Ignore any missing hook by quietly returning zero. Used for
++	tools that want to do a blind one-shot run of a hook that may
++	or may not be present.
++
+ SEE ALSO
+ --------
+ linkgit:githooks[5]
+diff --git a/builtin/hook.c b/builtin/hook.c
+index 41dd15550cf..fa26454990d 100644
+--- a/builtin/hook.c
++++ b/builtin/hook.c
+@@ -7,7 +7,7 @@
+ #include "strvec.h"
+ 
+ #define BUILTIN_HOOK_RUN_USAGE \
+-	N_("git hook run <hook-name> [-- <hook-args>]")
++	N_("git hook run [--ignore-missing] <hook-name> [-- <hook-args>]")
+ 
+ static const char * const builtin_hook_usage[] = {
+ 	BUILTIN_HOOK_RUN_USAGE,
+@@ -23,9 +23,12 @@ static int run(int argc, const char **argv, const char *prefix)
+ {
+ 	int i;
+ 	struct run_hooks_opt opt = RUN_HOOKS_OPT_INIT;
++	int ignore_missing = 0;
+ 	const char *hook_name;
+ 	const char *hook_path;
+ 	struct option run_options[] = {
++		OPT_BOOL(0, "ignore-missing", &ignore_missing,
++			 N_("silently ignore missing requested <hook-name>")),
+ 		OPT_END(),
+ 	};
  	int ret;
+@@ -53,6 +56,8 @@ static int run(int argc, const char **argv, const char *prefix)
+ 	git_config(git_default_config, NULL);
  
- 	assert(state->msg);
--	ret = run_hook_le(NULL, "applypatch-msg", am_path(state, "final-commit"), NULL);
-+	ret = run_hooks_l("applypatch-msg", am_path(state, "final-commit"), NULL);
+ 	hook_name = argv[0];
++	if (ignore_missing)
++		return run_hooks_oneshot(hook_name, &opt);
+ 	hook_path = find_hook(hook_name);
+ 	if (!hook_path) {
+ 		error("cannot find a hook named %s", hook_name);
+diff --git a/t/t1800-hook.sh b/t/t1800-hook.sh
+index 3aea1b105f0..29718aa9913 100755
+--- a/t/t1800-hook.sh
++++ b/t/t1800-hook.sh
+@@ -21,6 +21,11 @@ test_expect_success 'git hook run: nonexistent hook' '
+ 	test_cmp stderr.expect stderr.actual
+ '
  
- 	if (!ret) {
- 		FREE_AND_NULL(state->msg);
++test_expect_success 'git hook run: nonexistent hook with --ignore-missing' '
++	git hook run --ignore-missing does-not-exist 2>stderr.actual &&
++	test_must_be_empty stderr.actual
++'
++
+ test_expect_success 'git hook run: basic' '
+ 	write_script .git/hooks/test-hook <<-EOF &&
+ 	echo Test hook
 -- 
-2.33.1.1570.g069344fdd45
+2.33.1.1338.g20da966911a
 
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help