t / t7005-editor.shon commit Merge branch 'rs/path-name-safety-cleanup' (3bf7d37)
   1#!/bin/sh
   2
   3test_description='GIT_EDITOR, core.editor, and stuff'
   4
   5. ./test-lib.sh
   6
   7unset EDITOR VISUAL GIT_EDITOR
   8
   9test_expect_success 'determine default editor' '
  10
  11        vi=$(TERM=vt100 git var GIT_EDITOR) &&
  12        test -n "$vi"
  13
  14'
  15
  16if ! expr "$vi" : '[a-z]*$' >/dev/null
  17then
  18        vi=
  19fi
  20
  21for i in GIT_EDITOR core_editor EDITOR VISUAL $vi
  22do
  23        cat >e-$i.sh <<-EOF
  24        #!$SHELL_PATH
  25        echo "Edited by $i" >"\$1"
  26        EOF
  27        chmod +x e-$i.sh
  28done
  29
  30if ! test -z "$vi"
  31then
  32        mv e-$vi.sh $vi
  33fi
  34
  35test_expect_success setup '
  36
  37        msg="Hand-edited" &&
  38        test_commit "$msg" &&
  39        echo "$msg" >expect &&
  40        git show -s --format=%s > actual &&
  41        test_cmp actual expect
  42
  43'
  44
  45TERM=dumb
  46export TERM
  47test_expect_success 'dumb should error out when falling back on vi' '
  48
  49        if git commit --amend
  50        then
  51                echo "Oops?"
  52                false
  53        else
  54                : happy
  55        fi
  56'
  57
  58test_expect_success 'dumb should prefer EDITOR to VISUAL' '
  59
  60        EDITOR=./e-EDITOR.sh &&
  61        VISUAL=./e-VISUAL.sh &&
  62        export EDITOR VISUAL &&
  63        git commit --amend &&
  64        test "$(git show -s --format=%s)" = "Edited by EDITOR"
  65
  66'
  67
  68TERM=vt100
  69export TERM
  70for i in $vi EDITOR VISUAL core_editor GIT_EDITOR
  71do
  72        echo "Edited by $i" >expect
  73        unset EDITOR VISUAL GIT_EDITOR
  74        git config --unset-all core.editor
  75        case "$i" in
  76        core_editor)
  77                git config core.editor ./e-core_editor.sh
  78                ;;
  79        [A-Z]*)
  80                eval "$i=./e-$i.sh"
  81                export $i
  82                ;;
  83        esac
  84        test_expect_success "Using $i" '
  85                git --exec-path=. commit --amend &&
  86                git show -s --pretty=oneline |
  87                sed -e "s/^[0-9a-f]* //" >actual &&
  88                test_cmp actual expect
  89        '
  90done
  91
  92unset EDITOR VISUAL GIT_EDITOR
  93git config --unset-all core.editor
  94for i in $vi EDITOR VISUAL core_editor GIT_EDITOR
  95do
  96        echo "Edited by $i" >expect
  97        case "$i" in
  98        core_editor)
  99                git config core.editor ./e-core_editor.sh
 100                ;;
 101        [A-Z]*)
 102                eval "$i=./e-$i.sh"
 103                export $i
 104                ;;
 105        esac
 106        test_expect_success "Using $i (override)" '
 107                git --exec-path=. commit --amend &&
 108                git show -s --pretty=oneline |
 109                sed -e "s/^[0-9a-f]* //" >actual &&
 110                test_cmp actual expect
 111        '
 112done
 113
 114if echo 'echo space > "$1"' > "e space.sh"
 115then
 116        # FS supports spaces in filenames
 117        test_set_prereq SPACES_IN_FILENAMES
 118fi
 119
 120test_expect_success SPACES_IN_FILENAMES 'editor with a space' '
 121
 122        chmod a+x "e space.sh" &&
 123        GIT_EDITOR="./e\ space.sh" git commit --amend &&
 124        test space = "$(git show -s --pretty=format:%s)"
 125
 126'
 127
 128unset GIT_EDITOR
 129test_expect_success SPACES_IN_FILENAMES 'core.editor with a space' '
 130
 131        git config core.editor \"./e\ space.sh\" &&
 132        git commit --amend &&
 133        test space = "$(git show -s --pretty=format:%s)"
 134
 135'
 136
 137test_done