|  | #!/bin/sh | 
|  |  | 
|  | test_description='rebase should handle arbitrary git message' | 
|  |  | 
|  | GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main | 
|  | export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME | 
|  |  | 
|  | . ./test-lib.sh | 
|  | . "$TEST_DIRECTORY"/lib-rebase.sh | 
|  |  | 
|  | cat >F <<\EOF | 
|  | This is an example of a commit log message | 
|  | that does not  conform to git commit convention. | 
|  |  | 
|  | It has two paragraphs, but its first paragraph is not friendly | 
|  | to oneline summary format. | 
|  | EOF | 
|  |  | 
|  | cat >G <<\EOF | 
|  | commit log message containing a diff | 
|  | EOF | 
|  |  | 
|  |  | 
|  | test_expect_success setup ' | 
|  |  | 
|  | >file1 && | 
|  | >file2 && | 
|  | git add file1 file2 && | 
|  | test_tick && | 
|  | git commit -m "Initial commit" && | 
|  | git branch diff-in-message && | 
|  | git branch empty-message-merge && | 
|  |  | 
|  | git checkout -b multi-line-subject && | 
|  | cat F >file2 && | 
|  | git add file2 && | 
|  | test_tick && | 
|  | git commit -F F && | 
|  |  | 
|  | git cat-file commit HEAD | sed -e "1,/^\$/d" >F0 && | 
|  |  | 
|  | git checkout diff-in-message && | 
|  | echo "commit log message containing a diff" >G && | 
|  | echo "" >>G && | 
|  | cat G >file2 && | 
|  | git add file2 && | 
|  | git diff --cached >>G && | 
|  | test_tick && | 
|  | git commit -F G && | 
|  |  | 
|  | git cat-file commit HEAD | sed -e "1,/^\$/d" >G0 && | 
|  |  | 
|  | git checkout empty-message-merge && | 
|  | echo file3 >file3 && | 
|  | git add file3 && | 
|  | git commit --allow-empty-message -m "" && | 
|  |  | 
|  | git checkout main && | 
|  |  | 
|  | echo One >file1 && | 
|  | test_tick && | 
|  | git add file1 && | 
|  | git commit -m "Second commit" | 
|  | ' | 
|  |  | 
|  | test_expect_success 'rebase commit with multi-line subject' ' | 
|  |  | 
|  | git rebase main multi-line-subject && | 
|  | git cat-file commit HEAD | sed -e "1,/^\$/d" >F1 && | 
|  |  | 
|  | test_cmp F0 F1 && | 
|  | test_cmp F F0 | 
|  | ' | 
|  |  | 
|  | test_expect_success 'rebase commit with diff in message' ' | 
|  | git rebase main diff-in-message && | 
|  | git cat-file commit HEAD | sed -e "1,/^$/d" >G1 && | 
|  | test_cmp G0 G1 && | 
|  | test_cmp G G0 | 
|  | ' | 
|  |  | 
|  | test_expect_success 'rebase -m commit with empty message' ' | 
|  | git rebase -m main empty-message-merge | 
|  | ' | 
|  |  | 
|  | test_expect_success 'rebase -i commit with empty message' ' | 
|  | git checkout diff-in-message && | 
|  | set_fake_editor && | 
|  | test_must_fail env FAKE_COMMIT_MESSAGE=" " FAKE_LINES="reword 1" \ | 
|  | git rebase -i HEAD^ | 
|  | ' | 
|  |  | 
|  | test_done |