diff options
Diffstat (limited to 'third_party/git/t/t3701-add-interactive.sh')
-rwxr-xr-x | third_party/git/t/t3701-add-interactive.sh | 181 |
1 files changed, 9 insertions, 172 deletions
diff --git a/third_party/git/t/t3701-add-interactive.sh b/third_party/git/t/t3701-add-interactive.sh index 5bae6e50f1f3..69991a3168f3 100755 --- a/third_party/git/t/t3701-add-interactive.sh +++ b/third_party/git/t/t3701-add-interactive.sh @@ -23,17 +23,6 @@ diff_cmp () { test_cmp "$1.filtered" "$2.filtered" } -# This function uses a trick to manipulate the interactive add to use color: -# the `want_color()` function special-cases the situation where a pager was -# spawned and Git now wants to output colored text: to detect that situation, -# the environment variable `GIT_PAGER_IN_USE` is set. However, color is -# suppressed despite that environment variable if the `TERM` variable -# indicates a dumb terminal, so we set that variable, too. - -force_color () { - env GIT_PAGER_IN_USE=true TERM=vt100 "$@" -} - test_expect_success 'setup (initial)' ' echo content >file && git add file && @@ -68,15 +57,6 @@ test_expect_success 'revert works (initial)' ' ! 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)' ' echo baseline >file && git add file && @@ -114,6 +94,7 @@ test_expect_success 'revert works (commit)' ' grep "unchanged *+3/-0 file" output ' + test_expect_success 'setup expected' ' cat >expected <<-\EOF EOF @@ -282,35 +263,6 @@ 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 'correct message when there is nothing to do' ' - git reset --hard && - git add -p 2>err && - test_i18ngrep "No changes" err && - printf "\\0123" >binary && - git add binary && - printf "\\0abc" >binary && - git add -p 2>err && - test_i18ngrep "Only binary files changed" err -' - test_expect_success 'setup again' ' git reset --hard && test_chmod +x file && @@ -362,7 +314,7 @@ test_expect_success C_LOCALE_OUTPUT 'add first line works' ' git commit -am "clear local changes" && git apply patch && printf "%s\n" s y y | git add -p file 2>error | - sed -n -e "s/^([1-2]\/[1-2]) Stage this hunk[^@]*\(@@ .*\)/\1/" \ + sed -n -e "s/^Stage this hunk[^@]*\(@@ .*\)/\1/" \ -e "/^[-+@ \\\\]"/p >output && test_must_be_empty error && git diff --cached >diff && @@ -422,36 +374,6 @@ test_expect_success 'split hunk setup' ' test_write_lines 10 15 20 21 22 23 24 30 40 50 60 >test ' -test_expect_success 'goto hunk' ' - test_when_finished "git reset" && - tr _ " " >expect <<-EOF && - (2/2) Stage this hunk [y,n,q,a,d,K,g,/,e,?]? + 1: -1,2 +1,3 +15 - _ 2: -2,4 +3,8 +21 - go to which hunk? @@ -1,2 +1,3 @@ - _10 - +15 - _20 - (1/2) Stage this hunk [y,n,q,a,d,j,J,g,/,e,?]?_ - EOF - test_write_lines s y g 1 | git add -p >actual && - tail -n 7 <actual >actual.trimmed && - test_cmp expect actual.trimmed -' - -test_expect_success 'navigate to hunk via regex' ' - test_when_finished "git reset" && - tr _ " " >expect <<-EOF && - (2/2) Stage this hunk [y,n,q,a,d,K,g,/,e,?]? @@ -1,2 +1,3 @@ - _10 - +15 - _20 - (1/2) Stage this hunk [y,n,q,a,d,j,J,g,/,e,?]?_ - EOF - test_write_lines s y /1,2 | git add -p >actual && - tail -n 5 <actual >actual.trimmed && - test_cmp expect actual.trimmed -' - test_expect_success 'split hunk "add -p (edit)"' ' # Split, say Edit and do nothing. Then: # @@ -481,40 +403,6 @@ test_expect_failure 'split hunk "add -p (no, yes, edit)"' ' ! grep "^+31" actual ' -test_expect_success 'split hunk with incomplete line at end' ' - git reset --hard && - printf "missing LF" >>test && - git add test && - test_write_lines before 10 20 30 40 50 60 70 >test && - git grep --cached missing && - test_write_lines s n y q | git add -p && - test_must_fail git grep --cached missing && - git grep before && - test_must_fail git grep --cached before -' - -test_expect_failure 'edit, adding lines to the first hunk' ' - test_write_lines 10 11 20 30 40 50 51 60 >test && - git reset && - tr _ " " >patch <<-EOF && - @@ -1,5 +1,6 @@ - _10 - +11 - +12 - _20 - +21 - +22 - _30 - EOF - # test sequence is s(plit), e(dit), n(o) - # q n q q is there to make sure we exit at the end. - printf "%s\n" s e n q n q q | - EDITOR=./fake_editor.sh git add -p 2>error && - test_must_be_empty error && - git diff --cached >actual && - grep "^+22" actual -' - test_expect_success 'patch mode ignores unmerged entries' ' git reset --hard && test_commit conflict && @@ -541,61 +429,35 @@ test_expect_success 'patch mode ignores unmerged entries' ' diff_cmp expected diff ' -test_expect_success 'diffs can be colorized' ' +test_expect_success TTY 'diffs can be colorized' ' git reset --hard && echo content >test && - printf y >y && - force_color git add -p >output 2>&1 <y && + printf y | test_terminal git add -p >output 2>&1 && # We do not want to depend on the exact coloring scheme # git uses for diffs, so just check that we saw some kind of color. grep "$(printf "\\033")" output ' -test_expect_success 'colorized diffs respect diff.wsErrorHighlight' ' - git reset --hard && - - echo "old " >test && - git add test && - echo "new " >test && - - printf y >y && - force_color git -c diff.wsErrorHighlight=all add -p >output.raw 2>&1 <y && - test_decode_color <output.raw >output && - grep "old<" output -' - -test_expect_success 'diffFilter filters diff' ' +test_expect_success TTY 'diffFilter filters diff' ' git reset --hard && echo content >test && test_config interactive.diffFilter "sed s/^/foo:/" && - printf y >y && - force_color git add -p >output 2>&1 <y && + printf y | test_terminal git add -p >output 2>&1 && # avoid depending on the exact coloring or content of the prompts, # and just make sure we saw our diff prefixed grep foo:.*content output ' -test_expect_success 'detect bogus diffFilter output' ' +test_expect_success TTY 'detect bogus diffFilter output' ' git reset --hard && echo content >test && - test_config interactive.diffFilter "sed 1d" && - printf y >y && - test_must_fail force_color git add -p <y -' - -test_expect_success 'diff.algorithm is passed to `git diff-files`' ' - git reset --hard && - - >file && - git add file && - echo changed >file && - test_must_fail git -c diff.algorithm=bogus add -p 2>err && - test_i18ngrep "error: option diff-algorithm accepts " err + test_config interactive.diffFilter "echo too-short" && + printf y | test_must_fail test_terminal git add -p ' test_expect_success 'patch-mode via -i prompts for files' ' @@ -785,29 +647,4 @@ test_expect_success 'checkout -p works with pathological context lines' ' test_write_lines a b a b a a b a b a >expect && test_cmp expect a ' - -test_expect_success 'show help from add--helper' ' - git reset --hard && - cat >expect <<-EOF && - - <BOLD>*** Commands ***<RESET> - 1: <BOLD;BLUE>s<RESET>tatus 2: <BOLD;BLUE>u<RESET>pdate 3: <BOLD;BLUE>r<RESET>evert 4: <BOLD;BLUE>a<RESET>dd untracked - 5: <BOLD;BLUE>p<RESET>atch 6: <BOLD;BLUE>d<RESET>iff 7: <BOLD;BLUE>q<RESET>uit 8: <BOLD;BLUE>h<RESET>elp - <BOLD;BLUE>What now<RESET>> <BOLD;RED>status - show paths with changes<RESET> - <BOLD;RED>update - add working tree state to the staged set of changes<RESET> - <BOLD;RED>revert - revert staged set of changes back to the HEAD version<RESET> - <BOLD;RED>patch - pick hunks and update selectively<RESET> - <BOLD;RED>diff - view diff between HEAD and index<RESET> - <BOLD;RED>add untracked - add contents of untracked files to the staged set of changes<RESET> - <BOLD>*** Commands ***<RESET> - 1: <BOLD;BLUE>s<RESET>tatus 2: <BOLD;BLUE>u<RESET>pdate 3: <BOLD;BLUE>r<RESET>evert 4: <BOLD;BLUE>a<RESET>dd untracked - 5: <BOLD;BLUE>p<RESET>atch 6: <BOLD;BLUE>d<RESET>iff 7: <BOLD;BLUE>q<RESET>uit 8: <BOLD;BLUE>h<RESET>elp - <BOLD;BLUE>What now<RESET>>$SP - Bye. - EOF - test_write_lines h | force_color git add -i >actual.colored && - test_decode_color <actual.colored >actual && - test_i18ncmp expect actual -' - test_done |