Re: RFC: Supporting .git/hooks/$NAME.d/* && /etc/git/hooks/$NAME.d/*
From: Junio C Hamano <hidden>
Date: 2016-06-16 02:19:01
Ævar Arnfjörð Bjarmason [off-list ref] writes:
I think it's fair enough to say that if we had this facility this would be good enough: * Your hooks are executed in glob() order, local .git first, then /etc/git/... * If it's a hook like pre-commit that can reject something the first hook to fail short-circuits. I.e. none of the rest get executed. * If it's not a hook like that e.g. post-commit all of the hooks will get executed. * If you need anything more complex you can just wrap your hooks in your own shellscript. I.e. it takes care of the common case where: * You just want to execute N hooks and don't want to write a wrapper. * For pre-* hooks the common case is it doesn't matter /what/ rejected things, just that it gets rejected, e.g. for pre-receive. Also if you care about performance you can order them in cheapest-first order.
Stop using the word "common" to describe what is not demonstratably "common". The above only covers a very limited subset of the use cases, which is the two bullet points above (one of them i.e. "I do not bother to write a wrapper" is not even a valid use case). That may be a good starting point, but it is so simple that can be done with a wrapper with several lines at most. So I am not sympathetic to that line of reasoning at all. I can buy "It is too cumbersome to require everybody to reinvent and script the cascading logic, and the core side should help by giving a standard interface that is flexible enough to suit people's need", though. And I have to say that a sequential execution that always short-circuits at the first failure is below that threshold. One reason I care about allowing the users to specify "do not shortcut" is that I anticipate that people would want to have a logging of the result at the end of the chain.