Subject: Re: [PATCH v2 10/14] rebase: cleanup reset_head() calls

From: Junio C Hamano <[email-masked]>
Date: Thu, 09 Dec 2021 11:26:38 -0800

"Phillip Wood via GitGitGadget" <[email-masked]> writes:

> From: Phillip Wood <[email-masked]>
>
> If ORIG_HEAD is not set by passing RESET_ORIG_HEAD then there is no
> need to pass anything for reflog_orig_head. In addition to the callers
> fixed in this commit move_to_original_branch() also passes
> reflog_orig_head without setting ORIG_HEAD. That caller is mistakenly
> passing the message it wants to put in the branch reflog which is not
> currently possible so we delay fixing that caller until we can pass
> the message as the branch reflog.

As I hinted elsewhere, these rules should be spelled out in a
comment before "int reset_head(...)" either in reset.[ch].

For this particular one, I wonder if 

 (A) we can lose RESET_ORIG_HEAD bit and use the presence of
     reflog_orig_head to mean what that bit currently means, or

 (B) we keep the current code strucure, but make it a BUG() if
     a non-NULL reflog_orig_head is given without RESET_ORIG_HEAD
     bit set.

> Signed-off-by: Phillip Wood <[email-masked]>
> ---
>  builtin/rebase.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/builtin/rebase.c b/builtin/rebase.c
> index 3d78b5c8bef..fdd822c470f 100644
> --- a/builtin/rebase.c
> +++ b/builtin/rebase.c
> @@ -675,7 +675,7 @@ static int run_am(struct rebase_options *opts)
>  
>  		reset_head(the_repository, &opts->orig_head,
>  			   opts->head_name, 0,
> -			   "HEAD", NULL, DEFAULT_REFLOG_ACTION);
> +			   NULL, NULL, DEFAULT_REFLOG_ACTION);
>  		error(_("\ngit encountered an error while preparing the "
>  			"patches to replay\n"
>  			"these revisions:\n"
> @@ -1777,7 +1777,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
>  			options.head_name ? options.head_name : "detached HEAD",
>  			oid_to_hex(&options.onto->object.oid));
>  		reset_head(the_repository, NULL, options.head_name,
> -			   RESET_HEAD_REFS_ONLY, "HEAD", msg.buf, NULL);
> +			   RESET_HEAD_REFS_ONLY, NULL, msg.buf, NULL);
>  		strbuf_release(&msg);
>  		ret = finish_rebase(&options);
>  		goto cleanup;