t3701: add a test for the different `add -p` prompts
authorJohannes Schindelin <redacted>
Fri, 6 Dec 2019 13:08:21 +0000 (13:08 +0000)
committerJunio C Hamano <redacted>
Fri, 6 Dec 2019 16:57:34 +0000 (08:57 -0800)
The `git add -p` command offers different prompts for regular diff hunks
vs mode change pseudo hunks vs diffs deleting files.

Let's cover this in the regresion test suite, in preparation for
re-implementing `git add -p` in C.

For the mode change prompt, we use a trick that lets this test case pass
even on systems without executable bit, i.e. where `core.filemode =
false` (such as Windows): we first add the file to the index with `git
add --chmod=+x`, and then call `git add -p` with `core.filemode` forced
to `true`. The file on disk has no executable bit set, therefore we will
see a mode change.

Signed-off-by: Johannes Schindelin <redacted>
Signed-off-by: Junio C Hamano <redacted>
t/t3701-add-interactive.sh

index 793ce2829754803aa7a1299959531e9f01927684..c90aaa25b04f0b001b97cec3e5a31e2bf88d4abc 100755 (executable)
@@ -105,7 +105,6 @@ test_expect_success 'revert works (commit)' '
        grep "unchanged *+3/-0 file" output
 '
 
-
 test_expect_success 'setup expected' '
        cat >expected <<-\EOF
        EOF
@@ -274,6 +273,24 @@ test_expect_success FILEMODE 'stage mode and hunk' '
 
 # end of tests disabled when filemode is not usable
 
+test_expect_success 'different prompts for mode change/deleted' '
+       git reset --hard &&
+       >file &&
+       >deleted &&
+       git add --chmod=+x file deleted &&
+       echo changed >file &&
+       rm deleted &&
+       test_write_lines n n n |
+       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,?]?
+       EOF
+       test_cmp expect actual.filtered
+'
+
 test_expect_success 'setup again' '
        git reset --hard &&
        test_chmod +x file &&
git clone https://git.99rst.org/PROJECT