On Tue, May 14, 2019 at 08:20:10PM +0700, Duy Nguyen wrote: > On Tue, May 14, 2019 at 7:24 AM brian m. carlson > wrote: > > > > There are a variety of situations in which a user may want an error > > behavior for multiple hooks other than the default. Add a config option, > > hook..errorBehavior to allow users to customize this behavior on a > > An alternative name is onError, probably more often used for event > callbacks. But I don't know, maybe errorBehavior is actually better. I'm going to use "errorStrategy", since we already have submodule.alternateErrorStrategy. > > per-hook basis. Provide options for the default behavior (exiting > > should we fall back to hook.errorBehavior? That allows people to set > global policy, then customize just a small set of weird hooks. Sure, that sounds good. > maybe stop-on-first-error (or if you go with the "onError" name, I > think "stop" is enough). I know "stop on/after first hook" does not > really make any sense when you think about it. Maybe stop-on-first is > sufficient. > > I was going to suggest strcasecmp. But core.whitespace (also has > multiple-word-values) already sets a precedent on strcmp. I think > we're good. Or mostly good, I don't know, we still accept False, false > and FALSE. I think with errorStrategy, "stop" is fine. Simpler is better. I literally picked what Peff had suggested in his email (mostly because I'm terrible at naming things), and I don't get the impression he spent a great deal of time analyzing the ins and outs of the names before sending. I could be wrong, though. > > + behavior = HOOK_ERROR_STOP_ON_FIRST; > > This is basically the logical "and" behavior in a C expression. Which > makes me think if anybody's crazy enough to need the "or" counterpart > (i.e. run hooks, expect failure, keep going until the first success). > > I guess it's a crazy mode. We should not care about until a real use > case shows up. Yeah, I think that's unlikely to be the case. Nothing prevents us from adding it later. > > + else if (!strcmp(value, "report-any-error")) > > I couldn't guess based on this name alone, whether we continue or stop > after the reporting part. The 7/7 document makes it clear though. So > all good. I'm open to hearing better suggestions if anyone has any. > > diff --git a/run-command.c b/run-command.c > > index 191d6f6f7e..70fb19a55b 100644 > > --- a/run-command.c > > +++ b/run-command.c > > @@ -1308,6 +1308,8 @@ int async_with_fork(void) > > #endif > > } > > > > +struct string_list hook_error_behavior = STRING_LIST_INIT_NODUP; > > Maybe stick this in 'struct repository'. I know most config variables > are still global. But I think we have to move/reorganize them at some > point. Most may end up in 'struct repository'. Okay, sounds fine. > > + default: > > + BUG("unknown hook error behavior"); > > maybe BUG(".. behavior %d", behavior); Sure. -- brian m. carlson: Houston, Texas, US OpenPGP: https://keybase.io/bk2204