mirror of https://github.com/git/git.git
Merge branch 'rj/add-p-explicit-reshow'
"git add -p" and other "interactive hunk selection" UI has learned to skip showing the hunk immediately after it has already been shown, and an additional action to explicitly ask to reshow the current hunk. * rj/add-p-explicit-reshow: add-patch: do not print hunks repeatedly add-patch: introduce 'p' in interactive-patch
This commit is contained in:
commit
989bf45394
|
@ -348,6 +348,7 @@ patch::
|
|||
K - leave this hunk undecided, see previous hunk
|
||||
s - split the current hunk into smaller hunks
|
||||
e - manually edit the current hunk
|
||||
p - print the current hunk
|
||||
? - print help
|
||||
+
|
||||
After deciding the fate for all hunks, if there is any hunk
|
||||
|
|
21
add-patch.c
21
add-patch.c
|
@ -1388,13 +1388,14 @@ N_("j - leave this hunk undecided, see next undecided hunk\n"
|
|||
"/ - search for a hunk matching the given regex\n"
|
||||
"s - split the current hunk into smaller hunks\n"
|
||||
"e - manually edit the current hunk\n"
|
||||
"p - print the current hunk\n"
|
||||
"? - print help\n");
|
||||
|
||||
static int patch_update_file(struct add_p_state *s,
|
||||
struct file_diff *file_diff)
|
||||
{
|
||||
size_t hunk_index = 0;
|
||||
ssize_t i, undecided_previous, undecided_next;
|
||||
ssize_t i, undecided_previous, undecided_next, rendered_hunk_index = -1;
|
||||
struct hunk *hunk;
|
||||
char ch;
|
||||
struct child_process cp = CHILD_PROCESS_INIT;
|
||||
|
@ -1447,8 +1448,11 @@ static int patch_update_file(struct add_p_state *s,
|
|||
|
||||
strbuf_reset(&s->buf);
|
||||
if (file_diff->hunk_nr) {
|
||||
render_hunk(s, hunk, 0, colored, &s->buf);
|
||||
fputs(s->buf.buf, stdout);
|
||||
if (rendered_hunk_index != hunk_index) {
|
||||
render_hunk(s, hunk, 0, colored, &s->buf);
|
||||
fputs(s->buf.buf, stdout);
|
||||
rendered_hunk_index = hunk_index;
|
||||
}
|
||||
|
||||
strbuf_reset(&s->buf);
|
||||
if (undecided_previous >= 0) {
|
||||
|
@ -1480,6 +1484,7 @@ static int patch_update_file(struct add_p_state *s,
|
|||
permitted |= ALLOW_EDIT;
|
||||
strbuf_addstr(&s->buf, ",e");
|
||||
}
|
||||
strbuf_addstr(&s->buf, ",p");
|
||||
}
|
||||
if (file_diff->deleted)
|
||||
prompt_mode_type = PROMPT_DELETION;
|
||||
|
@ -1644,13 +1649,15 @@ soft_increment:
|
|||
hunk_index = i;
|
||||
} else if (s->answer.buf[0] == 's') {
|
||||
size_t splittable_into = hunk->splittable_into;
|
||||
if (!(permitted & ALLOW_SPLIT))
|
||||
if (!(permitted & ALLOW_SPLIT)) {
|
||||
err(s, _("Sorry, cannot split this hunk"));
|
||||
else if (!split_hunk(s, file_diff,
|
||||
hunk - file_diff->hunk))
|
||||
} else if (!split_hunk(s, file_diff,
|
||||
hunk - file_diff->hunk)) {
|
||||
color_fprintf_ln(stdout, s->s.header_color,
|
||||
_("Split into %d hunks."),
|
||||
(int)splittable_into);
|
||||
rendered_hunk_index = -1;
|
||||
}
|
||||
} else if (s->answer.buf[0] == 'e') {
|
||||
if (!(permitted & ALLOW_EDIT))
|
||||
err(s, _("Sorry, cannot edit this hunk"));
|
||||
|
@ -1658,6 +1665,8 @@ soft_increment:
|
|||
hunk->use = USE_HUNK;
|
||||
goto soft_increment;
|
||||
}
|
||||
} else if (s->answer.buf[0] == 'p') {
|
||||
rendered_hunk_index = -1;
|
||||
} else {
|
||||
const char *p = _(help_patch_remainder), *eol = p;
|
||||
|
||||
|
|
|
@ -325,9 +325,9 @@ test_expect_success 'different prompts for mode change/deleted' '
|
|||
git -c core.filemode=true add -p >actual &&
|
||||
sed -n "s/^\(([0-9/]*) Stage .*?\).*/\1/p" actual >actual.filtered &&
|
||||
cat >expect <<-\EOF &&
|
||||
(1/1) Stage deletion [y,n,q,a,d,?]?
|
||||
(1/2) Stage mode change [y,n,q,a,d,j,J,g,/,?]?
|
||||
(2/2) Stage this hunk [y,n,q,a,d,K,g,/,e,?]?
|
||||
(1/1) Stage deletion [y,n,q,a,d,p,?]?
|
||||
(1/2) Stage mode change [y,n,q,a,d,j,J,g,/,p,?]?
|
||||
(2/2) Stage this hunk [y,n,q,a,d,K,g,/,e,p,?]?
|
||||
EOF
|
||||
test_cmp expect actual.filtered
|
||||
'
|
||||
|
@ -514,13 +514,13 @@ test_expect_success 'split hunk setup' '
|
|||
test_expect_success 'goto hunk' '
|
||||
test_when_finished "git reset" &&
|
||||
tr _ " " >expect <<-EOF &&
|
||||
(2/2) Stage this hunk [y,n,q,a,d,K,g,/,e,?]? + 1: -1,2 +1,3 +15
|
||||
(2/2) Stage this hunk [y,n,q,a,d,K,g,/,e,p,?]? + 1: -1,2 +1,3 +15
|
||||
_ 2: -2,4 +3,8 +21
|
||||
go to which hunk? @@ -1,2 +1,3 @@
|
||||
_10
|
||||
+15
|
||||
_20
|
||||
(1/2) Stage this hunk [y,n,q,a,d,j,J,g,/,e,?]?_
|
||||
(1/2) Stage this hunk [y,n,q,a,d,j,J,g,/,e,p,?]?_
|
||||
EOF
|
||||
test_write_lines s y g 1 | git add -p >actual &&
|
||||
tail -n 7 <actual >actual.trimmed &&
|
||||
|
@ -530,11 +530,11 @@ test_expect_success 'goto hunk' '
|
|||
test_expect_success 'navigate to hunk via regex' '
|
||||
test_when_finished "git reset" &&
|
||||
tr _ " " >expect <<-EOF &&
|
||||
(2/2) Stage this hunk [y,n,q,a,d,K,g,/,e,?]? @@ -1,2 +1,3 @@
|
||||
(2/2) Stage this hunk [y,n,q,a,d,K,g,/,e,p,?]? @@ -1,2 +1,3 @@
|
||||
_10
|
||||
+15
|
||||
_20
|
||||
(1/2) Stage this hunk [y,n,q,a,d,j,J,g,/,e,?]?_
|
||||
(1/2) Stage this hunk [y,n,q,a,d,j,J,g,/,e,p,?]?_
|
||||
EOF
|
||||
test_write_lines s y /1,2 | git add -p >actual &&
|
||||
tail -n 5 <actual >actual.trimmed &&
|
||||
|
@ -715,21 +715,21 @@ test_expect_success 'colors can be overridden' '
|
|||
<BLUE>+<RESET><BLUE>new<RESET>
|
||||
<CYAN> more-context<RESET>
|
||||
<BLUE>+<RESET><BLUE>another-one<RESET>
|
||||
<YELLOW>(1/1) Stage this hunk [y,n,q,a,d,s,e,?]? <RESET><BOLD>Split into 2 hunks.<RESET>
|
||||
<YELLOW>(1/1) Stage this hunk [y,n,q,a,d,s,e,p,?]? <RESET><BOLD>Split into 2 hunks.<RESET>
|
||||
<MAGENTA>@@ -1,3 +1,3 @@<RESET>
|
||||
<CYAN> context<RESET>
|
||||
<BOLD>-old<RESET>
|
||||
<BLUE>+<RESET><BLUE>new<RESET>
|
||||
<CYAN> more-context<RESET>
|
||||
<YELLOW>(1/2) Stage this hunk [y,n,q,a,d,j,J,g,/,e,?]? <RESET><MAGENTA>@@ -3 +3,2 @@<RESET>
|
||||
<YELLOW>(1/2) Stage this hunk [y,n,q,a,d,j,J,g,/,e,p,?]? <RESET><MAGENTA>@@ -3 +3,2 @@<RESET>
|
||||
<CYAN> more-context<RESET>
|
||||
<BLUE>+<RESET><BLUE>another-one<RESET>
|
||||
<YELLOW>(2/2) Stage this hunk [y,n,q,a,d,K,g,/,e,?]? <RESET><MAGENTA>@@ -1,3 +1,3 @@<RESET>
|
||||
<YELLOW>(2/2) Stage this hunk [y,n,q,a,d,K,g,/,e,p,?]? <RESET><MAGENTA>@@ -1,3 +1,3 @@<RESET>
|
||||
<CYAN> context<RESET>
|
||||
<BOLD>-old<RESET>
|
||||
<BLUE>+new<RESET>
|
||||
<CYAN> more-context<RESET>
|
||||
<YELLOW>(1/2) Stage this hunk [y,n,q,a,d,j,J,g,/,e,?]? <RESET>
|
||||
<YELLOW>(1/2) Stage this hunk [y,n,q,a,d,j,J,g,/,e,p,?]? <RESET>
|
||||
EOF
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
|
Loading…
Reference in New Issue