blob: 1f53ea8090355c9a351da1983388e1a49fd88ae3 [file] [log] [blame]
Wincent Colaiuta264474f2007-12-08 13:29:47 +01001#!/bin/sh
2
3test_description='commit-msg hook'
4
5. ./test-lib.sh
6
Wincent Colaiuta80f86602007-12-10 08:33:26 +01007test_expect_success 'with no hook' '
Wincent Colaiuta264474f2007-12-08 13:29:47 +01008
Wincent Colaiuta80f86602007-12-10 08:33:26 +01009 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
Bryan Donlanf69e8362008-05-04 01:37:59 -040022
23## Not using test_set_editor here so we can easily ensure the editor variable
24## is only set for the editor tests
Wincent Colaiuta80f86602007-12-10 08:33:26 +010025FAKE_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 &&
Bryan Donlanf69e8362008-05-04 01:37:59 -040033 GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit
Wincent Colaiuta80f86602007-12-10 08:33:26 +010034
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 &&
Bryan Donlanf69e8362008-05-04 01:37:59 -040050 GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify
Wincent Colaiuta80f86602007-12-10 08:33:26 +010051
52'
Wincent Colaiuta264474f2007-12-08 13:29:47 +010053
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
Wincent Colaiuta80f86602007-12-10 08:33:26 +010064test_expect_success 'with succeeding hook' '
Wincent Colaiuta264474f2007-12-08 13:29:47 +010065
Wincent Colaiuta80f86602007-12-10 08:33:26 +010066 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 &&
Bryan Donlanf69e8362008-05-04 01:37:59 -040077 GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit
Wincent Colaiuta80f86602007-12-10 08:33:26 +010078
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 &&
Bryan Donlanf69e8362008-05-04 01:37:59 -040094 GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify
Wincent Colaiuta80f86602007-12-10 08:33:26 +010095
96'
Wincent Colaiuta264474f2007-12-08 13:29:47 +010097
98# now a hook that fails
99cat > "$HOOK" <<EOF
100#!/bin/sh
101exit 1
102EOF
103
Junio C Hamano41ac4142008-02-01 01:50:53 -0800104test_expect_success 'with failing hook' '
Wincent Colaiuta264474f2007-12-08 13:29:47 +0100105
Wincent Colaiuta80f86602007-12-10 08:33:26 +0100106 echo "another" >> file &&
107 git add file &&
Stephan Beyerd492b312008-07-12 17:47:52 +0200108 test_must_fail git commit -m "another"
Wincent Colaiuta80f86602007-12-10 08:33:26 +0100109
110'
111
Junio C Hamano41ac4142008-02-01 01:50:53 -0800112test_expect_success 'with failing hook (editor)' '
Wincent Colaiuta80f86602007-12-10 08:33:26 +0100113
114 echo "more another" >> file &&
115 git add file &&
116 echo "more another" > FAKE_MSG &&
Bryan Donlanf69e8362008-05-04 01:37:59 -0400117 ! (GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit)
Wincent Colaiuta80f86602007-12-10 08:33:26 +0100118
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 &&
Bryan Donlanf69e8362008-05-04 01:37:59 -0400134 GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify
Wincent Colaiuta80f86602007-12-10 08:33:26 +0100135
136'
Wincent Colaiuta264474f2007-12-08 13:29:47 +0100137
138chmod -x "$HOOK"
Johannes Sixtee9fb682009-03-13 22:55:27 +0100139test_expect_success POSIXPERM 'with non-executable hook' '
Wincent Colaiuta264474f2007-12-08 13:29:47 +0100140
Wincent Colaiuta80f86602007-12-10 08:33:26 +0100141 echo "content" >> file &&
142 git add file &&
143 git commit -m "content"
144
145'
146
Johannes Sixtee9fb682009-03-13 22:55:27 +0100147test_expect_success POSIXPERM 'with non-executable hook (editor)' '
Wincent Colaiuta80f86602007-12-10 08:33:26 +0100148
149 echo "content again" >> file &&
150 git add file &&
151 echo "content again" > FAKE_MSG &&
Bryan Donlanf69e8362008-05-04 01:37:59 -0400152 GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit -m "content again"
Wincent Colaiuta80f86602007-12-10 08:33:26 +0100153
154'
155
Johannes Sixtee9fb682009-03-13 22:55:27 +0100156test_expect_success POSIXPERM '--no-verify with non-executable hook' '
Wincent Colaiuta80f86602007-12-10 08:33:26 +0100157
158 echo "more content" >> file &&
159 git add file &&
160 git commit --no-verify -m "more content"
161
162'
163
Johannes Sixtee9fb682009-03-13 22:55:27 +0100164test_expect_success POSIXPERM '--no-verify with non-executable hook (editor)' '
Wincent Colaiuta80f86602007-12-10 08:33:26 +0100165
166 echo "even more content" >> file &&
167 git add file &&
168 echo "even more content" > FAKE_MSG &&
Bryan Donlanf69e8362008-05-04 01:37:59 -0400169 GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify
Wincent Colaiuta80f86602007-12-10 08:33:26 +0100170
171'
Wincent Colaiuta264474f2007-12-08 13:29:47 +0100172
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
Wincent Colaiuta80f86602007-12-10 08:33:26 +0100185test_expect_success 'hook edits commit message' '
Wincent Colaiuta264474f2007-12-08 13:29:47 +0100186
Wincent Colaiuta80f86602007-12-10 08:33:26 +0100187 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 &&
Bryan Donlanf69e8362008-05-04 01:37:59 -0400199 GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit &&
Wincent Colaiuta80f86602007-12-10 08:33:26 +0100200 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 &&
Bryan Donlanf69e8362008-05-04 01:37:59 -0400218 GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify &&
Wincent Colaiuta80f86602007-12-10 08:33:26 +0100219 commit_msg_is "more plus"
220
221'
Wincent Colaiuta264474f2007-12-08 13:29:47 +0100222
223test_done