summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2018-06-28 19:53:32 (GMT)
committerJunio C Hamano <gitster@pobox.com>2018-06-28 19:53:32 (GMT)
commit5eb8da850860839bdf38ab80079eb8875b764431 (patch)
treea2156eaf3bd403dd7b1ac4e78412dba283fa78fa
parent0079732e960dc20ab2a68043d5593de358f1377f (diff)
parentf4d35a6b49621348c73222e7017a434551799308 (diff)
downloadgit-5eb8da850860839bdf38ab80079eb8875b764431.zip
git-5eb8da850860839bdf38ab80079eb8875b764431.tar.gz
git-5eb8da850860839bdf38ab80079eb8875b764431.tar.bz2
Merge branch 'pw/add-p-recount'
When user edits the patch in "git add -p" and the user's editor is set to strip trailing whitespaces indiscriminately, an empty line that is unchanged in the patch would become completely empty (instead of a line with a sole SP on it). The code introduced in Git 2.17 timeframe failed to parse such a patch, but now it learned to notice the situation and cope with it. * pw/add-p-recount: add -p: fix counting empty context lines in edited patches
-rwxr-xr-xgit-add--interactive.perl2
-rwxr-xr-xt/t3701-add-interactive.sh43
2 files changed, 44 insertions, 1 deletions
diff --git a/git-add--interactive.perl b/git-add--interactive.perl
index 36f38ce..20eb81c 100755
--- a/git-add--interactive.perl
+++ b/git-add--interactive.perl
@@ -1062,7 +1062,7 @@ sub recount_edited_hunk {
$o_cnt++;
} elsif ($mode eq '+') {
$n_cnt++;
- } elsif ($mode eq ' ') {
+ } elsif ($mode eq ' ' or $mode eq "\n") {
$o_cnt++;
$n_cnt++;
}
diff --git a/t/t3701-add-interactive.sh b/t/t3701-add-interactive.sh
index b170fb0..3e9139d 100755
--- a/t/t3701-add-interactive.sh
+++ b/t/t3701-add-interactive.sh
@@ -175,6 +175,49 @@ test_expect_success 'real edit works' '
diff_cmp expected output
'
+test_expect_success 'setup file' '
+ test_write_lines a "" b "" c >file &&
+ git add file &&
+ test_write_lines a "" d "" c >file
+'
+
+test_expect_success 'setup patch' '
+ SP=" " &&
+ NULL="" &&
+ cat >patch <<-EOF
+ @@ -1,4 +1,4 @@
+ a
+ $NULL
+ -b
+ +f
+ $SP
+ c
+ EOF
+'
+
+test_expect_success 'setup expected' '
+ cat >expected <<-EOF
+ diff --git a/file b/file
+ index b5dd6c9..f910ae9 100644
+ --- a/file
+ +++ b/file
+ @@ -1,5 +1,5 @@
+ a
+ $SP
+ -f
+ +d
+ $SP
+ c
+ EOF
+'
+
+test_expect_success 'edit can strip spaces from empty context lines' '
+ test_write_lines e n q | git add -p 2>error &&
+ test_must_be_empty error &&
+ git diff >output &&
+ diff_cmp expected output
+'
+
test_expect_success 'skip files similarly as commit -a' '
git reset &&
echo file >.gitignore &&