From: Phillip Wood <phillip.wood123@gmail.com>
To: Alex Henrie <alexhenrie24@gmail.com>,
git@vger.kernel.org, alban.gruin@gmail.com, gitster@pobox.com,
phillip.wood@dunelm.org.uk
Subject: Re: [PATCH v5 1/1] sequencer: finish parsing the todo list despite an invalid first line
Date: Mon, 24 Jul 2023 11:02:37 +0100 [thread overview]
Message-ID: <0d1c5bfd-3ae5-83f0-a333-bbb8510a973a@gmail.com> (raw)
In-Reply-To: <20230722212830.132135-2-alexhenrie24@gmail.com>
Hi Alex
On 22/07/2023 22:28, Alex Henrie wrote:
> Before the todo list is edited it is rewritten to shorten the OIDs of
> the commits being picked and to append advice about editing the list.
> The exact advice depends on whether the todo list is being edited for
> the first time or not. After the todo list has been edited it is
> rewritten to lengthen the OIDs of the commits being picked and to remove
> the advice. If the edited list cannot be parsed then this last step is
> skipped.
>
> Prior to db81e50724 (rebase-interactive: use todo_list_write_to_file()
> in edit_todo_list(), 2019-03-05) if the existing todo list could not be
> parsed then the initial rewrite was skipped as well. This had the
> unfortunate consequence that if the list could not be parsed after the
> initial edit the advice given to the user was wrong when they re-edited
> the list. This change relied on todo_list_parse_insn_buffer() returning
> the whole todo list even when it cannot be parsed. Unfortunately if the
> list starts with a "fixup" command then it will be truncated and the
> remaining lines are lost. Fix this by continuing to parse after an
> initial "fixup" commit as we do when we see any other invalid line.
This version looks great apart from the test being run in an unnecessary
subshell which looks like it got left in from the last version. Junio
might be able to correct that when he applies the patch.
Thanks for updating the test and commit message
Best Wishes
Phillip
> Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
> ---
> sequencer.c | 2 +-
> t/t3404-rebase-interactive.sh | 27 +++++++++++++++++++++++++++
> 2 files changed, 28 insertions(+), 1 deletion(-)
>
> diff --git a/sequencer.c b/sequencer.c
> index cc9821ece2..adc9cfb4df 100644
> --- a/sequencer.c
> +++ b/sequencer.c
> @@ -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;
> diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh
> index ff0afad63e..c734983da0 100755
> --- a/t/t3404-rebase-interactive.sh
> +++ b/t/t3404-rebase-interactive.sh
> @@ -1596,6 +1596,33 @@ 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 &&
next prev parent reply other threads:[~2023-07-24 10:10 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-19 14:43 [PATCH] sequencer: finish parsing the todo list despite an invalid first line Alex Henrie
2023-07-19 21:32 ` Junio C Hamano
2023-07-20 9:42 ` Phillip Wood
2023-07-20 22:37 ` Alex Henrie
2023-07-21 9:31 ` Phillip Wood
2023-07-21 13:08 ` Phillip Wood
2023-07-21 15:21 ` Junio C Hamano
2023-07-21 5:38 ` [PATCH v2 0/1] " Alex Henrie
2023-07-21 5:38 ` [PATCH v2 1/1] " Alex Henrie
2023-07-21 5:58 ` [PATCH v3 0/1] " Alex Henrie
2023-07-21 5:58 ` [PATCH v3 1/1] " Alex Henrie
2023-07-21 6:07 ` [PATCH v4 0/1] " Alex Henrie
2023-07-21 6:07 ` [PATCH v4 1/1] " Alex Henrie
2023-07-21 13:13 ` [PATCH v4 0/1] " Phillip Wood
2023-07-22 21:28 ` [PATCH v5 " Alex Henrie
2023-07-22 21:28 ` [PATCH v5 1/1] " Alex Henrie
2023-07-24 10:02 ` Phillip Wood [this message]
2023-07-24 15:26 ` Alex Henrie
2023-07-24 16:00 ` Phillip Wood
2023-07-24 16:40 ` Junio C Hamano
2023-07-24 17:39 ` Alex Henrie
2023-07-24 18:30 ` Junio C Hamano
2023-07-24 20:08 ` Alex Henrie
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=0d1c5bfd-3ae5-83f0-a333-bbb8510a973a@gmail.com \
--to=phillip.wood123@gmail.com \
--cc=alban.gruin@gmail.com \
--cc=alexhenrie24@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=phillip.wood@dunelm.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).