| #!/bin/sh | |
| test_description='GIT_EDITOR, core.editor, and stuff' | |
| . ./test-lib.sh | |
| unset EDITOR VISUAL GIT_EDITOR | |
| test_expect_success 'determine default editor' ' | |
| vi=$(TERM=vt100 git var GIT_EDITOR) && | |
| test -n "$vi" | |
| ' | |
| if ! expr "$vi" : '[a-z]*$' >/dev/null | |
| then | |
| vi= | |
| fi | |
| for i in GIT_EDITOR core_editor EDITOR VISUAL $vi | |
| do | |
| cat >e-$i.sh <<-EOF | |
| #!$SHELL_PATH | |
| echo "Edited by $i" >"\$1" | |
| EOF | |
| chmod +x e-$i.sh | |
| done | |
| if ! test -z "$vi" | |
| then | |
| mv e-$vi.sh $vi | |
| fi | |
| test_expect_success setup ' | |
| msg="Hand-edited" && | |
| test_commit "$msg" && | |
| echo "$msg" >expect && | |
| git show -s --format=%s > actual && | |
| test_cmp 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 | |
| ' | |
| test_expect_success 'dumb should prefer EDITOR to VISUAL' ' | |
| EDITOR=./e-EDITOR.sh && | |
| VISUAL=./e-VISUAL.sh && | |
| export EDITOR VISUAL && | |
| git commit --amend && | |
| test "$(git show -s --format=%s)" = "Edited by EDITOR" | |
| ' | |
| 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 && | |
| test_cmp 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 && | |
| test_cmp actual expect | |
| ' | |
| done | |
| if echo 'echo space > "$1"' > "e space.sh" | |
| then | |
| # FS supports spaces in filenames | |
| test_set_prereq SPACES_IN_FILENAMES | |
| fi | |
| test_expect_success SPACES_IN_FILENAMES 'editor with a space' ' | |
| chmod a+x "e space.sh" && | |
| GIT_EDITOR="./e\ space.sh" git commit --amend && | |
| test space = "$(git show -s --pretty=format:%s)" | |
| ' | |
| unset GIT_EDITOR | |
| test_expect_success SPACES_IN_FILENAMES 'core.editor with a space' ' | |
| git config core.editor \"./e\ space.sh\" && | |
| git commit --amend && | |
| test space = "$(git show -s --pretty=format:%s)" | |
| ' | |
| test_done |