git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2 2/2] rebase: set REF_HEAD_DETACH in checkout_up_to_date()

From
John Cai <johncai86@gmail.com>
Date
Mar 14, 2022, 14:11 UTC
Message-ID
<4313B834-90B4-41B3-B810-746EF91F8BBB@gmail.com>
In-Reply-To
<xmqq7d8ywaf0.fsf@gitster.g>
Hi Junio,
On 13 Mar 2022, at 3:58, Junio C Hamano wrote:
Show 25 quoted lines
> "John Cai via GitGitGadget" <gitgitgadget@gmail.com> writes:
>
>> diff --git a/reset.c b/reset.c
>> index e3383a93343..f8e32fcc240 100644
>> --- a/reset.c
>> +++ b/reset.c
>> @@ -101,6 +101,9 @@ int reset_head(struct repository *r, const struct reset_head_opts *opts)
>>  	if (opts->branch_msg && !opts->branch)
>>  		BUG("branch reflog message given without a branch");
>>
>> +	if (switch_to_branch && opts->flags & RESET_HEAD_DETACH)
>
> It's just style thing but it probably is easier to read to have
> an extra () around the bitwise-&.
>
>> +		BUG("attempting to detach HEAD when branch is given");
>
> I wonder if there is a valid use case NOT to use RESET_HEAD_DETACH
> when switch_to_branch == NULL.  If there isn't, it could be that
> we can get rid of RESET_HEAD_DETACH bit and base this decision
> solely on switch_to_branch'es NULLness.
>
> But that is totally outside the scope of this fix.  I'd prefer to
> see a narrowly and sharply focused fix, and to be quite honest, I
> would be happier if this assertion weren't in this topic.
I'm okay with taking this out, but would be good to get an ack from Phillip.
Show 25 quoted lines
>
>>  	if (!refs_only && repo_hold_locked_index(r, &lock, LOCK_REPORT_ON_ERROR) < 0) {
>>  		ret = -1;
>>  		goto leave_reset_head;
>> diff --git a/t/t3400-rebase.sh b/t/t3400-rebase.sh
>> index 0643d015255..d5a8ee39fc4 100755
>> --- a/t/t3400-rebase.sh
>> +++ b/t/t3400-rebase.sh
>> @@ -394,6 +394,15 @@ test_expect_success 'switch to branch not checked out' '
>>  	git rebase main other
>>  '
>>
>> +test_expect_success 'switch to non-branch detaches HEAD' '
>> +	git checkout main &&
>> +	old_main=$(git rev-parse HEAD) &&
>> +	git rebase First Second^0 &&
>
> Good.  For reproduction, the fork-point "First" does not have to be
> a raw object name.  "Second^0" not being a branch name does matter.
>
>> +	test_cmp_rev HEAD Second &&
>> +	test_cmp_rev main $old_main &&
>> +	test_must_fail git symbolic-ref HEAD
>
> All correct and to the point.  Good.
Thanks to Phillip for his help on this!
>
> Will queue.  Thanks.

More of a question about protocol. If there are some minor adjustments that are not really worth more disussion on the ML (like removing the BUG assertion), is it still protocol to send another series or just re-roll on the branch without sending out another patch series?

Thanks! John

Show 6 quoted lines
>
>> +'
>> +
>>  test_expect_success 'refuse to switch to branch checked out elsewhere' '
>>  	git checkout main &&
>>  	git worktree add wt &&
Previous: Phillip WoodNext: Phillip Wood
Message 18 of 41 in “rebase: set REF_HEAD_DETACH in checkout_up_to_date()”
  1. rebase: set REF_HEAD_DETACH in checkout_up_to_date()John Cai via GitGitGadget, Mar 11, 2022
  2. Junio C HamanoMar 11, 2022
  3. Junio C HamanoMar 11, 2022
  4. John CaiMar 11, 2022
  5. Phillip WoodMar 11, 2022
  6. John CaiMar 11, 2022
  7. John CaiMar 11, 2022
  8. Phillip WoodMar 11, 2022
  9. 0/2 rebase: update HEAD when is an oidJohn Cai via GitGitGadget, Mar 11, 2022
  10. 1/2 rebase: use test_commit helper in setupJohn Cai via GitGitGadget, Mar 11, 2022
  11. Junio C HamanoMar 13, 2022
  12. Phillip WoodMar 14, 2022
  13. Junio C HamanoMar 14, 2022
  14. 2/2 rebase: set REF_HEAD_DETACH in checkout_up_to_date()John Cai via GitGitGadget, Mar 11, 2022
  15. Junio C HamanoMar 13, 2022
  16. Phillip WoodMar 14, 2022
  17. Phillip WoodMar 14, 2022
  18. John CaiMar 14, 2022
  19. Phillip WoodMar 14, 2022
  20. 0/2 rebase: update HEAD when is an oidJohn Cai via GitGitGadget, Mar 17, 2022
  21. 2/2 rebase: set REF_HEAD_DETACH in checkout_up_to_date()John Cai via GitGitGadget, Mar 17, 2022
  22. Ævar Arnfjörð BjarmasonMar 17, 2022
  23. Junio C HamanoMar 17, 2022
  24. 1/2 rebase: use test_commit helper in setupJohn Cai via GitGitGadget, Mar 17, 2022
  25. Ævar Arnfjörð BjarmasonMar 17, 2022
  26. 0/3 rebase: update HEAD when is an oidJohn Cai via GitGitGadget, Mar 17, 2022
  27. 1/3 rebase: test showing bug in rebase with non-branchJohn Cai via GitGitGadget, Mar 17, 2022
  28. Junio C HamanoMar 17, 2022
  29. Junio C HamanoMar 17, 2022
  30. John CaiMar 17, 2022
  31. 2/3 rebase: use test_commit helper in setupJohn Cai via GitGitGadget, Mar 17, 2022
  32. Phillip WoodMar 18, 2022
  33. John CaiMar 18, 2022
  34. 3/3 rebase: set REF_HEAD_DETACH in checkout_up_to_date()John Cai via GitGitGadget, Mar 17, 2022
  35. Junio C HamanoMar 17, 2022
  36. John CaiMar 18, 2022
  37. 0/2 rebase: update HEAD when is an oidJohn Cai via GitGitGadget, Mar 18, 2022
  38. 1/2 rebase: use test_commit helper in setupJohn Cai via GitGitGadget, Mar 18, 2022
  39. Junio C HamanoMar 18, 2022
  40. 2/2 rebase: set REF_HEAD_DETACH in checkout_up_to_date()John Cai via GitGitGadget, Mar 18, 2022
  41. Junio C HamanoMar 18, 2022

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.