mirror of
https://github.com/git/git.git
synced 2024-05-28 04:36:10 +02:00
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
|
K - leave this hunk undecided, see previous hunk
|
||||||
s - split the current hunk into smaller hunks
|
s - split the current hunk into smaller hunks
|
||||||
e - manually edit the current hunk
|
e - manually edit the current hunk
|
||||||
|
p - print the current hunk
|
||||||
? - print help
|
? - print help
|
||||||
+
|
+
|
||||||
After deciding the fate for all hunks, if there is any hunk
|
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"
|
"/ - search for a hunk matching the given regex\n"
|
||||||
"s - split the current hunk into smaller hunks\n"
|
"s - split the current hunk into smaller hunks\n"
|
||||||
"e - manually edit the current hunk\n"
|
"e - manually edit the current hunk\n"
|
||||||
|
"p - print the current hunk\n"
|
||||||
"? - print help\n");
|
"? - print help\n");
|
||||||
|
|
||||||
static int patch_update_file(struct add_p_state *s,
|
static int patch_update_file(struct add_p_state *s,
|
||||||
struct file_diff *file_diff)
|
struct file_diff *file_diff)
|
||||||
{
|
{
|
||||||
size_t hunk_index = 0;
|
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;
|
struct hunk *hunk;
|
||||||
char ch;
|
char ch;
|
||||||
struct child_process cp = CHILD_PROCESS_INIT;
|
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);
|
strbuf_reset(&s->buf);
|
||||||
if (file_diff->hunk_nr) {
|
if (file_diff->hunk_nr) {
|
||||||
render_hunk(s, hunk, 0, colored, &s->buf);
|
if (rendered_hunk_index != hunk_index) {
|
||||||
fputs(s->buf.buf, stdout);
|
render_hunk(s, hunk, 0, colored, &s->buf);
|
||||||
|
fputs(s->buf.buf, stdout);
|
||||||
|
rendered_hunk_index = hunk_index;
|
||||||
|
}
|
||||||
|
|
||||||
strbuf_reset(&s->buf);
|
strbuf_reset(&s->buf);
|
||||||
if (undecided_previous >= 0) {
|
if (undecided_previous >= 0) {
|
||||||
|
@ -1480,6 +1484,7 @@ static int patch_update_file(struct add_p_state *s,
|
||||||
permitted |= ALLOW_EDIT;
|
permitted |= ALLOW_EDIT;
|
||||||
strbuf_addstr(&s->buf, ",e");
|
strbuf_addstr(&s->buf, ",e");
|
||||||
}
|
}
|
||||||
|
strbuf_addstr(&s->buf, ",p");
|
||||||
}
|
}
|
||||||
if (file_diff->deleted)
|
if (file_diff->deleted)
|
||||||
prompt_mode_type = PROMPT_DELETION;
|
prompt_mode_type = PROMPT_DELETION;
|
||||||
|
@ -1644,13 +1649,15 @@ static int patch_update_file(struct add_p_state *s,
|
||||||
hunk_index = i;
|
hunk_index = i;
|
||||||
} else if (s->answer.buf[0] == 's') {
|
} else if (s->answer.buf[0] == 's') {
|
||||||
size_t splittable_into = hunk->splittable_into;
|
size_t splittable_into = hunk->splittable_into;
|
||||||
if (!(permitted & ALLOW_SPLIT))
|
if (!(permitted & ALLOW_SPLIT)) {
|
||||||
err(s, _("Sorry, cannot split this hunk"));
|
err(s, _("Sorry, cannot split this hunk"));
|
||||||
else if (!split_hunk(s, file_diff,
|
} else if (!split_hunk(s, file_diff,
|
||||||
hunk - file_diff->hunk))
|
hunk - file_diff->hunk)) {
|
||||||
color_fprintf_ln(stdout, s->s.header_color,
|
color_fprintf_ln(stdout, s->s.header_color,
|
||||||
_("Split into %d hunks."),
|
_("Split into %d hunks."),
|
||||||
(int)splittable_into);
|
(int)splittable_into);
|
||||||
|
rendered_hunk_index = -1;
|
||||||
|
}
|
||||||
} else if (s->answer.buf[0] == 'e') {
|
} else if (s->answer.buf[0] == 'e') {
|
||||||
if (!(permitted & ALLOW_EDIT))
|
if (!(permitted & ALLOW_EDIT))
|
||||||
err(s, _("Sorry, cannot edit this hunk"));
|
err(s, _("Sorry, cannot edit this hunk"));
|
||||||
|
@ -1658,6 +1665,8 @@ static int patch_update_file(struct add_p_state *s,
|
||||||
hunk->use = USE_HUNK;
|
hunk->use = USE_HUNK;
|
||||||
goto soft_increment;
|
goto soft_increment;
|
||||||
}
|
}
|
||||||
|
} else if (s->answer.buf[0] == 'p') {
|
||||||
|
rendered_hunk_index = -1;
|
||||||
} else {
|
} else {
|
||||||
const char *p = _(help_patch_remainder), *eol = p;
|
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 &&
|
git -c core.filemode=true add -p >actual &&
|
||||||
sed -n "s/^\(([0-9/]*) Stage .*?\).*/\1/p" actual >actual.filtered &&
|
sed -n "s/^\(([0-9/]*) Stage .*?\).*/\1/p" actual >actual.filtered &&
|
||||||
cat >expect <<-\EOF &&
|
cat >expect <<-\EOF &&
|
||||||
(1/1) Stage deletion [y,n,q,a,d,?]?
|
(1/1) Stage deletion [y,n,q,a,d,p,?]?
|
||||||
(1/2) Stage mode change [y,n,q,a,d,j,J,g,/,?]?
|
(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,?]?
|
(2/2) Stage this hunk [y,n,q,a,d,K,g,/,e,p,?]?
|
||||||
EOF
|
EOF
|
||||||
test_cmp expect actual.filtered
|
test_cmp expect actual.filtered
|
||||||
'
|
'
|
||||||
|
@ -514,13 +514,13 @@ test_expect_success 'split hunk setup' '
|
||||||
test_expect_success 'goto hunk' '
|
test_expect_success 'goto hunk' '
|
||||||
test_when_finished "git reset" &&
|
test_when_finished "git reset" &&
|
||||||
tr _ " " >expect <<-EOF &&
|
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
|
_ 2: -2,4 +3,8 +21
|
||||||
go to which hunk? @@ -1,2 +1,3 @@
|
go to which hunk? @@ -1,2 +1,3 @@
|
||||||
_10
|
_10
|
||||||
+15
|
+15
|
||||||
_20
|
_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
|
EOF
|
||||||
test_write_lines s y g 1 | git add -p >actual &&
|
test_write_lines s y g 1 | git add -p >actual &&
|
||||||
tail -n 7 <actual >actual.trimmed &&
|
tail -n 7 <actual >actual.trimmed &&
|
||||||
|
@ -530,11 +530,11 @@ test_expect_success 'goto hunk' '
|
||||||
test_expect_success 'navigate to hunk via regex' '
|
test_expect_success 'navigate to hunk via regex' '
|
||||||
test_when_finished "git reset" &&
|
test_when_finished "git reset" &&
|
||||||
tr _ " " >expect <<-EOF &&
|
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
|
_10
|
||||||
+15
|
+15
|
||||||
_20
|
_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
|
EOF
|
||||||
test_write_lines s y /1,2 | git add -p >actual &&
|
test_write_lines s y /1,2 | git add -p >actual &&
|
||||||
tail -n 5 <actual >actual.trimmed &&
|
tail -n 5 <actual >actual.trimmed &&
|
||||||
|
@ -715,21 +715,21 @@ test_expect_success 'colors can be overridden' '
|
||||||
<BLUE>+<RESET><BLUE>new<RESET>
|
<BLUE>+<RESET><BLUE>new<RESET>
|
||||||
<CYAN> more-context<RESET>
|
<CYAN> more-context<RESET>
|
||||||
<BLUE>+<RESET><BLUE>another-one<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>
|
<MAGENTA>@@ -1,3 +1,3 @@<RESET>
|
||||||
<CYAN> context<RESET>
|
<CYAN> context<RESET>
|
||||||
<BOLD>-old<RESET>
|
<BOLD>-old<RESET>
|
||||||
<BLUE>+<RESET><BLUE>new<RESET>
|
<BLUE>+<RESET><BLUE>new<RESET>
|
||||||
<CYAN> more-context<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>
|
<CYAN> more-context<RESET>
|
||||||
<BLUE>+<RESET><BLUE>another-one<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>
|
<CYAN> context<RESET>
|
||||||
<BOLD>-old<RESET>
|
<BOLD>-old<RESET>
|
||||||
<BLUE>+new<RESET>
|
<BLUE>+new<RESET>
|
||||||
<CYAN> more-context<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
|
EOF
|
||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
|
|
Loading…
Reference in New Issue