Skip to content

Commit

Permalink
Merge branch 'ah/sequencer-rewrite-todo-fix'
Browse files Browse the repository at this point in the history
When the user edits "rebase -i" todo file so that it starts with a
"fixup", which would make it invalid, the command truncated the
rest of the file before giving an error and returning the control
back to the user.  Stop truncating to make it easier to correct
such a malformed todo file.

* ah/sequencer-rewrite-todo-fix:
  sequencer: finish parsing the todo list despite an invalid first line
  • Loading branch information
gitster committed Aug 2, 2023
2 parents 52d9dc2 + 9645a08 commit 8bfb359
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 1 deletion.
2 changes: 1 addition & 1 deletion sequencer.c
Original file line number Diff line number Diff line change
Expand Up @@ -2702,7 +2702,7 @@ int todo_list_parse_insn_buffer(struct repository *r, char *buf,
if (fixup_okay)
; /* do nothing */
else if (is_fixup(item->command))
return error(_("cannot '%s' without a previous commit"),
res = error(_("cannot '%s' without a previous commit"),
command_to_string(item->command));
else if (!is_noop(item->command))
fixup_okay = 1;
Expand Down
26 changes: 26 additions & 0 deletions t/t3404-rebase-interactive.sh
Original file line number Diff line number Diff line change
Expand Up @@ -1596,6 +1596,32 @@ test_expect_success 'static check of bad command' '
test C = $(git cat-file commit HEAD^ | sed -ne \$p)
'

test_expect_success 'the first command cannot be a fixup' '
rebase_setup_and_clean fixup-first &&
cat >orig <<-EOF &&
fixup $(git log -1 --format="%h %s" B)
pick $(git log -1 --format="%h %s" C)
EOF
(
set_replace_editor orig &&
test_must_fail git rebase -i A 2>actual
) &&
grep "cannot .fixup. without a previous commit" actual &&
grep "You can fix this with .git rebase --edit-todo.." actual &&
# verify that the todo list has not been truncated
grep -v "^#" .git/rebase-merge/git-rebase-todo >actual &&
test_cmp orig actual &&
test_must_fail git rebase --edit-todo 2>actual &&
grep "cannot .fixup. without a previous commit" actual &&
grep "You can fix this with .git rebase --edit-todo.." actual &&
# verify that the todo list has not been truncated
grep -v "^#" .git/rebase-merge/git-rebase-todo >actual &&
test_cmp orig actual
'

test_expect_success 'tabs and spaces are accepted in the todolist' '
rebase_setup_and_clean indented-comment &&
write_script add-indent.sh <<-\EOF &&
Expand Down

0 comments on commit 8bfb359

Please sign in to comment.