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 > <[email protected]> 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.<name>.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
signature.asc
Description: PGP signature

