On 14/04/2020 21:03, Josh Steadmon wrote: > On 2020.04.14 16:15, Phillip Wood wrote: >> Hi Emily >> >> Thanks for working on this, having a way to manage multiple commands per >> hook without using an external framework would be really useful >> >> On 14/04/2020 01:54, Emily Shaffer wrote: >>> Not much to look at compared to the original RFC I sent some months ago. >>> This implements Peff's suggestion of using the "hookcmd" section as a >>> layer of indirection. >> >> I'm not really clear what the advantage of this indirection is. It seems >> unlikely to me that different hooks will share exactly the same command line >> or other options. In the 'git secrets' example earlier in this thread each >> hook needs to use a different command line. In general a command cannot tell >> which hook it is being invoked as without a flag of some kind. (In some >> cases it can use the number of arguments if that is different for each hook >> that it handles but that is not true in general) >> >> Without the redirection one could have >> hook.pre-commit.linter.command = my-command >> hook.pre-commit.check-whitespace.command = 'git diff --check --cached' >> >> and other keys can be added for ordering etc. e.g. >> hook.pre-commit.linter.before = check-whitespace >> >> With the indirection one needs to set >> hook.pre-commit.command = linter >> hook.pre-commit.check-whitespace = 'git diff --check --cached' >> hookcmd.linter.command = my-command >> hookcmd.linter.pre-commit-before = check-whitespace >> >> which involves setting an extra key and checking it each time the hook is >> invoked without any benefit that I can see. I suspect which one seems more >> logical depends on how one thinks of setting hooks - I tend to think "I want >> to set a pre-commit hook" not "I want to set a git-secrets hook". If you've >> got an example where this indirection is helpful or necessary that would be >> really useful to see. >> >> Best Wishes >> >> Phillip > > Indexing repo content (see [1] for a detailed discussion) is one use > case where you have a single command that runs identically from > post-commit, post-merge, and post-checkout. Thanks for sharing that, it is a useful reference point > Also, I suspect that many users don't have a firm enough grasp on the > various git hooks options to know ahead of time which ones they want to > set to accomplish a given task (without diving into the docs first). I agree with this, especially as setting up a hook is probably an infrequent task for most people > I'm > not trying to say that your workflow is incorrect, but my gut feeling is > that most Git users would work in the opposite direction. Every time I > have needed to automate something, I generally had a rough script in > place first, and then looked up which hook(s) would be appropriate > triggers for the script. As you say once they have a script they still have to look up which hooks they want to hook it up to, the indirection does not avoid that, it just means they have to lookup how to set up a hookcmd as well as which hooks they want to use. Best Wishes Phillip > [1]: https://tbaggery.com/2011/08/08/effortless-ctags-with-git.html >