t / t7005-editor.shon commit untracked-cache: be defensive about missing NULs in index (c6909f9)
   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 expect actual
  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 expect actual
  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 expect actual
 111        '
 112done
 113
 114test_expect_success 'editor with a space' '
 115        echo "echo space >\"\$1\"" >"e space.sh" &&
 116        chmod a+x "e space.sh" &&
 117        GIT_EDITOR="./e\ space.sh" git commit --amend &&
 118        test space = "$(git show -s --pretty=format:%s)"
 119
 120'
 121
 122unset GIT_EDITOR
 123test_expect_success 'core.editor with a space' '
 124
 125        git config core.editor \"./e\ space.sh\" &&
 126        git commit --amend &&
 127        test space = "$(git show -s --pretty=format:%s)"
 128
 129'
 130
 131test_done