Merge branch 'js/builtin-add-i-cmds' into maint

Minor bugfixes to "git add -i" that has recently been rewritten in C.

* js/builtin-add-i-cmds:
  built-in add -i: accept open-ended ranges again
  built-in add -i: do not try to `patch`/`diff` an empty list of files
This commit is contained in:
Junio C Hamano 2020-03-17 15:02:20 -07:00
commit f0c344ce57
2 changed files with 15 additions and 3 deletions

View File

@ -326,7 +326,10 @@ static ssize_t list_and_choose(struct add_i_state *s,
if (endp == p + sep) if (endp == p + sep)
to = from + 1; to = from + 1;
else if (*endp == '-') { else if (*endp == '-') {
to = strtoul(++endp, &endp, 10); if (isdigit(*(++endp)))
to = strtoul(endp, &endp, 10);
else
to = items->items.nr;
/* extra characters after the range? */ /* extra characters after the range? */
if (endp != p + sep) if (endp != p + sep)
from = -1; from = -1;
@ -913,7 +916,7 @@ static int run_patch(struct add_i_state *s, const struct pathspec *ps,
opts->prompt = N_("Patch update"); opts->prompt = N_("Patch update");
count = list_and_choose(s, files, opts); count = list_and_choose(s, files, opts);
if (count >= 0) { if (count > 0) {
struct argv_array args = ARGV_ARRAY_INIT; struct argv_array args = ARGV_ARRAY_INIT;
struct pathspec ps_selected = { 0 }; struct pathspec ps_selected = { 0 };
@ -954,7 +957,7 @@ static int run_diff(struct add_i_state *s, const struct pathspec *ps,
opts->flags = IMMEDIATE; opts->flags = IMMEDIATE;
count = list_and_choose(s, files, opts); count = list_and_choose(s, files, opts);
opts->flags = 0; opts->flags = 0;
if (count >= 0) { if (count > 0) {
struct argv_array args = ARGV_ARRAY_INIT; struct argv_array args = ARGV_ARRAY_INIT;
argv_array_pushl(&args, "git", "diff", "-p", "--cached", argv_array_pushl(&args, "git", "diff", "-p", "--cached",

View File

@ -68,6 +68,15 @@ test_expect_success 'revert works (initial)' '
! grep . output ! grep . output
' '
test_expect_success 'add untracked (multiple)' '
test_when_finished "git reset && rm [1-9]" &&
touch $(test_seq 9) &&
test_write_lines a "2-5 8-" | git add -i -- [1-9] &&
test_write_lines 2 3 4 5 8 9 >expected &&
git ls-files [1-9] >output &&
test_cmp expected output
'
test_expect_success 'setup (commit)' ' test_expect_success 'setup (commit)' '
echo baseline >file && echo baseline >file &&
git add file && git add file &&