Merge branch 'nd/checkout-disambiguation' into maint
[git] / t / t7005-editor.sh
1 #!/bin/sh
2
3 test_description='GIT_EDITOR, core.editor, and stuff'
4
5 . ./test-lib.sh
6
7 unset EDITOR VISUAL GIT_EDITOR
8
9 test_expect_success 'determine default editor' '
10
11         vi=$(TERM=vt100 git var GIT_EDITOR) &&
12         test -n "$vi"
13
14 '
15
16 if ! expr "$vi" : '[a-z]*$' >/dev/null
17 then
18         vi=
19 fi
20
21 for i in GIT_EDITOR core_editor EDITOR VISUAL $vi
22 do
23         cat >e-$i.sh <<-EOF
24         #!$SHELL_PATH
25         echo "Edited by $i" >"\$1"
26         EOF
27         chmod +x e-$i.sh
28 done
29
30 if ! test -z "$vi"
31 then
32         mv e-$vi.sh $vi
33 fi
34
35 test_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
45 TERM=dumb
46 export TERM
47 test_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
58 test_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
68 TERM=vt100
69 export TERM
70 for i in $vi EDITOR VISUAL core_editor GIT_EDITOR
71 do
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         '
90 done
91
92 unset EDITOR VISUAL GIT_EDITOR
93 git config --unset-all core.editor
94 for i in $vi EDITOR VISUAL core_editor GIT_EDITOR
95 do
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         '
112 done
113
114 if echo 'echo space > "$1"' > "e space.sh"
115 then
116         # FS supports spaces in filenames
117         test_set_prereq SPACES_IN_FILENAMES
118 fi
119
120 test_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
128 unset GIT_EDITOR
129 test_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
137 test_done