]>
Commit | Line | Data |
---|---|---|
d1cc130a SG |
1 | #!/bin/sh |
2 | # | |
3 | # Copyright (c) 2007 Steven Grimm | |
4 | # | |
5 | ||
47a528ad | 6 | test_description='git commit |
d1cc130a SG |
7 | |
8 | Tests for selected commit options.' | |
9 | ||
10 | . ./test-lib.sh | |
11 | ||
12 | commit_msg_is () { | |
d5a719e4 ÆAB |
13 | expect=commit_msg_is.expect |
14 | actual=commit_msg_is.actual | |
15 | ||
16 | printf "%s" "$(git log --pretty=format:%s%b -1)" >$expect && | |
17 | printf "%s" "$1" >$actual && | |
18 | test_cmp $expect $actual | |
d1cc130a SG |
19 | } |
20 | ||
21 | # A sanity check to see if commit is working at all. | |
22 | test_expect_success 'a basic commit in an empty tree should succeed' ' | |
23 | echo content > foo && | |
24 | git add foo && | |
25 | git commit -m "initial commit" | |
26 | ' | |
27 | ||
28 | test_expect_success 'nonexistent template file should return error' ' | |
29 | echo changes >> foo && | |
30 | git add foo && | |
2140b140 JN |
31 | ( |
32 | GIT_EDITOR="echo hello >\"\$1\"" && | |
33 | export GIT_EDITOR && | |
34 | test_must_fail git commit --template "$PWD"/notexist | |
35 | ) | |
d1cc130a SG |
36 | ' |
37 | ||
38 | test_expect_success 'nonexistent template file in config should return error' ' | |
39 | git config commit.template "$PWD"/notexist && | |
2140b140 JN |
40 | test_when_finished "git config --unset commit.template" && |
41 | ( | |
42 | GIT_EDITOR="echo hello >\"\$1\"" && | |
43 | export GIT_EDITOR && | |
44 | test_must_fail git commit | |
45 | ) | |
d1cc130a SG |
46 | ' |
47 | ||
48 | # From now on we'll use a template file that exists. | |
49 | TEMPLATE="$PWD"/template | |
50 | ||
51 | test_expect_success 'unedited template should not commit' ' | |
52 | echo "template line" > "$TEMPLATE" && | |
d492b31c | 53 | test_must_fail git commit --template "$TEMPLATE" |
d1cc130a SG |
54 | ' |
55 | ||
56 | test_expect_success 'unedited template with comments should not commit' ' | |
57 | echo "# comment in template" >> "$TEMPLATE" && | |
d492b31c | 58 | test_must_fail git commit --template "$TEMPLATE" |
d1cc130a SG |
59 | ' |
60 | ||
61 | test_expect_success 'a Signed-off-by line by itself should not commit' ' | |
bfdbee98 JH |
62 | ( |
63 | test_set_editor "$TEST_DIRECTORY"/t7500/add-signed-off && | |
64 | test_must_fail git commit --template "$TEMPLATE" | |
65 | ) | |
d1cc130a SG |
66 | ' |
67 | ||
68 | test_expect_success 'adding comments to a template should not commit' ' | |
bfdbee98 JH |
69 | ( |
70 | test_set_editor "$TEST_DIRECTORY"/t7500/add-comments && | |
71 | test_must_fail git commit --template "$TEMPLATE" | |
72 | ) | |
d1cc130a SG |
73 | ' |
74 | ||
0b430a17 | 75 | test_expect_success C_LOCALE_OUTPUT 'adding real content to a template should commit' ' |
bfdbee98 JH |
76 | ( |
77 | test_set_editor "$TEST_DIRECTORY"/t7500/add-content && | |
78 | git commit --template "$TEMPLATE" | |
79 | ) && | |
d1cc130a SG |
80 | commit_msg_is "template linecommit message" |
81 | ' | |
82 | ||
0b430a17 | 83 | test_expect_success C_LOCALE_OUTPUT '-t option should be short for --template' ' |
d1cc130a SG |
84 | echo "short template" > "$TEMPLATE" && |
85 | echo "new content" >> foo && | |
86 | git add foo && | |
bfdbee98 JH |
87 | ( |
88 | test_set_editor "$TEST_DIRECTORY"/t7500/add-content && | |
89 | git commit -t "$TEMPLATE" | |
90 | ) && | |
d1cc130a SG |
91 | commit_msg_is "short templatecommit message" |
92 | ' | |
93 | ||
0b430a17 | 94 | test_expect_success C_LOCALE_OUTPUT 'config-specified template should commit' ' |
d1cc130a SG |
95 | echo "new template" > "$TEMPLATE" && |
96 | git config commit.template "$TEMPLATE" && | |
97 | echo "more content" >> foo && | |
98 | git add foo && | |
bfdbee98 JH |
99 | ( |
100 | test_set_editor "$TEST_DIRECTORY"/t7500/add-content && | |
101 | git commit | |
102 | ) && | |
d1cc130a SG |
103 | git config --unset commit.template && |
104 | commit_msg_is "new templatecommit message" | |
105 | ' | |
106 | ||
107 | test_expect_success 'explicit commit message should override template' ' | |
108 | echo "still more content" >> foo && | |
109 | git add foo && | |
bfdbee98 | 110 | GIT_EDITOR="$TEST_DIRECTORY"/t7500/add-content git commit --template "$TEMPLATE" \ |
d1cc130a | 111 | -m "command line msg" && |
55246aac | 112 | commit_msg_is "command line msg" |
d1cc130a SG |
113 | ' |
114 | ||
115 | test_expect_success 'commit message from file should override template' ' | |
116 | echo "content galore" >> foo && | |
117 | git add foo && | |
118 | echo "standard input msg" | | |
bfdbee98 JH |
119 | ( |
120 | test_set_editor "$TEST_DIRECTORY"/t7500/add-content && | |
121 | git commit --template "$TEMPLATE" --file - | |
122 | ) && | |
55246aac | 123 | commit_msg_is "standard input msg" |
d1cc130a SG |
124 | ' |
125 | ||
8b1ae678 BF |
126 | cat >"$TEMPLATE" <<\EOF |
127 | ||
128 | ||
129 | ### template | |
130 | ||
131 | EOF | |
132 | test_expect_success 'commit message from template with whitespace issue' ' | |
133 | echo "content galore" >>foo && | |
134 | git add foo && | |
135 | GIT_EDITOR="$TEST_DIRECTORY"/t7500/add-whitespaced-content git commit \ | |
136 | --template "$TEMPLATE" && | |
137 | commit_msg_is "commit message" | |
138 | ' | |
139 | ||
859a4dbc RV |
140 | test_expect_success 'using alternate GIT_INDEX_FILE (1)' ' |
141 | ||
142 | cp .git/index saved-index && | |
143 | ( | |
144 | echo some new content >file && | |
145 | GIT_INDEX_FILE=.git/another_index && | |
146 | export GIT_INDEX_FILE && | |
147 | git add file && | |
148 | git commit -m "commit using another index" && | |
149 | git diff-index --exit-code HEAD && | |
150 | git diff-files --exit-code | |
151 | ) && | |
152 | cmp .git/index saved-index >/dev/null | |
153 | ||
154 | ' | |
155 | ||
156 | test_expect_success 'using alternate GIT_INDEX_FILE (2)' ' | |
157 | ||
158 | cp .git/index saved-index && | |
159 | ( | |
160 | rm -f .git/no-such-index && | |
161 | GIT_INDEX_FILE=.git/no-such-index && | |
162 | export GIT_INDEX_FILE && | |
163 | git commit -m "commit using nonexistent index" && | |
164 | test -z "$(git ls-files)" && | |
165 | test -z "$(git ls-tree HEAD)" | |
166 | ||
167 | ) && | |
168 | cmp .git/index saved-index >/dev/null | |
13208572 | 169 | ' |
859a4dbc | 170 | |
13208572 JS |
171 | cat > expect << EOF |
172 | zort | |
2150554b | 173 | |
13208572 JS |
174 | Signed-off-by: C O Mitter <committer@example.com> |
175 | EOF | |
176 | ||
177 | test_expect_success '--signoff' ' | |
178 | echo "yet another content *narf*" >> foo && | |
7eb5bbdb | 179 | echo "zort" | git commit -s -F - foo && |
9524cf29 | 180 | git cat-file commit HEAD | sed "1,/^\$/d" > output && |
bfdbee98 | 181 | test_cmp expect output |
859a4dbc RV |
182 | ' |
183 | ||
dbd0f5c7 JH |
184 | test_expect_success 'commit message from file (1)' ' |
185 | mkdir subdir && | |
186 | echo "Log in top directory" >log && | |
187 | echo "Log in sub directory" >subdir/log && | |
188 | ( | |
189 | cd subdir && | |
190 | git commit --allow-empty -F log | |
191 | ) && | |
192 | commit_msg_is "Log in sub directory" | |
193 | ' | |
194 | ||
195 | test_expect_success 'commit message from file (2)' ' | |
196 | rm -f log && | |
197 | echo "Log in sub directory" >subdir/log && | |
198 | ( | |
199 | cd subdir && | |
200 | git commit --allow-empty -F log | |
201 | ) && | |
202 | commit_msg_is "Log in sub directory" | |
203 | ' | |
204 | ||
205 | test_expect_success 'commit message from stdin' ' | |
206 | ( | |
207 | cd subdir && | |
208 | echo "Log with foo word" | git commit --allow-empty -F - | |
209 | ) && | |
210 | commit_msg_is "Log with foo word" | |
211 | ' | |
212 | ||
aae94ffb SB |
213 | test_expect_success 'commit -F overrides -t' ' |
214 | ( | |
215 | cd subdir && | |
216 | echo "-F log" > f.log && | |
217 | echo "-t template" > t.template && | |
218 | git commit --allow-empty -F f.log -t t.template | |
219 | ) && | |
220 | commit_msg_is "-F log" | |
221 | ' | |
222 | ||
c9b5fde7 ÆAB |
223 | test_expect_success 'Commit without message is allowed with --allow-empty-message' ' |
224 | echo "more content" >>foo && | |
225 | git add foo && | |
226 | >empty && | |
227 | git commit --allow-empty-message <empty && | |
228 | commit_msg_is "" | |
229 | ' | |
230 | ||
231 | test_expect_success 'Commit without message is no-no without --allow-empty-message' ' | |
232 | echo "more content" >>foo && | |
233 | git add foo && | |
234 | >empty && | |
235 | test_must_fail git commit <empty | |
236 | ' | |
237 | ||
238 | test_expect_success 'Commit a message with --allow-empty-message' ' | |
239 | echo "even more content" >>foo && | |
240 | git add foo && | |
241 | git commit --allow-empty-message -m"hello there" && | |
242 | commit_msg_is "hello there" | |
243 | ' | |
244 | ||
b1a6c0a9 PN |
245 | commit_for_rebase_autosquash_setup () { |
246 | echo "first content line" >>foo && | |
247 | git add foo && | |
248 | cat >log <<EOF && | |
249 | target message subject line | |
250 | ||
251 | target message body line 1 | |
252 | target message body line 2 | |
253 | EOF | |
254 | git commit -F log && | |
255 | echo "second content line" >>foo && | |
256 | git add foo && | |
257 | git commit -m "intermediate commit" && | |
258 | echo "third content line" >>foo && | |
259 | git add foo | |
260 | } | |
261 | ||
262 | test_expect_success 'commit --fixup provides correct one-line commit message' ' | |
263 | commit_for_rebase_autosquash_setup && | |
264 | git commit --fixup HEAD~1 && | |
265 | commit_msg_is "fixup! target message subject line" | |
266 | ' | |
267 | ||
7951bd30 PN |
268 | test_expect_success 'commit --squash works with -F' ' |
269 | commit_for_rebase_autosquash_setup && | |
270 | echo "log message from file" >msgfile && | |
271 | git commit --squash HEAD~1 -F msgfile && | |
272 | commit_msg_is "squash! target message subject linelog message from file" | |
273 | ' | |
274 | ||
275 | test_expect_success 'commit --squash works with -m' ' | |
276 | commit_for_rebase_autosquash_setup && | |
277 | git commit --squash HEAD~1 -m "foo bar\nbaz" && | |
278 | commit_msg_is "squash! target message subject linefoo bar\nbaz" | |
279 | ' | |
280 | ||
281 | test_expect_success 'commit --squash works with -C' ' | |
282 | commit_for_rebase_autosquash_setup && | |
283 | git commit --squash HEAD~1 -C HEAD && | |
284 | commit_msg_is "squash! target message subject lineintermediate commit" | |
285 | ' | |
286 | ||
287 | test_expect_success 'commit --squash works with -c' ' | |
288 | commit_for_rebase_autosquash_setup && | |
289 | test_set_editor "$TEST_DIRECTORY"/t7500/edit-content && | |
290 | git commit --squash HEAD~1 -c HEAD && | |
291 | commit_msg_is "squash! target message subject lineedited commit" | |
292 | ' | |
293 | ||
294 | test_expect_success 'commit --squash works with -C for same commit' ' | |
295 | commit_for_rebase_autosquash_setup && | |
296 | git commit --squash HEAD -C HEAD && | |
297 | commit_msg_is "squash! intermediate commit" | |
298 | ' | |
299 | ||
300 | test_expect_success 'commit --squash works with -c for same commit' ' | |
301 | commit_for_rebase_autosquash_setup && | |
302 | test_set_editor "$TEST_DIRECTORY"/t7500/edit-content && | |
303 | git commit --squash HEAD -c HEAD && | |
304 | commit_msg_is "squash! edited commit" | |
305 | ' | |
306 | ||
0b430a17 | 307 | test_expect_success C_LOCALE_OUTPUT 'commit --squash works with editor' ' |
7951bd30 PN |
308 | commit_for_rebase_autosquash_setup && |
309 | test_set_editor "$TEST_DIRECTORY"/t7500/add-content && | |
310 | git commit --squash HEAD~1 && | |
311 | commit_msg_is "squash! target message subject linecommit message" | |
312 | ' | |
313 | ||
b1a6c0a9 PN |
314 | test_expect_success 'invalid message options when using --fixup' ' |
315 | echo changes >>foo && | |
316 | echo "message" >log && | |
317 | git add foo && | |
7951bd30 | 318 | test_must_fail git commit --fixup HEAD~1 --squash HEAD~2 && |
b1a6c0a9 PN |
319 | test_must_fail git commit --fixup HEAD~1 -C HEAD~2 && |
320 | test_must_fail git commit --fixup HEAD~1 -c HEAD~2 && | |
321 | test_must_fail git commit --fixup HEAD~1 -m "cmdline message" && | |
322 | test_must_fail git commit --fixup HEAD~1 -F log | |
323 | ' | |
324 | ||
d1cc130a | 325 | test_done |