|  | #!/bin/sh | 
|  |  | 
|  | test_description='GIT_EDITOR, core.editor, and stuff' | 
|  |  | 
|  | . ./test-lib.sh | 
|  |  | 
|  | for i in GIT_EDITOR core_editor EDITOR VISUAL vi | 
|  | do | 
|  | cat >e-$i.sh <<-EOF | 
|  | echo "Edited by $i" >"\$1" | 
|  | EOF | 
|  | chmod +x e-$i.sh | 
|  | done | 
|  | unset vi | 
|  | mv e-vi.sh vi | 
|  | unset EDITOR VISUAL GIT_EDITOR | 
|  |  | 
|  | test_expect_success setup ' | 
|  |  | 
|  | msg="Hand edited" && | 
|  | echo "$msg" >expect && | 
|  | git add vi && | 
|  | test_tick && | 
|  | git commit -m "$msg" && | 
|  | git show -s --pretty=oneline | | 
|  | sed -e "s/^[0-9a-f]* //" >actual && | 
|  | diff actual expect | 
|  |  | 
|  | ' | 
|  |  | 
|  | TERM=dumb | 
|  | export TERM | 
|  | test_expect_success 'dumb should error out when falling back on vi' ' | 
|  |  | 
|  | if git commit --amend | 
|  | then | 
|  | echo "Oops?" | 
|  | false | 
|  | else | 
|  | : happy | 
|  | fi | 
|  | ' | 
|  |  | 
|  | TERM=vt100 | 
|  | export TERM | 
|  | for i in vi EDITOR VISUAL core_editor GIT_EDITOR | 
|  | do | 
|  | echo "Edited by $i" >expect | 
|  | unset EDITOR VISUAL GIT_EDITOR | 
|  | git config --unset-all core.editor | 
|  | case "$i" in | 
|  | core_editor) | 
|  | git config core.editor ./e-core_editor.sh | 
|  | ;; | 
|  | [A-Z]*) | 
|  | eval "$i=./e-$i.sh" | 
|  | export $i | 
|  | ;; | 
|  | esac | 
|  | test_expect_success "Using $i" ' | 
|  | git --exec-path=. commit --amend && | 
|  | git show -s --pretty=oneline | | 
|  | sed -e "s/^[0-9a-f]* //" >actual && | 
|  | diff actual expect | 
|  | ' | 
|  | done | 
|  |  | 
|  | unset EDITOR VISUAL GIT_EDITOR | 
|  | git config --unset-all core.editor | 
|  | for i in vi EDITOR VISUAL core_editor GIT_EDITOR | 
|  | do | 
|  | echo "Edited by $i" >expect | 
|  | case "$i" in | 
|  | core_editor) | 
|  | git config core.editor ./e-core_editor.sh | 
|  | ;; | 
|  | [A-Z]*) | 
|  | eval "$i=./e-$i.sh" | 
|  | export $i | 
|  | ;; | 
|  | esac | 
|  | test_expect_success "Using $i (override)" ' | 
|  | git --exec-path=. commit --amend && | 
|  | git show -s --pretty=oneline | | 
|  | sed -e "s/^[0-9a-f]* //" >actual && | 
|  | diff actual expect | 
|  | ' | 
|  | done | 
|  |  | 
|  | test_expect_success 'editor with a space' ' | 
|  |  | 
|  | if echo "echo space > \"\$1\"" > "e space.sh" | 
|  | then | 
|  | chmod a+x "e space.sh" && | 
|  | GIT_EDITOR="./e\ space.sh" git commit --amend && | 
|  | test space = "$(git show -s --pretty=format:%s)" | 
|  | else | 
|  | say "Skipping; FS does not support spaces in filenames" | 
|  | fi | 
|  |  | 
|  | ' | 
|  |  | 
|  | unset GIT_EDITOR | 
|  | test_expect_success 'core.editor with a space' ' | 
|  |  | 
|  | if test -f "e space.sh" | 
|  | then | 
|  | git config core.editor \"./e\ space.sh\" && | 
|  | git commit --amend && | 
|  | test space = "$(git show -s --pretty=format:%s)" | 
|  | else | 
|  | say "Skipping; FS does not support spaces in filenames" | 
|  | fi | 
|  |  | 
|  | ' | 
|  |  | 
|  | test_done |