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

Re: [PATCH v2 1/1] sequencer: fix empty commit check when amending

From
PWPhillip Wood <phillip.wood123@gmail.com>
Date
Nov 24, 2019, 10:52 UTC
Message-ID
<94573071-556b-caae-b159-40c168a08f44@gmail.com>
In-Reply-To
<340859a7-5cc4-f641-818d-fcedbf29a2a6@gmail.com>
Hi Junio
On 23/11/2019 09:54, Phillip Wood wrote:
Show 13 quoted lines
> Hi Junio
> 
> On 23/11/2019 02:03, Junio C Hamano wrote:
>> "Phillip Wood via GitGitGadget" <gitgitgadget@gmail.com> writes:
>>
>>> +    if (!(flags & ALLOW_EMPTY)) {
>>> +        struct commit *first_parent = current_head;
>>> +
>>> +        if (flags & AMEND_MSG) {
>>> +            if (current_head->parents) {
>>
>> It is not apparent to me that somebody guarantees that this access
>> is safe; would we need to do things differently when !current_head?

We do actually check that there is a valid HEAD before we try to fixup a commit. Though perhaps we should still change this patch as HEAD may be changed by another process between that check and re-reading it here. If you try to fixup a commit without a valid HEAD you get

error: need a HEAD to fixup hint: Could not execute the todo command hint: hint: fixup faef1a5a7637ff91b3611aabd1b96541da5f5536 P hint: hint: It has been rescheduled; To edit the command before continuing, please hint: edit the todo list first: hint: hint: git rebase --edit-todo hint: git rebase --continue error: could not copy '.git/rebase-merge/message-squash' to '.git/rebase-merge/message'

The last error message is unfortunate but we do exit in an orderly manner rather than segfaulting. It's a bit tricky to trigger this (there isn't a test at the moment) but something like this does it

diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh
index d2f1d5bd23..4f55f0cd1c 100755
--- a/t/t3404-rebase-interactive.sh
+++ b/t/t3404-rebase-interactive.sh
@@ -67,6 +67,21 @@ test_expect_success 'setup' '
  SHELL=
  export SHELL

+test_expect_success 'fixup on orphan branch errors out' '
+
+       test_when_finished "git switch master" &&
+       write_script switch-branch.sh <<-\EOF &&
+       git symbolic-ref HEAD refs/heads/does-not-exist &&
+       git rm -rf .
+       EOF
+       (
+               set_fake_editor &&
+               FAKE_LINES="exec_./switch-branch.sh \
+                           fixup 1" git rebase -i HEAD^
+       ) &&
+       test_pause
+'
+

I think it would be useful to add something like this to the test suite 
(changed to check the error message, with a better name for the script 
and modified to expect failure) What do you think?

Best Wishes

Phillip

> That's a good point, I'll fix it, thanks for catching this
> 
> Best Wishes
> 
> Phillip
> 
>>
>>> +                first_parent = current_head->parents->item;
>>> +                if (repo_parse_commit(r, first_parent)) {
>>> +                    res = error(_("could not parse HEAD commit"));
>>> +                    goto out;
>>> +                }
>>> +            } else {
>>> +                first_parent = NULL;
>>> +            }
>>> +        }
Previous: Phillip WoodNext: Junio C Hamano
Message 12 of 19 in “sequencer: fix empty commit check when amending”
  1. 0/1 sequencer: fix empty commit check when amendingPhillip Wood via GitGitGadget, Nov 21, 2019
  2. 1/1 sequencer: fix empty commit check when amendingPhillip Wood via GitGitGadget, Nov 21, 2019
  3. Junio C HamanoNov 22, 2019
  4. Phillip WoodNov 22, 2019
  5. Junio C HamanoNov 22, 2019
  6. Phillip WoodNov 22, 2019
  7. 0/1 sequencer: fix empty commit check when amendingPhillip Wood via GitGitGadget, Nov 22, 2019
  8. 1/1 sequencer: fix empty commit check when amendingPhillip Wood via GitGitGadget, Nov 22, 2019
  9. Junio C HamanoNov 23, 2019
  10. Junio C HamanoNov 23, 2019
  11. Phillip WoodNov 23, 2019
  12. Phillip WoodNov 24, 2019
  13. Junio C HamanoNov 25, 2019
  14. Phillip WoodNov 25, 2019
  15. Johannes SchindelinNov 25, 2019
  16. Eric SunshineNov 25, 2019
  17. Johannes SchindelinNov 25, 2019
  18. Phillip WoodNov 25, 2019
  19. Junio C HamanoNov 26, 2019

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.