Skip to content

Commit 3d1bda6

Browse files
charvi-077gitster
authored andcommitted
t7500: add tests for --fixup=[amend|reword] options
Mentored-by: Christian Couder <[email protected]> Mentored-by: Phillip Wood <[email protected]> Signed-off-by: Charvi Mendiratta <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 3270ae8 commit 3d1bda6

File tree

1 file changed

+159
-0
lines changed

1 file changed

+159
-0
lines changed

t/t7500-commit-template-squash-signoff.sh

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ Tests for template, signoff, squash and -F functions.'
99

1010
. ./test-lib.sh
1111

12+
. "$TEST_DIRECTORY"/lib-rebase.sh
13+
1214
commit_msg_is () {
1315
expect=commit_msg_is.expect
1416
actual=commit_msg_is.actual
@@ -279,6 +281,163 @@ test_expect_success 'commit --fixup -m"something" -m"extra"' '
279281
280282
extra"
281283
'
284+
get_commit_msg () {
285+
rev="$1" &&
286+
git log -1 --pretty=format:"%B" "$rev"
287+
}
288+
289+
test_expect_success 'commit --fixup=amend: creates amend! commit' '
290+
commit_for_rebase_autosquash_setup &&
291+
cat >expected <<-EOF &&
292+
amend! $(git log -1 --format=%s HEAD~)
293+
294+
$(get_commit_msg HEAD~)
295+
296+
edited
297+
EOF
298+
(
299+
set_fake_editor &&
300+
FAKE_COMMIT_AMEND="edited" \
301+
git commit --fixup=amend:HEAD~
302+
) &&
303+
get_commit_msg HEAD >actual &&
304+
test_cmp expected actual
305+
'
306+
307+
test_expect_success '--fixup=amend: --only ignores staged changes' '
308+
commit_for_rebase_autosquash_setup &&
309+
cat >expected <<-EOF &&
310+
amend! $(git log -1 --format=%s HEAD~)
311+
312+
$(get_commit_msg HEAD~)
313+
314+
edited
315+
EOF
316+
(
317+
set_fake_editor &&
318+
FAKE_COMMIT_AMEND="edited" \
319+
git commit --fixup=amend:HEAD~ --only
320+
) &&
321+
get_commit_msg HEAD >actual &&
322+
test_cmp expected actual &&
323+
test_cmp_rev HEAD@{1}^{tree} HEAD^{tree} &&
324+
test_cmp_rev HEAD@{1} HEAD^ &&
325+
test_expect_code 1 git diff --cached --exit-code &&
326+
git cat-file blob :foo >actual &&
327+
test_cmp foo actual
328+
'
329+
330+
test_expect_success '--fixup=reword: ignores staged changes' '
331+
commit_for_rebase_autosquash_setup &&
332+
cat >expected <<-EOF &&
333+
amend! $(git log -1 --format=%s HEAD~)
334+
335+
$(get_commit_msg HEAD~)
336+
337+
edited
338+
EOF
339+
(
340+
set_fake_editor &&
341+
FAKE_COMMIT_AMEND="edited" \
342+
git commit --fixup=reword:HEAD~
343+
) &&
344+
get_commit_msg HEAD >actual &&
345+
test_cmp expected actual &&
346+
test_cmp_rev HEAD@{1}^{tree} HEAD^{tree} &&
347+
test_cmp_rev HEAD@{1} HEAD^ &&
348+
test_expect_code 1 git diff --cached --exit-code &&
349+
git cat-file blob :foo >actual &&
350+
test_cmp foo actual
351+
'
352+
353+
test_expect_success '--fixup=reword: error out with -m option' '
354+
commit_for_rebase_autosquash_setup &&
355+
echo "fatal: cannot combine -m with --fixup:reword" >expect &&
356+
test_must_fail git commit --fixup=reword:HEAD~ -m "reword commit message" 2>actual &&
357+
test_cmp expect actual
358+
'
359+
360+
test_expect_success '--fixup=amend: error out with -m option' '
361+
commit_for_rebase_autosquash_setup &&
362+
echo "fatal: cannot combine -m with --fixup:amend" >expect &&
363+
test_must_fail git commit --fixup=amend:HEAD~ -m "amend commit message" 2>actual &&
364+
test_cmp expect actual
365+
'
366+
367+
test_expect_success 'consecutive amend! commits remove amend! line from commit msg body' '
368+
commit_for_rebase_autosquash_setup &&
369+
cat >expected <<-EOF &&
370+
amend! amend! $(git log -1 --format=%s HEAD~)
371+
372+
$(get_commit_msg HEAD~)
373+
374+
edited 1
375+
376+
edited 2
377+
EOF
378+
echo "reword new commit message" >actual &&
379+
(
380+
set_fake_editor &&
381+
FAKE_COMMIT_AMEND="edited 1" \
382+
git commit --fixup=reword:HEAD~ &&
383+
FAKE_COMMIT_AMEND="edited 2" \
384+
git commit --fixup=reword:HEAD
385+
) &&
386+
get_commit_msg HEAD >actual &&
387+
test_cmp expected actual
388+
'
389+
390+
test_expect_success 'deny to create amend! commit if its commit msg body is empty' '
391+
commit_for_rebase_autosquash_setup &&
392+
echo "Aborting commit due to empty commit message body." >expected &&
393+
(
394+
set_fake_editor &&
395+
test_must_fail env FAKE_COMMIT_MESSAGE="amend! target message subject line" \
396+
git commit --fixup=amend:HEAD~ 2>actual
397+
) &&
398+
test_cmp expected actual
399+
'
400+
401+
test_expect_success 'amend! commit allows empty commit msg body with --allow-empty-message' '
402+
commit_for_rebase_autosquash_setup &&
403+
cat >expected <<-EOF &&
404+
amend! $(git log -1 --format=%s HEAD~)
405+
EOF
406+
(
407+
set_fake_editor &&
408+
FAKE_COMMIT_MESSAGE="amend! target message subject line" \
409+
git commit --fixup=amend:HEAD~ --allow-empty-message &&
410+
get_commit_msg HEAD >actual
411+
) &&
412+
test_cmp expected actual
413+
'
414+
415+
test_fixup_reword_opt () {
416+
test_expect_success C_LOCALE_OUTPUT "--fixup=reword: incompatible with $1" "
417+
echo 'fatal: reword option of --fixup is mutually exclusive with'\
418+
'--patch/--interactive/--all/--include/--only' >expect &&
419+
test_must_fail git commit --fixup=reword:HEAD~ $1 2>actual &&
420+
test_cmp expect actual
421+
"
422+
}
423+
424+
for opt in --all --include --only --interactive --patch
425+
do
426+
test_fixup_reword_opt $opt
427+
done
428+
429+
test_expect_success '--fixup=reword: give error with pathsec' '
430+
commit_for_rebase_autosquash_setup &&
431+
echo "fatal: cannot combine reword option of --fixup with path '\''foo'\''" >expect &&
432+
test_must_fail git commit --fixup=reword:HEAD~ -- foo 2>actual &&
433+
test_cmp expect actual
434+
'
435+
436+
test_expect_success '--fixup=reword: -F give error message' '
437+
echo "fatal: Only one of -c/-C/-F/--fixup can be used." >expect &&
438+
test_must_fail git commit --fixup=reword:HEAD~ -F msg 2>actual &&
439+
test_cmp expect actual
440+
'
282441

283442
test_expect_success 'commit --squash works with -F' '
284443
commit_for_rebase_autosquash_setup &&

0 commit comments

Comments
 (0)