Skip to content

Commit 8bfb359

Browse files
committed
Merge branch 'ah/sequencer-rewrite-todo-fix'
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
2 parents 52d9dc2 + 9645a08 commit 8bfb359

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

sequencer.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2702,7 +2702,7 @@ int todo_list_parse_insn_buffer(struct repository *r, char *buf,
27022702
if (fixup_okay)
27032703
; /* do nothing */
27042704
else if (is_fixup(item->command))
2705-
return error(_("cannot '%s' without a previous commit"),
2705+
res = error(_("cannot '%s' without a previous commit"),
27062706
command_to_string(item->command));
27072707
else if (!is_noop(item->command))
27082708
fixup_okay = 1;

t/t3404-rebase-interactive.sh

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1596,6 +1596,32 @@ test_expect_success 'static check of bad command' '
15961596
test C = $(git cat-file commit HEAD^ | sed -ne \$p)
15971597
'
15981598

1599+
test_expect_success 'the first command cannot be a fixup' '
1600+
rebase_setup_and_clean fixup-first &&
1601+
1602+
cat >orig <<-EOF &&
1603+
fixup $(git log -1 --format="%h %s" B)
1604+
pick $(git log -1 --format="%h %s" C)
1605+
EOF
1606+
1607+
(
1608+
set_replace_editor orig &&
1609+
test_must_fail git rebase -i A 2>actual
1610+
) &&
1611+
grep "cannot .fixup. without a previous commit" actual &&
1612+
grep "You can fix this with .git rebase --edit-todo.." actual &&
1613+
# verify that the todo list has not been truncated
1614+
grep -v "^#" .git/rebase-merge/git-rebase-todo >actual &&
1615+
test_cmp orig actual &&
1616+
1617+
test_must_fail git rebase --edit-todo 2>actual &&
1618+
grep "cannot .fixup. without a previous commit" actual &&
1619+
grep "You can fix this with .git rebase --edit-todo.." actual &&
1620+
# verify that the todo list has not been truncated
1621+
grep -v "^#" .git/rebase-merge/git-rebase-todo >actual &&
1622+
test_cmp orig actual
1623+
'
1624+
15991625
test_expect_success 'tabs and spaces are accepted in the todolist' '
16001626
rebase_setup_and_clean indented-comment &&
16011627
write_script add-indent.sh <<-\EOF &&

0 commit comments

Comments
 (0)