]> git.ipfire.org Git - thirdparty/git.git/blame - t/t7504-commit-msg-hook.sh
Merge branch 'jk/complete-commit-c' into maint
[thirdparty/git.git] / t / t7504-commit-msg-hook.sh
CommitLineData
264474f2
WC
1#!/bin/sh
2
3test_description='commit-msg hook'
4
5. ./test-lib.sh
6
80f86605 7test_expect_success 'with no hook' '
264474f2 8
80f86605
WC
9 echo "foo" > file &&
10 git add file &&
11 git commit -m "first"
12
13'
14
15# set up fake editor for interactive editing
16cat > fake-editor <<'EOF'
17#!/bin/sh
18cp FAKE_MSG "$1"
19exit 0
20EOF
21chmod +x fake-editor
f69e836f
BD
22
23## Not using test_set_editor here so we can easily ensure the editor variable
24## is only set for the editor tests
80f86605
WC
25FAKE_EDITOR="$(pwd)/fake-editor"
26export FAKE_EDITOR
27
28test_expect_success 'with no hook (editor)' '
29
30 echo "more foo" >> file &&
31 git add file &&
32 echo "more foo" > FAKE_MSG &&
f69e836f 33 GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit
80f86605
WC
34
35'
36
37test_expect_success '--no-verify with no hook' '
38
39 echo "bar" > file &&
40 git add file &&
41 git commit --no-verify -m "bar"
42
43'
44
45test_expect_success '--no-verify with no hook (editor)' '
46
47 echo "more bar" > file &&
48 git add file &&
49 echo "more bar" > FAKE_MSG &&
f69e836f 50 GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify
80f86605
WC
51
52'
264474f2
WC
53
54# now install hook that always succeeds
55HOOKDIR="$(git rev-parse --git-dir)/hooks"
56HOOK="$HOOKDIR/commit-msg"
57mkdir -p "$HOOKDIR"
58cat > "$HOOK" <<EOF
59#!/bin/sh
60exit 0
61EOF
62chmod +x "$HOOK"
63
80f86605 64test_expect_success 'with succeeding hook' '
264474f2 65
80f86605
WC
66 echo "more" >> file &&
67 git add file &&
68 git commit -m "more"
69
70'
71
72test_expect_success 'with succeeding hook (editor)' '
73
74 echo "more more" >> file &&
75 git add file &&
76 echo "more more" > FAKE_MSG &&
f69e836f 77 GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit
80f86605
WC
78
79'
80
81test_expect_success '--no-verify with succeeding hook' '
82
83 echo "even more" >> file &&
84 git add file &&
85 git commit --no-verify -m "even more"
86
87'
88
89test_expect_success '--no-verify with succeeding hook (editor)' '
90
91 echo "even more more" >> file &&
92 git add file &&
93 echo "even more more" > FAKE_MSG &&
f69e836f 94 GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify
80f86605
WC
95
96'
264474f2
WC
97
98# now a hook that fails
99cat > "$HOOK" <<EOF
100#!/bin/sh
101exit 1
102EOF
103
41ac414e 104test_expect_success 'with failing hook' '
80f86605
WC
105
106 echo "another" >> file &&
107 git add file &&
d492b31c 108 test_must_fail git commit -m "another"
80f86605
WC
109
110'
111
41ac414e 112test_expect_success 'with failing hook (editor)' '
80f86605
WC
113
114 echo "more another" >> file &&
115 git add file &&
116 echo "more another" > FAKE_MSG &&
f69e836f 117 ! (GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit)
264474f2 118
80f86605
WC
119'
120
121test_expect_success '--no-verify with failing hook' '
122
123 echo "stuff" >> file &&
124 git add file &&
125 git commit --no-verify -m "stuff"
126
127'
128
129test_expect_success '--no-verify with failing hook (editor)' '
130
131 echo "more stuff" >> file &&
132 git add file &&
133 echo "more stuff" > FAKE_MSG &&
f69e836f 134 GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify
80f86605
WC
135
136'
264474f2
WC
137
138chmod -x "$HOOK"
ee9fb68c 139test_expect_success POSIXPERM 'with non-executable hook' '
80f86605
WC
140
141 echo "content" >> file &&
142 git add file &&
143 git commit -m "content"
144
145'
146
ee9fb68c 147test_expect_success POSIXPERM 'with non-executable hook (editor)' '
80f86605
WC
148
149 echo "content again" >> file &&
150 git add file &&
151 echo "content again" > FAKE_MSG &&
f69e836f 152 GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit -m "content again"
80f86605
WC
153
154'
155
ee9fb68c 156test_expect_success POSIXPERM '--no-verify with non-executable hook' '
80f86605
WC
157
158 echo "more content" >> file &&
159 git add file &&
160 git commit --no-verify -m "more content"
161
162'
264474f2 163
ee9fb68c 164test_expect_success POSIXPERM '--no-verify with non-executable hook (editor)' '
80f86605
WC
165
166 echo "even more content" >> file &&
167 git add file &&
168 echo "even more content" > FAKE_MSG &&
f69e836f 169 GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify
80f86605
WC
170
171'
264474f2
WC
172
173# now a hook that edits the commit message
174cat > "$HOOK" <<'EOF'
175#!/bin/sh
176echo "new message" > "$1"
177exit 0
178EOF
179chmod +x "$HOOK"
180
181commit_msg_is () {
182 test "`git log --pretty=format:%s%b -1`" = "$1"
183}
184
80f86605
WC
185test_expect_success 'hook edits commit message' '
186
187 echo "additional" >> file &&
188 git add file &&
189 git commit -m "additional" &&
190 commit_msg_is "new message"
191
192'
193
194test_expect_success 'hook edits commit message (editor)' '
195
196 echo "additional content" >> file &&
197 git add file &&
198 echo "additional content" > FAKE_MSG &&
f69e836f 199 GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit &&
80f86605
WC
200 commit_msg_is "new message"
201
202'
203
204test_expect_success "hook doesn't edit commit message" '
205
206 echo "plus" >> file &&
207 git add file &&
208 git commit --no-verify -m "plus" &&
209 commit_msg_is "plus"
210
211'
212
213test_expect_success "hook doesn't edit commit message (editor)" '
214
215 echo "more plus" >> file &&
216 git add file &&
217 echo "more plus" > FAKE_MSG &&
f69e836f 218 GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify &&
80f86605
WC
219 commit_msg_is "more plus"
220
221'
264474f2
WC
222
223test_done