[PATCH v2 0/7] Multiple hook support
This series introduces multiple hook support.
I've thought a lot about the discussion over whether this series should
use the configuration as the source for multiple hooks. Ultimately, I've
come to the decision that it's not a good idea. Even adopting the empty
entry as a reset marker, the fact that inheritance in the configuration
is in-order and can't be easily modified means that it's not likely to
be very useful, but it is likely to be quite surprising for the average
user. I think a solution that sticks with the existing model and builds
off a design used by other systems people are familiar with, like cron
and run-parts, is going to be a better choice. Moreover, this is the
design that people have already built with outside tooling, which is a
further argument in favor of it.
I have adopted one configuration-based option, which is the per-hook
errorBehavior option that Peff suggested. I think this reduces concerns
over what the best error handling strategy is and is a good thing to
have as part of a minimum viable product. I picked the names that Peff
chose, but if people like different names better, they can be changed.
Just as a preview of what's coming down the line, I plan to build on
this series to notify hooks when --quiet and --dry-run options have been
specified to commands so that they may honor them if they choose.
Changes from v1:
* Adopted several improvements from Duy's series, including an improved
find_hooks prototype and a helper function.
* Switched to existence checks instead of executability checks for
determining whether to invoke multiple hooks.
* Adjusted the commit message for patch 3.
* Added error behavior control using the names Peff provided in his
* Added documentation.
brian m. carlson (7):
run-command: add preliminary support for multiple hooks
builtin/receive-pack: add support for multiple hooks
rebase: add support for multiple hooks
builtin/worktree: add support for multiple post-checkout hooks
transport: add support for multiple pre-push hooks
config: allow configuration of multiple hook error behavior
docs: document multiple hooks
Documentation/config.txt | 2 +
Documentation/config/hook.txt | 19 ++
Documentation/githooks.txt | 9 +
builtin/am.c | 20 +--
builtin/commit.c | 2 +-
builtin/receive-pack.c | 78 ++++----
builtin/worktree.c | 44 +++--
config.c | 27 +++
run-command.c | 175 +++++++++++++++---
run-command.h | 22 ++-
sequencer.c | 59 ++++---
sequencer.h | 2 +
t/lib-hooks.sh | 274 +++++++++++++++++++++++++++++
t/t5403-post-checkout-hook.sh | 8 +
t/t5407-post-rewrite-hook.sh | 15 ++
t/t5516-fetch-push.sh | 30 ++++
t/t5571-pre-push-hook.sh | 19 ++
t/t7503-pre-commit-hook.sh | 15 ++
t/t7505-prepare-commit-msg-hook.sh | 9 +
transport.c | 29 +--
20 files changed, 730 insertions(+), 128 deletions(-)
create mode 100644 Documentation/config/hook.txt
create mode 100644 t/lib-hooks.sh