Since v7: - Addressed Jonathan Tan's review of part I - Addressed Junio's review of part I and II - Combined parts I and II I think the updates to patch 1 between the rest of the work I've been doing probably have covered Ævar's comments. More details about per-patch changes found in the notes on each mail (I hope). I know that Junio was talking about merging v7 after Josh Steadmon's review and I asked him not to - this reroll has those changes from Jonathan Tan's review that I was wanting to wait for. Thanks! - Emily Emily Shaffer (37): doc: propose hooks managed by the config hook: scaffolding for git-hook subcommand hook: add list command hook: include hookdir hook in list hook: teach hook.runHookDir hook: implement hookcmd.<name>.skip parse-options: parse into strvec hook: add 'run' subcommand hook: introduce hook_exists() hook: support passing stdin to hooks run-command: allow stdin for run_processes_parallel hook: allow parallel hook execution hook: allow specifying working directory for hooks run-command: add stdin callback for parallelization hook: provide stdin by string_list or callback run-command: allow capturing of collated output hooks: allow callers to capture output commit: use config-based hooks am: convert applypatch hooks to use config merge: use config-based hooks for post-merge hook gc: use hook library for pre-auto-gc hook rebase: teach pre-rebase to use hook.h read-cache: convert post-index-change hook to use config receive-pack: convert push-to-checkout hook to hook.h git-p4: use 'git hook' to run hooks hooks: convert 'post-checkout' hook to hook library hook: convert 'post-rewrite' hook to config transport: convert pre-push hook to use config reference-transaction: look for hooks in config receive-pack: convert 'update' hook to hook.h proc-receive: acquire hook list from hook.h post-update: use hook.h library receive-pack: convert receive hooks to hook.h bugreport: use hook_exists instead of find_hook git-send-email: use 'git hook run' for 'sendemail-validate' run-command: stop thinking about hooks docs: unify githooks and git-hook manpages .gitignore | 1 + Documentation/Makefile | 1 + Documentation/config/hook.txt | 27 + Documentation/git-hook.txt | 161 ++++ Documentation/githooks.txt | 655 +--------------- Documentation/native-hooks.txt | 708 ++++++++++++++++++ Documentation/technical/api-parse-options.txt | 7 + .../technical/config-based-hooks.txt | 369 +++++++++ Makefile | 2 + builtin.h | 1 + builtin/am.c | 33 +- builtin/bugreport.c | 4 +- builtin/checkout.c | 19 +- builtin/clone.c | 8 +- builtin/commit.c | 11 +- builtin/fetch.c | 1 + builtin/gc.c | 5 +- builtin/hook.c | 176 +++++ builtin/merge.c | 15 +- builtin/rebase.c | 9 +- builtin/receive-pack.c | 329 ++++---- builtin/submodule--helper.c | 2 +- builtin/worktree.c | 31 +- command-list.txt | 1 + commit.c | 22 +- commit.h | 3 +- git-p4.py | 67 +- git-send-email.perl | 21 +- git.c | 1 + hook.c | 480 ++++++++++++ hook.h | 138 ++++ parse-options-cb.c | 16 + parse-options.h | 4 + read-cache.c | 13 +- refs.c | 43 +- reset.c | 16 +- run-command.c | 156 ++-- run-command.h | 55 +- sequencer.c | 90 +-- submodule.c | 1 + t/helper/test-run-command.c | 46 +- t/t0061-run-command.sh | 37 + t/t1360-config-based-hooks.sh | 303 ++++++++ t/t1416-ref-transaction-hooks.sh | 12 +- t/t5411/test-0015-too-many-hooks-error.sh | 47 ++ ...3-pre-commit-and-pre-merge-commit-hooks.sh | 17 +- t/t9001-send-email.sh | 11 +- transport.c | 59 +- 48 files changed, 3052 insertions(+), 1182 deletions(-) create mode 100644 Documentation/config/hook.txt create mode 100644 Documentation/git-hook.txt create mode 100644 Documentation/native-hooks.txt create mode 100644 Documentation/technical/config-based-hooks.txt create mode 100644 builtin/hook.c create mode 100644 hook.c create mode 100644 hook.h create mode 100755 t/t1360-config-based-hooks.sh create mode 100644 t/t5411/test-0015-too-many-hooks-error.sh -- 2.31.0.rc2.261.g7f71774620-goog