Re: [PATCH v2 6/7] config: allow configuration of multiple hook error behavior
- From
brian m. carlson <sandals@crustytoothpaste.net>
- Date
- May 15, 2019, 23:10 UTC
- Message-ID
- <20190515231017.GM7458@genre.crustytoothpaste.net>
- In-Reply-To
- <CACsJy8BN32Jm62MQPLsRwKST8DDNZ7NxnJbsqBO3PJ0K2qU-Ng@mail.gmail.com>
On Tue, May 14, 2019 at 08:20:10PM +0700, Duy Nguyen wrote:
Show 9 quoted lines
> On Tue, May 14, 2019 at 7:24 AM brian m. carlson > <sandals@crustytoothpaste.net> 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.
Show 9 quoted lines
> 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.
Show 8 quoted lines
> > + 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.
Show 5 quoted lines
> > + 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.
Show 13 quoted lines
> > 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