Re: [PATCH v8 24/37] receive-pack: convert push-to-checkout hook to hook.h
- From
Emily Shaffer <emilyshaffer@google.com>
- Date
- Mar 29, 2021, 23:59 UTC
- Message-ID
- <YGJp2VcFZ8nrtho8@google.com>
- In-Reply-To
- <xmqqk0qc7jpy.fsf@gitster.g>
On Fri, Mar 12, 2021 at 02:24:41AM -0800, Junio C Hamano wrote:
Show 30 quoted lines
>
> Emily Shaffer <emilyshaffer@google.com> writes:
>
> > @@ -1435,12 +1436,19 @@ static const char *push_to_checkout(unsigned char *hash,
> > struct strvec *env,
> > const char *work_tree)
> > {
> > + struct run_hooks_opt opt;
> > + run_hooks_opt_init_sync(&opt);
> > +
> > strvec_pushf(env, "GIT_WORK_TREE=%s", absolute_path(work_tree));
> > - if (run_hook_le(env->v, push_to_checkout_hook,
> > - hash_to_hex(hash), NULL))
> > + strvec_pushv(&opt.env, env->v);
> > + strvec_push(&opt.args, hash_to_hex(hash));
> > + if (run_hooks(push_to_checkout_hook, &opt)) {
> > + run_hooks_opt_clear(&opt);
> > return "push-to-checkout hook declined";
> > - else
> > + } else {
> > + run_hooks_opt_clear(&opt);
> > return NULL;
> > + }
> > }
>
> OK, we opt_init(), futz with opt, call run_hooks() and opt_clear()
> regardless of the outcome from run_hooks(). Narrow-sighted me
> wonders if it makes the use of the API easier if run_hooks() did the
> opt_clear() before it returns, but I haven't yet seen enough use at
> this point to judge.Hrm, is that idiomatic? I guess it would be convenient, and as long as it doesn't touch explicitly caller-managed context pointer it should be safe, but wouldn't it be surprising?
- Emily