Merge branch 'pw/add-p-recount'
authorJunio C Hamano <gitster@pobox.com>
Thu, 28 Jun 2018 19:53:32 +0000 (12:53 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 28 Jun 2018 19:53:32 +0000 (12:53 -0700)
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

git-add--interactive.perl
t/t3701-add-interactive.sh
index 36f38ced902e1902a626933bdcda09819acf39a7..20eb81cc92f947d872b31a179d43d97772ff25e4 100755 (executable)
@@ -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++;
                }
index b170fb02b80356455d03dcf379636778149665a6..3e9139dca88e83165fc21e6dce06f3243bd49cd7 100755 (executable)
@@ -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 &&