git/t/t3405-rebase-malformed.sh
Genki Sky a6c612b528 rebase: add --allow-empty-message option
This option allows commits with empty commit messages to be rebased,
matching the same option in git-commit and git-cherry-pick. While empty
log messages are frowned upon, sometimes one finds them in older
repositories (e.g. translated from another VCS [0]), or have other
reasons for desiring them. The option is available in git-commit and
git-cherry-pick, so it is natural to make other git tools play nicely
with them. Adding this as an option allows the default to be "give the
user a chance to fix", while not interrupting the user's workflow
otherwise [1].

  [0]: https://stackoverflow.com/q/8542304
  [1]: https://public-inbox.org/git/7vd33afqjh.fsf@alter.siamese.dyndns.org/

To implement this, add a new --allow-empty-message flag. Then propagate
it to all calls of 'git commit', 'git cherry-pick', and 'git rebase--helper'
within the rebase scripts.

Signed-off-by: Genki Sky <sky@genki.is>
Reviewed-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-02-07 11:26:46 -08:00

96 lines
2.1 KiB
Bash
Executable file

#!/bin/sh
test_description='rebase should handle arbitrary git message'
. ./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 master &&
echo One >file1 &&
test_tick &&
git add file1 &&
git commit -m "Second commit"
'
test_expect_success 'rebase commit with multi-line subject' '
git rebase master 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 master 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' '
test_must_fail git rebase -m master empty-message-merge &&
git rebase --abort &&
git rebase -m --allow-empty-message master 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^ &&
git rebase --abort &&
FAKE_COMMIT_MESSAGE=" " FAKE_LINES="reword 1" \
git rebase -i --allow-empty-message HEAD^
'
test_done