Re: [PATCH] add-patch: roll over to next undecided hunk
- From
- Phillip Wood <phillip.wood123@gmail.com>
- Date
- Oct 3, 2025, 13:41 UTC
- Message-ID
- <8fdfb03a-6bbc-46a0-a8fe-9ad75aba555a@gmail.com>
- In-Reply-To
- <76665b6f-cb92-4694-bc89-5eb21197df34@web.de>
Hi René
On 03/10/2025 13:16, René Scharfe wrote:
Show 5 quoted lines
> git add --patch presents diff hunks one after the other, asking whether > to add them. If we mark some as undecided, e.g. with J, then it will > start over after reaching the last hunk. It always starts over at the > very first hunk, though, even if we already decided on it. Skip > decided hunks when rolling over instead.
Nice
Show 16 quoted lines
> @@ -1436,8 +1436,15 @@ static int patch_update_file(struct add_p_state *s,
> render_diff_header(s, file_diff, colored, &s->buf);
> fputs(s->buf.buf, stdout);
> for (;;) {
> - if (hunk_index >= file_diff->hunk_nr)
> + if (hunk_index >= file_diff->hunk_nr) {
> hunk_index = 0;
> + for (i = 0; i < file_diff->hunk_nr; i++) {
> + if (file_diff->hunk[i].use == UNDECIDED_HUNK) {
> + hunk_index = i;
> + break;
> + }
> + }
> + }
> hunk = file_diff->hunk_nr
> ? file_diff->hunk + hunk_indexIf there were no undecided hunks then this will be out of bounds because hunk_index >= file_diff->hunk_nr. Are we absolutely certain that we cannot reach this point without at least one hunk being undecided?
Show 9 quoted lines
> +test_expect_success 'roll over to next undecided (1)' ' > + test_write_lines a b c d e f g h i j k l m n o p q >file && > + git add file && > + test_write_lines X b c d e f g h X j k l m n o p X >file && > + test_write_lines J y y q | git add -p >actual && > + test_write_lines 1 2 3 1 >expect && > + sed -ne "s-/.*--" -e "s-^(--p" <actual >hunks && > + test_cmp expect hunks > +'
I'm not sure what this first test adds, the one below checks that we find the first undecided hunk which seems to be the important thing to check.
Thanks
Phillip
Show 13 quoted lines
> +test_expect_success 'roll over to next undecided (2)' ' > + test_write_lines a b c d e f g h i j k l m n o p q >file && > + git add file && > + test_write_lines X b c d e f g h X j k l m n o p X >file && > + test_write_lines y J y q | git add -p >actual && > + test_write_lines 1 2 3 2 >expect && > + sed -ne "s-/.*--" -e "s-^(--p" <actual >hunks && > + test_cmp expect hunks > +' > + > test_expect_success 'set up base for -p color tests' ' > echo commit >file && > git commit -am "commit state" &&