mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
add-patch: reset "permitted" at loop start
Don't accumulate allowed options from any visited hunks, start fresh at the top of the loop instead and only record the allowed options for the current hunk. Reported-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: René Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
e8c744dd9a
commit
208e23ea47
19
add-patch.c
19
add-patch.c
@@ -1439,15 +1439,6 @@ static int patch_update_file(struct add_p_state *s,
|
||||
struct child_process cp = CHILD_PROCESS_INIT;
|
||||
int colored = !!s->colored.len, quit = 0, use_pager = 0;
|
||||
enum prompt_mode_type prompt_mode_type;
|
||||
enum {
|
||||
ALLOW_GOTO_PREVIOUS_HUNK = 1 << 0,
|
||||
ALLOW_GOTO_PREVIOUS_UNDECIDED_HUNK = 1 << 1,
|
||||
ALLOW_GOTO_NEXT_HUNK = 1 << 2,
|
||||
ALLOW_GOTO_NEXT_UNDECIDED_HUNK = 1 << 3,
|
||||
ALLOW_SEARCH_AND_GOTO = 1 << 4,
|
||||
ALLOW_SPLIT = 1 << 5,
|
||||
ALLOW_EDIT = 1 << 6
|
||||
} permitted = 0;
|
||||
|
||||
/* Empty added files have no hunks */
|
||||
if (!file_diff->hunk_nr && !file_diff->added)
|
||||
@@ -1457,6 +1448,16 @@ 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 (;;) {
|
||||
enum {
|
||||
ALLOW_GOTO_PREVIOUS_HUNK = 1 << 0,
|
||||
ALLOW_GOTO_PREVIOUS_UNDECIDED_HUNK = 1 << 1,
|
||||
ALLOW_GOTO_NEXT_HUNK = 1 << 2,
|
||||
ALLOW_GOTO_NEXT_UNDECIDED_HUNK = 1 << 3,
|
||||
ALLOW_SEARCH_AND_GOTO = 1 << 4,
|
||||
ALLOW_SPLIT = 1 << 5,
|
||||
ALLOW_EDIT = 1 << 6
|
||||
} permitted = 0;
|
||||
|
||||
if (hunk_index >= file_diff->hunk_nr)
|
||||
hunk_index = 0;
|
||||
hunk = file_diff->hunk_nr
|
||||
|
||||
@@ -1386,4 +1386,18 @@ test_expect_success 'options y, n, a, d, j, k, e roll over to next undecided (2)
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'invalid option s is rejected' '
|
||||
test_write_lines a b c d e f g h i j k >file &&
|
||||
git add file &&
|
||||
test_write_lines X b X d e f g h i j X >file &&
|
||||
test_write_lines j s q | git add -p >out &&
|
||||
sed -ne "s/ @@.*//" -e "s/ \$//" -e "/^(/p" <out >actual &&
|
||||
cat >expect <<-EOF &&
|
||||
(1/2) Stage this hunk [y,n,q,a,d,k,K,j,J,g,/,s,e,p,?]?
|
||||
(2/2) Stage this hunk [y,n,q,a,d,k,K,j,J,g,/,e,p,?]? Sorry, cannot split this hunk
|
||||
(2/2) Stage this hunk [y,n,q,a,d,k,K,j,J,g,/,e,p,?]?
|
||||
EOF
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_done
|
||||
|
||||
Reference in New Issue
Block a user