Re: [RFC PATCH v2 0/2] configuration-based hook management
- From
Jeff King <peff@peff.net>
- Date
- Apr 14, 2020, 20:32 UTC
- Message-ID
- <20200414203247.GE1879688@coredump.intra.peff.net>
- In-Reply-To
- <efad3927-1d8f-5545-48e9-9a58c2308273@gmail.com>
On Tue, Apr 14, 2020 at 04:15:11PM +0100, Phillip Wood wrote:
Show 25 quoted lines
> 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