]>
Commit | Line | Data |
---|---|---|
12ace0b2 KH |
1 | #!/bin/sh |
2 | # | |
3 | # Copyright (c) 2007 Kristian Høgsberg <krh@redhat.com> | |
4 | # | |
5 | ||
6 | # FIXME: Test the various index usages, -i and -o, test reflog, | |
264474f2 | 7 | # signoff |
12ace0b2 | 8 | |
47a528ad | 9 | test_description='git commit' |
12ace0b2 | 10 | . ./test-lib.sh |
1af524eb | 11 | . "$TEST_DIRECTORY/diff-lib.sh" |
12ace0b2 | 12 | |
1af524eb | 13 | author='The Real Author <someguy@his.email.org>' |
12ace0b2 | 14 | |
1af524eb | 15 | test_tick |
b3b298af | 16 | |
1af524eb JN |
17 | test_expect_success 'initial status' ' |
18 | echo bongo bongo >file && | |
19 | git add file && | |
32177ba6 | 20 | git status >actual && |
4ddb1354 | 21 | test_i18ngrep "No commits yet" actual |
32177ba6 | 22 | ' |
12ace0b2 | 23 | |
1af524eb JN |
24 | test_expect_success 'fail initial amend' ' |
25 | test_must_fail git commit --amend | |
26 | ' | |
12ace0b2 | 27 | |
1af524eb JN |
28 | test_expect_success 'setup: initial commit' ' |
29 | git commit -m initial | |
30 | ' | |
12ace0b2 | 31 | |
1af524eb | 32 | test_expect_success '-m and -F do not mix' ' |
c65dc351 | 33 | git checkout HEAD file && echo >>file && git add file && |
1af524eb JN |
34 | test_must_fail git commit -m foo -m bar -F file |
35 | ' | |
12ace0b2 | 36 | |
1af524eb | 37 | test_expect_success '-m and -C do not mix' ' |
c65dc351 | 38 | git checkout HEAD file && echo >>file && git add file && |
1af524eb JN |
39 | test_must_fail git commit -C HEAD -m illegal |
40 | ' | |
12ace0b2 | 41 | |
1af524eb JN |
42 | test_expect_success 'paths and -a do not mix' ' |
43 | echo King of the bongo >file && | |
44 | test_must_fail git commit -m foo -a file | |
45 | ' | |
9d87442f | 46 | |
e41fcfe9 | 47 | test_expect_success PERL 'can use paths with --interactive' ' |
587ac8c9 JK |
48 | echo bong-o-bong >file && |
49 | # 2: update, 1:st path, that is all, 7: quit | |
50 | ( echo 2; echo 1; echo; echo 7 ) | | |
e41fcfe9 CI |
51 | git commit -m foo --interactive file && |
52 | git reset --hard HEAD^ | |
587ac8c9 | 53 | ' |
9d87442f | 54 | |
1af524eb | 55 | test_expect_success 'using invalid commit with -C' ' |
0bb0c155 | 56 | test_must_fail git commit --allow-empty -C bogus |
1af524eb | 57 | ' |
12ace0b2 | 58 | |
1af524eb | 59 | test_expect_success 'nothing to commit' ' |
088304bf | 60 | git reset --hard && |
1af524eb JN |
61 | test_must_fail git commit -m initial |
62 | ' | |
12ace0b2 | 63 | |
9cbcc2a7 TRC |
64 | test_expect_success '--dry-run fails with nothing to commit' ' |
65 | test_must_fail git commit -m initial --dry-run | |
66 | ' | |
67 | ||
68 | test_expect_success '--short fails with nothing to commit' ' | |
69 | test_must_fail git commit -m initial --short | |
70 | ' | |
71 | ||
72 | test_expect_success '--porcelain fails with nothing to commit' ' | |
73 | test_must_fail git commit -m initial --porcelain | |
74 | ' | |
75 | ||
76 | test_expect_success '--long fails with nothing to commit' ' | |
77 | test_must_fail git commit -m initial --long | |
78 | ' | |
79 | ||
1af524eb JN |
80 | test_expect_success 'setup: non-initial commit' ' |
81 | echo bongo bongo bongo >file && | |
82 | git commit -m next -a | |
83 | ' | |
12ace0b2 | 84 | |
9cbcc2a7 TRC |
85 | test_expect_success '--dry-run with stuff to commit returns ok' ' |
86 | echo bongo bongo bongo >>file && | |
87 | git commit -m next -a --dry-run | |
88 | ' | |
89 | ||
90 | test_expect_failure '--short with stuff to commit returns ok' ' | |
91 | echo bongo bongo bongo >>file && | |
92 | git commit -m next -a --short | |
93 | ' | |
94 | ||
95 | test_expect_failure '--porcelain with stuff to commit returns ok' ' | |
96 | echo bongo bongo bongo >>file && | |
97 | git commit -m next -a --porcelain | |
98 | ' | |
99 | ||
100 | test_expect_success '--long with stuff to commit returns ok' ' | |
101 | echo bongo bongo bongo >>file && | |
102 | git commit -m next -a --long | |
103 | ' | |
104 | ||
1af524eb JN |
105 | test_expect_success 'commit message from non-existing file' ' |
106 | echo more bongo: bongo bongo bongo bongo >file && | |
107 | test_must_fail git commit -F gah -a | |
108 | ' | |
12ace0b2 | 109 | |
1af524eb JN |
110 | test_expect_success 'empty commit message' ' |
111 | # Empty except stray tabs and spaces on a few lines. | |
112 | sed -e "s/@//g" >msg <<-\EOF && | |
113 | @ @ | |
114 | @@ | |
115 | @ @ | |
116 | @Signed-off-by: hula@ | |
117 | EOF | |
118 | test_must_fail git commit -F msg -a | |
119 | ' | |
12ace0b2 | 120 | |
010c7dbc JH |
121 | test_expect_success 'template "emptyness" check does not kick in with -F' ' |
122 | git checkout HEAD file && echo >>file && git add file && | |
123 | git commit -t file -F file | |
124 | ' | |
125 | ||
b2eda9bd JH |
126 | test_expect_success 'template "emptyness" check' ' |
127 | git checkout HEAD file && echo >>file && git add file && | |
128 | test_must_fail git commit -t file 2>err && | |
129 | test_i18ngrep "did not edit" err | |
130 | ' | |
131 | ||
1af524eb | 132 | test_expect_success 'setup: commit message from file' ' |
010c7dbc | 133 | git checkout HEAD file && echo >>file && git add file && |
1af524eb JN |
134 | echo this is the commit message, coming from a file >msg && |
135 | git commit -F msg -a | |
136 | ' | |
12ace0b2 | 137 | |
1af524eb JN |
138 | test_expect_success 'amend commit' ' |
139 | cat >editor <<-\EOF && | |
140 | #!/bin/sh | |
141 | sed -e "s/a file/an amend commit/g" < "$1" > "$1-" | |
142 | mv "$1-" "$1" | |
143 | EOF | |
144 | chmod 755 editor && | |
145 | EDITOR=./editor git commit --amend | |
146 | ' | |
12ace0b2 | 147 | |
ea2d4ed3 JK |
148 | test_expect_success 'amend --only ignores staged contents' ' |
149 | cp file file.expect && | |
150 | echo changed >file && | |
151 | git add file && | |
152 | git commit --no-edit --amend --only && | |
153 | git cat-file blob HEAD:file >file.actual && | |
154 | test_cmp file.expect file.actual && | |
155 | git diff --exit-code | |
156 | ' | |
157 | ||
319d8352 AK |
158 | test_expect_success 'allow-empty --only ignores staged contents' ' |
159 | echo changed-again >file && | |
160 | git add file && | |
161 | git commit --allow-empty --only -m "empty" && | |
162 | git cat-file blob HEAD:file >file.actual && | |
163 | test_cmp file.expect file.actual && | |
ea2d4ed3 JK |
164 | git diff --exit-code |
165 | ' | |
166 | ||
bc821899 JN |
167 | test_expect_success 'set up editor' ' |
168 | cat >editor <<-\EOF && | |
169 | #!/bin/sh | |
170 | sed -e "s/unamended/amended/g" <"$1" >"$1-" | |
171 | mv "$1-" "$1" | |
172 | EOF | |
173 | chmod 755 editor | |
174 | ' | |
175 | ||
176 | test_expect_success 'amend without launching editor' ' | |
177 | echo unamended >expect && | |
178 | git commit --allow-empty -m "unamended" && | |
179 | echo needs more bongo >file && | |
180 | git add file && | |
181 | EDITOR=./editor git commit --no-edit --amend && | |
182 | git diff --exit-code HEAD -- file && | |
183 | git diff-tree -s --format=%s HEAD >msg && | |
184 | test_cmp expect msg | |
185 | ' | |
186 | ||
187 | test_expect_success '--amend --edit' ' | |
188 | echo amended >expect && | |
189 | git commit --allow-empty -m "unamended" && | |
190 | echo bongo again >file && | |
191 | git add file && | |
192 | EDITOR=./editor git commit --edit --amend && | |
193 | git diff-tree -s --format=%s HEAD >msg && | |
194 | test_cmp expect msg | |
195 | ' | |
196 | ||
d9a93575 CW |
197 | test_expect_success '--amend --edit of empty message' ' |
198 | cat >replace <<-\EOF && | |
199 | #!/bin/sh | |
200 | echo "amended" >"$1" | |
201 | EOF | |
202 | chmod 755 replace && | |
203 | git commit --allow-empty --allow-empty-message -m "" && | |
204 | echo more bongo >file && | |
205 | git add file && | |
206 | EDITOR=./replace git commit --edit --amend && | |
207 | git diff-tree -s --format=%s HEAD >msg && | |
208 | ./replace expect && | |
209 | test_cmp expect msg | |
210 | ' | |
211 | ||
27014cbc JK |
212 | test_expect_success '--amend to set message to empty' ' |
213 | echo bata >file && | |
178e8143 AD |
214 | git add file && |
215 | git commit -m "unamended" && | |
216 | git commit --amend --allow-empty-message -m "" && | |
217 | git diff-tree -s --format=%s HEAD >msg && | |
218 | echo "" >expect && | |
219 | test_cmp expect msg | |
220 | ' | |
221 | ||
27014cbc | 222 | test_expect_success '--amend to set empty message needs --allow-empty-message' ' |
178e8143 AD |
223 | echo conga >file && |
224 | git add file && | |
225 | git commit -m "unamended" && | |
226 | test_must_fail git commit --amend -m "" && | |
227 | git diff-tree -s --format=%s HEAD >msg && | |
228 | echo "unamended" >expect && | |
229 | test_cmp expect msg | |
230 | ' | |
231 | ||
bc821899 JN |
232 | test_expect_success '-m --edit' ' |
233 | echo amended >expect && | |
234 | git commit --allow-empty -m buffer && | |
235 | echo bongo bongo >file && | |
236 | git add file && | |
237 | EDITOR=./editor git commit -m unamended --edit && | |
238 | git diff-tree -s --format=%s HEAD >msg && | |
239 | test_cmp expect msg | |
240 | ' | |
241 | ||
1af524eb JN |
242 | test_expect_success '-m and -F do not mix' ' |
243 | echo enough with the bongos >file && | |
244 | test_must_fail git commit -F msg -m amending . | |
245 | ' | |
246 | ||
247 | test_expect_success 'using message from other commit' ' | |
248 | git commit -C HEAD^ . | |
249 | ' | |
12ace0b2 | 250 | |
1af524eb JN |
251 | test_expect_success 'editing message from other commit' ' |
252 | cat >editor <<-\EOF && | |
253 | #!/bin/sh | |
254 | sed -e "s/amend/older/g" < "$1" > "$1-" | |
255 | mv "$1-" "$1" | |
256 | EOF | |
257 | chmod 755 editor && | |
258 | echo hula hula >file && | |
259 | EDITOR=./editor git commit -c HEAD^ -a | |
260 | ' | |
12ace0b2 | 261 | |
1af524eb JN |
262 | test_expect_success 'message from stdin' ' |
263 | echo silly new contents >file && | |
264 | echo commit message from stdin | | |
265 | git commit -F - -a | |
266 | ' | |
12ace0b2 | 267 | |
1af524eb JN |
268 | test_expect_success 'overriding author from command line' ' |
269 | echo gak >file && | |
270 | git commit -m author \ | |
271 | --author "Rubber Duck <rduck@convoy.org>" -a >output 2>&1 && | |
272 | grep Rubber.Duck output | |
273 | ' | |
12ace0b2 | 274 | |
1af524eb JN |
275 | test_expect_success PERL 'interactive add' ' |
276 | echo 7 | | |
277 | git commit --interactive | | |
278 | grep "What now" | |
279 | ' | |
280 | ||
281 | test_expect_success PERL "commit --interactive doesn't change index if editor aborts" ' | |
282 | echo zoo >file && | |
02a481fc | 283 | test_must_fail git diff --exit-code >diff1 && |
1af524eb JN |
284 | (echo u ; echo "*" ; echo q) | |
285 | ( | |
286 | EDITOR=: && | |
287 | export EDITOR && | |
288 | test_must_fail git commit --interactive | |
289 | ) && | |
02a481fc | 290 | git diff >diff2 && |
1af524eb JN |
291 | compare_diff_patch diff1 diff2 |
292 | ' | |
12ace0b2 | 293 | |
1af524eb JN |
294 | test_expect_success 'editor not invoked if -F is given' ' |
295 | cat >editor <<-\EOF && | |
296 | #!/bin/sh | |
297 | sed -e s/good/bad/g <"$1" >"$1-" | |
298 | mv "$1-" "$1" | |
299 | EOF | |
300 | chmod 755 editor && | |
301 | ||
302 | echo A good commit message. >msg && | |
303 | echo moo >file && | |
304 | ||
305 | EDITOR=./editor git commit -a -F msg && | |
306 | git show -s --pretty=format:%s >subject && | |
307 | grep -q good subject && | |
308 | ||
309 | echo quack >file && | |
310 | echo Another good message. | | |
311 | EDITOR=./editor git commit -a -F - && | |
312 | git show -s --pretty=format:%s >subject && | |
313 | grep -q good subject | |
314 | ' | |
12ace0b2 | 315 | |
db33af0a | 316 | test_expect_success 'partial commit that involves removal (1)' ' |
80bffaf7 JH |
317 | |
318 | git rm --cached file && | |
319 | mv file elif && | |
320 | git add elif && | |
321 | git commit -m "Partial: add elif" elif && | |
322 | git diff-tree --name-status HEAD^ HEAD >current && | |
323 | echo "A elif" >expected && | |
1e368681 | 324 | test_cmp expected current |
80bffaf7 JH |
325 | |
326 | ' | |
327 | ||
db33af0a | 328 | test_expect_success 'partial commit that involves removal (2)' ' |
80bffaf7 JH |
329 | |
330 | git commit -m "Partial: remove file" file && | |
331 | git diff-tree --name-status HEAD^ HEAD >current && | |
332 | echo "D file" >expected && | |
1e368681 | 333 | test_cmp expected current |
80bffaf7 JH |
334 | |
335 | ' | |
336 | ||
db33af0a JH |
337 | test_expect_success 'partial commit that involves removal (3)' ' |
338 | ||
339 | git rm --cached elif && | |
340 | echo elif >elif && | |
341 | git commit -m "Partial: modify elif" elif && | |
342 | git diff-tree --name-status HEAD^ HEAD >current && | |
343 | echo "M elif" >expected && | |
1e368681 | 344 | test_cmp expected current |
db33af0a JH |
345 | |
346 | ' | |
347 | ||
5aa5cd46 JH |
348 | test_expect_success 'amend commit to fix author' ' |
349 | ||
350 | oldtick=$GIT_AUTHOR_DATE && | |
351 | test_tick && | |
352 | git reset --hard && | |
353 | git cat-file -p HEAD | | |
354 | sed -e "s/author.*/author $author $oldtick/" \ | |
355 | -e "s/^\(committer.*> \).*$/\1$GIT_COMMITTER_DATE/" > \ | |
356 | expected && | |
357 | git commit --amend --author="$author" && | |
358 | git cat-file -p HEAD > current && | |
1e368681 | 359 | test_cmp expected current |
5aa5cd46 JH |
360 | |
361 | ' | |
362 | ||
02b47cd7 MV |
363 | test_expect_success 'amend commit to fix date' ' |
364 | ||
365 | test_tick && | |
366 | newtick=$GIT_AUTHOR_DATE && | |
367 | git reset --hard && | |
368 | git cat-file -p HEAD | | |
369 | sed -e "s/author.*/author $author $newtick/" \ | |
370 | -e "s/^\(committer.*> \).*$/\1$GIT_COMMITTER_DATE/" > \ | |
371 | expected && | |
372 | git commit --amend --date="$newtick" && | |
373 | git cat-file -p HEAD > current && | |
374 | test_cmp expected current | |
375 | ||
376 | ' | |
377 | ||
b7242b8c JK |
378 | test_expect_success 'commit mentions forced date in output' ' |
379 | git commit --amend --date=2010-01-02T03:04:05 >output && | |
380 | grep "Date: *Sat Jan 2 03:04:05 2010" output | |
381 | ' | |
382 | ||
14ac2864 JK |
383 | test_expect_success 'commit complains about completely bogus dates' ' |
384 | test_must_fail git commit --amend --date=seventeen | |
385 | ' | |
386 | ||
387 | test_expect_success 'commit --date allows approxidate' ' | |
388 | git commit --amend \ | |
389 | --date="midnight the 12th of october, anno domini 1979" && | |
390 | echo "Fri Oct 12 00:00:00 1979 +0000" >expect && | |
391 | git log -1 --format=%ad >actual && | |
392 | test_cmp expect actual | |
4579bb41 JK |
393 | ' |
394 | ||
5aa5cd46 JH |
395 | test_expect_success 'sign off (1)' ' |
396 | ||
397 | echo 1 >positive && | |
398 | git add positive && | |
399 | git commit -s -m "thank you" && | |
400 | git cat-file commit HEAD | sed -e "1,/^\$/d" >actual && | |
401 | ( | |
402 | echo thank you | |
403 | echo | |
404 | git var GIT_COMMITTER_IDENT | | |
405 | sed -e "s/>.*/>/" -e "s/^/Signed-off-by: /" | |
406 | ) >expected && | |
82ebb0b6 | 407 | test_cmp expected actual |
5aa5cd46 JH |
408 | |
409 | ' | |
410 | ||
411 | test_expect_success 'sign off (2)' ' | |
412 | ||
413 | echo 2 >positive && | |
414 | git add positive && | |
415 | existing="Signed-off-by: Watch This <watchthis@example.com>" && | |
416 | git commit -s -m "thank you | |
417 | ||
418 | $existing" && | |
419 | git cat-file commit HEAD | sed -e "1,/^\$/d" >actual && | |
420 | ( | |
421 | echo thank you | |
422 | echo | |
423 | echo $existing | |
424 | git var GIT_COMMITTER_IDENT | | |
425 | sed -e "s/>.*/>/" -e "s/^/Signed-off-by: /" | |
426 | ) >expected && | |
82ebb0b6 | 427 | test_cmp expected actual |
5aa5cd46 JH |
428 | |
429 | ' | |
430 | ||
c1e01b0c DB |
431 | test_expect_success 'signoff gap' ' |
432 | ||
433 | echo 3 >positive && | |
434 | git add positive && | |
435 | alt="Alt-RFC-822-Header: Value" && | |
436 | git commit -s -m "welcome | |
437 | ||
438 | $alt" && | |
439 | git cat-file commit HEAD | sed -e "1,/^\$/d" > actual && | |
440 | ( | |
441 | echo welcome | |
442 | echo | |
443 | echo $alt | |
444 | git var GIT_COMMITTER_IDENT | | |
445 | sed -e "s/>.*/>/" -e "s/^/Signed-off-by: /" | |
446 | ) >expected && | |
447 | test_cmp expected actual | |
448 | ' | |
449 | ||
450 | test_expect_success 'signoff gap 2' ' | |
451 | ||
452 | echo 4 >positive && | |
453 | git add positive && | |
454 | alt="fixed: 34" && | |
455 | git commit -s -m "welcome | |
456 | ||
457 | We have now | |
458 | $alt" && | |
459 | git cat-file commit HEAD | sed -e "1,/^\$/d" > actual && | |
460 | ( | |
461 | echo welcome | |
462 | echo | |
463 | echo We have now | |
464 | echo $alt | |
465 | echo | |
466 | git var GIT_COMMITTER_IDENT | | |
467 | sed -e "s/>.*/>/" -e "s/^/Signed-off-by: /" | |
468 | ) >expected && | |
469 | test_cmp expected actual | |
470 | ' | |
471 | ||
967dfd4d JT |
472 | test_expect_success 'signoff respects trailer config' ' |
473 | ||
474 | echo 5 >positive && | |
475 | git add positive && | |
476 | git commit -s -m "subject | |
477 | ||
478 | non-trailer line | |
479 | Myfooter: x" && | |
480 | git cat-file commit HEAD | sed -e "1,/^\$/d" > actual && | |
481 | ( | |
482 | echo subject | |
483 | echo | |
484 | echo non-trailer line | |
485 | echo Myfooter: x | |
486 | echo | |
487 | echo "Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>" | |
488 | ) >expected && | |
489 | test_cmp expected actual && | |
490 | ||
491 | echo 6 >positive && | |
492 | git add positive && | |
493 | git -c "trailer.Myfooter.ifexists=add" commit -s -m "subject | |
494 | ||
495 | non-trailer line | |
496 | Myfooter: x" && | |
497 | git cat-file commit HEAD | sed -e "1,/^\$/d" > actual && | |
498 | ( | |
499 | echo subject | |
500 | echo | |
501 | echo non-trailer line | |
502 | echo Myfooter: x | |
503 | echo "Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>" | |
504 | ) >expected && | |
505 | test_cmp expected actual | |
506 | ' | |
507 | ||
5aa5cd46 JH |
508 | test_expect_success 'multiple -m' ' |
509 | ||
510 | >negative && | |
511 | git add negative && | |
512 | git commit -m "one" -m "two" -m "three" && | |
513 | git cat-file commit HEAD | sed -e "1,/^\$/d" >actual && | |
514 | ( | |
515 | echo one | |
516 | echo | |
517 | echo two | |
518 | echo | |
519 | echo three | |
520 | ) >expected && | |
82ebb0b6 | 521 | test_cmp expected actual |
5aa5cd46 JH |
522 | |
523 | ' | |
524 | ||
d63c2fd1 KH |
525 | test_expect_success 'amend commit to fix author' ' |
526 | ||
527 | oldtick=$GIT_AUTHOR_DATE && | |
528 | test_tick && | |
529 | git reset --hard && | |
530 | git cat-file -p HEAD | | |
531 | sed -e "s/author.*/author $author $oldtick/" \ | |
532 | -e "s/^\(committer.*> \).*$/\1$GIT_COMMITTER_DATE/" > \ | |
533 | expected && | |
534 | git commit --amend --author="$author" && | |
535 | git cat-file -p HEAD > current && | |
1e368681 | 536 | test_cmp expected current |
d63c2fd1 KH |
537 | |
538 | ' | |
1200993a KH |
539 | |
540 | test_expect_success 'git commit <file> with dirty index' ' | |
541 | echo tacocat > elif && | |
542 | echo tehlulz > chz && | |
543 | git add chz && | |
544 | git commit elif -m "tacocat is a palindrome" && | |
545 | git show --stat | grep elif && | |
546 | git diff --cached | grep chz | |
547 | ' | |
548 | ||
13aba1e5 JS |
549 | test_expect_success 'same tree (single parent)' ' |
550 | ||
1af524eb JN |
551 | git reset --hard && |
552 | test_must_fail git commit -m empty | |
13aba1e5 JS |
553 | |
554 | ' | |
555 | ||
36863af1 JH |
556 | test_expect_success 'same tree (single parent) --allow-empty' ' |
557 | ||
558 | git commit --allow-empty -m "forced empty" && | |
559 | git cat-file commit HEAD | grep forced | |
560 | ||
561 | ' | |
562 | ||
13aba1e5 JS |
563 | test_expect_success 'same tree (merge and amend merge)' ' |
564 | ||
565 | git checkout -b side HEAD^ && | |
566 | echo zero >zero && | |
567 | git add zero && | |
568 | git commit -m "add zero" && | |
569 | git checkout master && | |
570 | ||
571 | git merge -s ours side -m "empty ok" && | |
572 | git diff HEAD^ HEAD >actual && | |
573 | : >expected && | |
82ebb0b6 | 574 | test_cmp expected actual && |
13aba1e5 JS |
575 | |
576 | git commit --amend -m "empty really ok" && | |
577 | git diff HEAD^ HEAD >actual && | |
578 | : >expected && | |
82ebb0b6 | 579 | test_cmp expected actual |
13aba1e5 JS |
580 | |
581 | ' | |
582 | ||
1eb1e9ee JH |
583 | test_expect_success 'amend using the message from another commit' ' |
584 | ||
585 | git reset --hard && | |
586 | test_tick && | |
587 | git commit --allow-empty -m "old commit" && | |
588 | old=$(git rev-parse --verify HEAD) && | |
589 | test_tick && | |
590 | git commit --allow-empty -m "new commit" && | |
591 | new=$(git rev-parse --verify HEAD) && | |
592 | test_tick && | |
593 | git commit --allow-empty --amend -C "$old" && | |
594 | git show --pretty="format:%ad %s" "$old" >expected && | |
595 | git show --pretty="format:%ad %s" HEAD >actual && | |
82ebb0b6 | 596 | test_cmp expected actual |
1eb1e9ee JH |
597 | |
598 | ' | |
599 | ||
8a2f8733 JH |
600 | test_expect_success 'amend using the message from a commit named with tag' ' |
601 | ||
602 | git reset --hard && | |
603 | test_tick && | |
604 | git commit --allow-empty -m "old commit" && | |
605 | old=$(git rev-parse --verify HEAD) && | |
606 | git tag -a -m "tag on old" tagged-old HEAD && | |
607 | test_tick && | |
608 | git commit --allow-empty -m "new commit" && | |
609 | new=$(git rev-parse --verify HEAD) && | |
610 | test_tick && | |
611 | git commit --allow-empty --amend -C tagged-old && | |
612 | git show --pretty="format:%ad %s" "$old" >expected && | |
613 | git show --pretty="format:%ad %s" HEAD >actual && | |
82ebb0b6 | 614 | test_cmp expected actual |
8a2f8733 JH |
615 | |
616 | ' | |
617 | ||
6360d343 TR |
618 | test_expect_success 'amend can copy notes' ' |
619 | ||
620 | git config notes.rewrite.amend true && | |
621 | git config notes.rewriteRef "refs/notes/*" && | |
622 | test_commit foo && | |
623 | git notes add -m"a note" && | |
624 | test_tick && | |
625 | git commit --amend -m"new foo" && | |
626 | test "$(git notes show)" = "a note" | |
627 | ||
628 | ' | |
629 | ||
4682d852 JH |
630 | test_expect_success 'commit a file whose name is a dash' ' |
631 | git reset --hard && | |
632 | for i in 1 2 3 4 5 | |
633 | do | |
634 | echo $i | |
635 | done >./- && | |
636 | git add ./- && | |
637 | test_tick && | |
638 | git commit -m "add dash" >output </dev/null && | |
639 | test_i18ngrep " changed, 5 insertions" output | |
640 | ' | |
641 | ||
f0c73200 TR |
642 | test_expect_success '--only works on to-be-born branch' ' |
643 | # This test relies on having something in the index, as it | |
644 | # would not otherwise actually prove much. So check this. | |
645 | test -n "$(git ls-files)" && | |
646 | git checkout --orphan orphan && | |
647 | echo foo >newfile && | |
648 | git add newfile && | |
649 | git commit --only newfile -m"--only on unborn branch" && | |
650 | echo newfile >expected && | |
651 | git ls-tree -r --name-only HEAD >actual && | |
652 | test_cmp expected actual | |
653 | ' | |
654 | ||
8dc874b2 SS |
655 | test_expect_success '--dry-run with conflicts fixed from a merge' ' |
656 | # setup two branches with conflicting information | |
657 | # in the same file, resolve the conflict, | |
658 | # call commit with --dry-run | |
659 | echo "Initial contents, unimportant" >test-file && | |
660 | git add test-file && | |
661 | git commit -m "Initial commit" && | |
662 | echo "commit-1-state" >test-file && | |
663 | git commit -m "commit 1" -i test-file && | |
664 | git tag commit-1 && | |
665 | git checkout -b branch-2 HEAD^1 && | |
666 | echo "commit-2-state" >test-file && | |
667 | git commit -m "commit 2" -i test-file && | |
668 | ! $(git merge --no-commit commit-1) && | |
669 | echo "commit-2-state" >test-file && | |
670 | git add test-file && | |
671 | git commit --dry-run && | |
672 | git commit -m "conflicts fixed from merge." | |
673 | ' | |
674 | ||
12ace0b2 | 675 | test_done |