"brian m. carlson" <sandals@xxxxxxxxxxxxxxxxxxxx> writes: > To preserve backwards compatibility, we don't run the hooks in the ".d" > directory if the single file is a valid hook (i.e. it exists and is > executable). This is because some people already have multiple hook > scripts configured, and if we ran them both, we'd run the hooks twice. > This would be bad for e.g. the prepare-commit-msg hook. This is also the > least surprising behavior. OK. An obvious alternative may be to see if the expected hooks path is a directory and use the contents. If ".git/hooks/pre-commit" is a single file, we know it is the single hook as before, and if it is a directory, we know that is not a custom made (i.e. from the world before this series supported in the core-git) multi-hook setup. > We check each hook for its exit status, even if the hook normally > ignores exit status, and if it fails, we abort executing further hooks. This part may become the most controversial in the whole topic, but a design discussion is helped by having a concrete proposal that makes its own design decision, and this is the simplest design of the failure case that is the easiest to understand. Thanks. Let's see how the review discussion goes ;-) > brian m. carlson (5): > run-command: add preliminary support for multiple hooks > builtin/receive-pack: add support for multiple hooks > sequencer: add support for multiple hooks > builtin/worktree: add support for multiple post-checkout hooks > transport: add support for multiple pre-push hooks > > builtin/am.c | 28 ++-- > builtin/commit.c | 5 +- > builtin/receive-pack.c | 212 +++++++++++++++++------------ > builtin/worktree.c | 40 ++++-- > run-command.c | 117 ++++++++++++---- > run-command.h | 9 +- > sequencer.c | 96 ++++++++----- > t/lib-hooks.sh | 156 +++++++++++++++++++++ > t/t5403-post-checkout-hook.sh | 8 ++ > t/t5407-post-rewrite-hook.sh | 15 ++ > t/t5516-fetch-push.sh | 29 ++++ > t/t5571-pre-push-hook.sh | 19 +++ > t/t7503-pre-commit-hook.sh | 15 ++ > t/t7505-prepare-commit-msg-hook.sh | 9 ++ > transport.c | 98 +++++++------ > 15 files changed, 636 insertions(+), 220 deletions(-) > create mode 100644 t/lib-hooks.sh