On Tue, Apr 14, 2020 at 04:15:11PM +0100, Phillip Wood wrote: > 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 In the proposal I gave, you could do: hook.pre-commit.command = my-command hook.pre-commit.command = git diff --check --cached If you want to refer to commands in ordering options (like your "before"), then you'd have to refer to their names. For "my-command" that's not too bad. For the longer one, it's a bit awkward. You _could_ do: hookcmd.my-command.before = git diff --check --cached which is the same number of lines as yours. But I'd probably give it a name, like: hookcmd.check-whitespace.command = git diff --check --cached hookcmd.my-command.before = check-whitespace That's one more line than yours, but I think it separates the concerns more clearly. And it extends naturally to more options specific to check-whitespace. -Peff