From: Phillip Wood Date: Mon, 04 Oct 2021 10:03:27 GMT Subject: Re: [PATCH 06/11] reset_head(): make default_reflog_action optional Message-ID: <0a580f49-4366-526b-d601-f8ce5f99711c@gmail.com> In-Reply-To: Hi Junio On 01/10/2021 22:08, Junio C Hamano wrote: > "Phillip Wood via GitGitGadget" writes: > >> From: Phillip Wood >> >> This parameter is only needed when a ref is going to be updated and >> the caller does not pass an explicit reflog message. Callers that are >> just discarding changes in the working tree like create_autostash() do >> not update any refs so should not have to worry about passing this >> parameter. > > This only talks about internal implementation details of passing a > parameter that may not be used, but ... > >> - ret = update_refs(oid, switch_to_branch, reflog_head, reflog_orig_head, >> - default_reflog_action, flags); >> + if (oid != &head_oid || update_orig_head || switch_to_branch) >> + ret = update_refs(oid, switch_to_branch, reflog_head, >> + reflog_orig_head, default_reflog_action, >> + flags); > > ... doesn't this have a more significant behaviour change? > > I am not sure if comparison between oid and head_oid can safely > cheat like the patch does, or if it is necessary to do a proper oid > comparison, but either way, this would stop calling update_refs(), > which in turn means it would have an externally visible effect, like > a hook no longer getting called, doesn't it? > > It would be a change for the good---calling post-checkout hook when > you did "git checkout (no other arguments)" feels wasteful, but it > deserves to be told to end users, I would think. That would be a change for the good, but it is not what this patch does. If oid == &head_oid then it means that the caller did not give us a tree to checkout so HEAD will not change unless we are switching branches. Using a pointer comparison rather than calling oidcmp() was a deliberate choice to avoid any user visible changes as there are no callers that try to run the checkout-hook without passing an oid or branch. The aim here is to avoid having to pass default_reflog when it is not needed without making any user visible changes. > Again, a new test to protect the change would go well in the same > patch. I'm not sure what we could test Best Wishes Phillip > Thanks. > >