diff --git a/t/t7500-commit.sh b/t/t7500-commit.sh
index 116885a..fd1bf71 100755
--- a/t/t7500-commit.sh
+++ b/t/t7500-commit.sh
@@ -13,8 +13,8 @@ commit_msg_is () {
expect=commit_msg_is.expect
actual=commit_msg_is.actual
- printf "%s" "$(git log --pretty=format:%s%b -1)" >"$actual" &&
- printf "%s" "$1" >"$expect" &&
+ git log --pretty=format:%B -1 >"$actual" &&
+ printf "%b" "$1" >"$expect" &&
test_i18ncmp "$expect" "$actual"
}
@@ -76,7 +76,7 @@ test_expect_success 'adding real content to a template should commit' '
test_set_editor "$TEST_DIRECTORY"/t7500/add-content &&
git commit --template "$TEMPLATE"
) &&
- commit_msg_is "template linecommit message"
+ commit_msg_is "template line\ncommit message\n"
'
test_expect_success '-t option should be short for --template' '
@@ -87,7 +87,7 @@ test_expect_success '-t option should be short for --template' '
test_set_editor "$TEST_DIRECTORY"/t7500/add-content &&
git commit -t "$TEMPLATE"
) &&
- commit_msg_is "short templatecommit message"
+ commit_msg_is "short template\ncommit message\n"
'
test_expect_success 'config-specified template should commit' '
@@ -99,7 +99,7 @@ test_expect_success 'config-specified template should commit' '
test_set_editor "$TEST_DIRECTORY"/t7500/add-content &&
git commit
) &&
- commit_msg_is "new templatecommit message"
+ commit_msg_is "new template\ncommit message\n"
'
test_expect_success 'explicit commit message should override template' '
@@ -107,7 +107,7 @@ test_expect_success 'explicit commit message should override template' '
git add foo &&
GIT_EDITOR="$TEST_DIRECTORY"/t7500/add-content git commit --template "$TEMPLATE" \
-m "command line msg" &&
- commit_msg_is "command line msg"
+ commit_msg_is "command line msg\n"
'
test_expect_success 'commit message from file should override template' '
@@ -118,7 +118,7 @@ test_expect_success 'commit message from file should override template' '
test_set_editor "$TEST_DIRECTORY"/t7500/add-content &&
git commit --template "$TEMPLATE" --file -
) &&
- commit_msg_is "standard input msg"
+ commit_msg_is "standard input msg\n"
'
cat >"$TEMPLATE" <<\EOF
@@ -132,7 +132,7 @@ test_expect_success 'commit message from template with whitespace issue' '
git add foo &&
GIT_EDITOR="$TEST_DIRECTORY"/t7500/add-whitespaced-content git commit \
--template "$TEMPLATE" &&
- commit_msg_is "commit message"
+ commit_msg_is "commit message\n"
'
test_expect_success 'using alternate GIT_INDEX_FILE (1)' '
@@ -187,7 +187,7 @@ test_expect_success 'commit message from file (1)' '
cd subdir &&
git commit --allow-empty -F log
) &&
- commit_msg_is "Log in sub directory"
+ commit_msg_is "Log in sub directory\n"
'
test_expect_success 'commit message from file (2)' '
@@ -197,7 +197,7 @@ test_expect_success 'commit message from file (2)' '
cd subdir &&
git commit --allow-empty -F log
) &&
- commit_msg_is "Log in sub directory"
+ commit_msg_is "Log in sub directory\n"
'
test_expect_success 'commit message from stdin' '
@@ -205,17 +205,17 @@ test_expect_success 'commit message from stdin' '
cd subdir &&
echo "Log with foo word" | git commit --allow-empty -F -
) &&
- commit_msg_is "Log with foo word"
+ commit_msg_is "Log with foo word\n"
'
test_expect_success 'commit -F overrides -t' '
(
cd subdir &&
- echo "-F log" > f.log &&
- echo "-t template" > t.template &&
+ echo "log content" > f.log &&
+ echo "template content" > t.template &&
git commit --allow-empty -F f.log -t t.template
) &&
- commit_msg_is "-F log"
+ commit_msg_is "log content\n"
'
test_expect_success 'Commit without message is allowed with --allow-empty-message' '
@@ -238,7 +238,7 @@ test_expect_success 'Commit a message with --allow-empty-message' '
echo "even more content" >>foo &&
git add foo &&
git commit --allow-empty-message -m"hello there" &&
- commit_msg_is "hello there"
+ commit_msg_is "hello there\n"
'
test_expect_success 'commit -C empty respects --allow-empty-message' '
@@ -269,53 +269,53 @@ EOF
test_expect_success 'commit --fixup provides correct one-line commit message' '
commit_for_rebase_autosquash_setup &&
git commit --fixup HEAD~1 &&
- commit_msg_is "fixup! target message subject line"
+ commit_msg_is "fixup! target message subject line\n"
'
test_expect_success 'commit --squash works with -F' '
commit_for_rebase_autosquash_setup &&
echo "log message from file" >msgfile &&
git commit --squash HEAD~1 -F msgfile &&
- commit_msg_is "squash! target message subject linelog message from file"
+ commit_msg_is "squash! target message subject line\n\nlog message from file\n"
'
test_expect_success 'commit --squash works with -m' '
commit_for_rebase_autosquash_setup &&
- git commit --squash HEAD~1 -m "foo bar\nbaz" &&
- commit_msg_is "squash! target message subject linefoo bar\nbaz"
+ git commit --squash HEAD~1 -m "foo bar baz" &&
+ commit_msg_is "squash! target message subject line\n\nfoo bar baz\n"
'
test_expect_success 'commit --squash works with -C' '
commit_for_rebase_autosquash_setup &&
git commit --squash HEAD~1 -C HEAD &&
- commit_msg_is "squash! target message subject lineintermediate commit"
+ commit_msg_is "squash! target message subject line\n\nintermediate commit\n"
'
test_expect_success 'commit --squash works with -c' '
commit_for_rebase_autosquash_setup &&
test_set_editor "$TEST_DIRECTORY"/t7500/edit-content &&
git commit --squash HEAD~1 -c HEAD &&
- commit_msg_is "squash! target message subject lineedited commit"
+ commit_msg_is "squash! target message subject line\n\nedited commit\n"
'
test_expect_success 'commit --squash works with -C for same commit' '
commit_for_rebase_autosquash_setup &&
git commit --squash HEAD -C HEAD &&
- commit_msg_is "squash! intermediate commit"
+ commit_msg_is "squash! intermediate commit\n"
'
test_expect_success 'commit --squash works with -c for same commit' '
commit_for_rebase_autosquash_setup &&
test_set_editor "$TEST_DIRECTORY"/t7500/edit-content &&
git commit --squash HEAD -c HEAD &&
- commit_msg_is "squash! edited commit"
+ commit_msg_is "squash! edited commit\n"
'
test_expect_success 'commit --squash works with editor' '
commit_for_rebase_autosquash_setup &&
test_set_editor "$TEST_DIRECTORY"/t7500/add-content &&
git commit --squash HEAD~1 &&
- commit_msg_is "squash! target message subject linecommit message"
+ commit_msg_is "squash! target message subject line\n\ncommit message\n"
'
test_expect_success 'invalid message options when using --fixup' '
@@ -329,4 +329,47 @@ test_expect_success 'invalid message options when using --fixup' '
test_must_fail git commit --fixup HEAD~1 -F log
'
+test_expect_success 'no blank lines appended after template with --status' '
+ echo "template line" > "$TEMPLATE" &&
+ echo changes >>foo &&
+ git add foo &&
+ test_set_editor "$TEST_DIRECTORY"/t7500/add-content &&
+ git commit -e -t "$TEMPLATE" --status &&
+ commit_msg_is "template line\ncommit message\n"
+'
+
+test_expect_success 'template without newline before eof should work with --status' '
+ printf "%s" "template line" > "$TEMPLATE" &&
+ echo changes >>foo &&
+ git add foo &&
+ test_set_editor "$TEST_DIRECTORY"/t7500/add-content &&
+ git commit -e -t "$TEMPLATE" --status &&
+ commit_msg_is "template line\ncommit message\n"
+'
+
+test_expect_success 'no blank lines appended after -F text with --status' '
+ echo "log line" >log-file &&
+ echo changes >>foo &&
+ git add foo &&
+ test_set_editor "$TEST_DIRECTORY"/t7500/add-content &&
+ git commit -e -F log-file --status &&
+ commit_msg_is "log line\ncommit message\n"
+'
+
+test_expect_success 'logfile without newline before eof should work with --status' '
+ printf "%s" "log line" >log-file &&
+ echo changes >>foo &&
+ git add foo &&
+ test_set_editor "$TEST_DIRECTORY"/t7500/add-content &&
+ git commit -e -F log-file --status &&
+ commit_msg_is "log line\ncommit message\n"
+'
+
+test_expect_success 'commit does not expand \n in message' '
+ echo changes >>foo &&
+ git add foo &&
+ git commit -m "foo\nbar" &&
+ commit_msg_is "foo\\\\nbar\n"
+'
+
test_done
diff --git a/t/t7500/add-content-and-comment b/t/t7500/add-content-and-comment
index c4dccff..2a1fc22 100755
--- a/t/t7500/add-content-and-comment
+++ b/t/t7500/add-content-and-comment
@@ -1,5 +1,9 @@
#!/bin/sh
echo "commit message" >> "$1"
+# add multiple newlines to verify if --cleanup=whitespace will remove them
+echo >> "$1"
+echo >> "$1"
+echo >> "$1"
echo "# comment" >> "$1"
exit 0
diff --git a/t/t7502-commit.sh b/t/t7502-commit.sh
index 051489e..d2203ed 100755
--- a/t/t7502-commit.sh
+++ b/t/t7502-commit.sh
@@ -8,11 +8,12 @@ commit_msg_is () {
expect=commit_msg_is.expect
actual=commit_msg_is.actual
- printf "%s" "$(git log --pretty=format:%s%b -1)" >$actual &&
- printf "%s" "$1" >$expect &&
- test_i18ncmp $expect $actual
+ git log --pretty=format:%B -1 >"$actual" &&
+ printf "%b" "$1" >"$expect" &&
+ test_i18ncmp "$expect" "$actual"
}
+
# Arguments: [<prefix] [<commit message>] [<commit options>]
check_summary_oneline() {
test_tick &&@@ -255,15 +256,17 @@ test_expect_success 'cleanup commit messages (strip option,-F,-e)' '
echo >>negative &&
{ echo;echo sample;echo; } >text &&
git commit -e -F text -a &&
- head -n 4 .git/COMMIT_EDITMSG >actual
+ head -n 5 .git/COMMIT_EDITMSG >actual &&
+ commit_msg_is "sample\n"
'
-echo "sample
+echo "
+sample
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit." >expect
-test_expect_success 'cleanup commit messages (strip option,-F,-e): output' '
+test_expect_success 'editor view before cleanup commit messages (strip option,-F,-e)' '
test_i18ncmp expect actual
'
@@ -282,7 +285,7 @@ test_expect_success 'cleanup commit message (no config and no option uses defaul
test_set_editor "$TEST_DIRECTORY"/t7500/add-content-and-comment &&
git commit --no-status
) &&
- commit_msg_is "commit message"
+ commit_msg_is "commit message\n"
'
test_expect_success 'cleanup commit message (option overrides default)' '
@@ -292,7 +295,7 @@ test_expect_success 'cleanup commit message (option overrides default)' '
test_set_editor "$TEST_DIRECTORY"/t7500/add-content-and-comment &&
git commit --cleanup=whitespace --no-status
) &&
- commit_msg_is "commit message # comment"
+ commit_msg_is "commit message\n\n# comment\n"
'
test_expect_success 'cleanup commit message (config overrides default)' '
@@ -302,7 +305,7 @@ test_expect_success 'cleanup commit message (config overrides default)' '
test_set_editor "$TEST_DIRECTORY"/t7500/add-content-and-comment &&
git -c commit.cleanup=whitespace commit --no-status
) &&
- commit_msg_is "commit message # comment"
+ commit_msg_is "commit message\n\n# comment\n"
'
test_expect_success 'cleanup commit message (option overrides config)' '
@@ -312,28 +315,28 @@ test_expect_success 'cleanup commit message (option overrides config)' '
test_set_editor "$TEST_DIRECTORY"/t7500/add-content-and-comment &&
git -c commit.cleanup=whitespace commit --cleanup=default
) &&
- commit_msg_is "commit message"
+ commit_msg_is "commit message\n"
'
test_expect_success 'cleanup commit message (default, -m)' '
echo content >>file &&
git add file &&
git commit -m "message #comment " &&
- commit_msg_is "message #comment"
+ commit_msg_is "message #comment\n"
'
test_expect_success 'cleanup commit message (whitespace option, -m)' '
echo content >>file &&
git add file &&
git commit --cleanup=whitespace --no-status -m "message #comment " &&
- commit_msg_is "message #comment"
+ commit_msg_is "message #comment\n"
'
test_expect_success 'cleanup commit message (whitespace config, -m)' '
echo content >>file &&
git add file &&
git -c commit.cleanup=whitespace commit --no-status -m "message #comment " &&
- commit_msg_is "message #comment"
+ commit_msg_is "message #comment\n"
'
test_expect_success 'message shows author when it is not equal to committer' '
diff --git a/t/t7504-commit-msg-hook.sh b/t/t7504-commit-msg-hook.sh
index 1f53ea8..2c03a86 100755
--- a/t/t7504-commit-msg-hook.sh
+++ b/t/t7504-commit-msg-hook.sh
@@ -179,7 +179,12 @@ EOF
chmod +x "$HOOK"
commit_msg_is () {
- test "`git log --pretty=format:%s%b -1`" = "$1"
+ expect=commit_msg_is.expect
+ actual=commit_msg_is.actual
+
+ git log --pretty=format:%B -1 >"$actual" &&
+ printf "%b" "$1" >"$expect" &&
+ test_i18ncmp "$expect" "$actual"
}
test_expect_success 'hook edits commit message' '@@ -187,7 +192,7 @@ test_expect_success 'hook edits commit message' '
echo "additional" >> file &&
git add file &&
git commit -m "additional" &&
- commit_msg_is "new message"
+ commit_msg_is "new message\n"
'
@@ -197,7 +202,7 @@ test_expect_success 'hook edits commit message (editor)' '
git add file &&
echo "additional content" > FAKE_MSG &&
GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit &&
- commit_msg_is "new message"
+ commit_msg_is "new message\n"
'
@@ -206,7 +211,7 @@ test_expect_success "hook doesn't edit commit message" '
echo "plus" >> file &&
git add file &&
git commit --no-verify -m "plus" &&
- commit_msg_is "plus"
+ commit_msg_is "plus\n"
'
@@ -216,7 +221,7 @@ test_expect_success "hook doesn't edit commit message (editor)" '
git add file &&
echo "more plus" > FAKE_MSG &&
GIT_EDITOR="\"\$FAKE_EDITOR\"" git commit --no-verify &&
- commit_msg_is "more plus"
+ commit_msg_is "more plus\n"
'
--
2.4.1