On Wed, Dec 11, 2019 at 11:33:38AM -0800, Junio C Hamano wrote: > Emily Shaffer <emilyshaffer@xxxxxxxxxx> writes: > > > It might be desirable - for a user script, or a scripted Git command - > > to run the appropriate set of hooks from outside of the compiled Git > > binary. So, teach --porcelain in a way that enables the following: > > > > git hook --list --porcelain pre-commit | xargs -I% sh "%" > > > > Signed-off-by: Emily Shaffer <emilyshaffer@xxxxxxxxxx> > > --- > > > +--porcelain:: > > + Print in a machine-readable format suitable for scripting. > > + > > ... > > +static int print_hook_list(const struct strbuf *hookname, int porcelain) > > { > > struct list_head *head, *pos; > > struct hook *item; > > @@ -25,10 +25,14 @@ static int print_hook_list(const struct strbuf *hookname) > > > > list_for_each(pos, head) { > > item = list_entry(pos, struct hook, list); > > + if (item) { > > + if (porcelain) > > + printf("%s\n", item->command.buf); > > + else > > + printf("%.3d\t%s\t%s\n", item->order, > > + config_scope_to_string(item->origin), > > + item->command.buf); > > + } > > So, a Porcelain script cannot learn where the hook command comes > from, Not as I had envisioned. > or what the precedence order of each line of the output is? > They're printed in the order they should be executed; the explicit order isn't provided. I suppose I had considered really just the one use case listed in the commit message, especially since other inquiry into the hooks to be run can be done against the config files themselves. But - I'm of course open to use cases. What did you have in mind? Maybe this can be solved better with a --pretty=format type of argument.