2007-11-23 01:21:49 +01:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
test_description='git commit porcelain-ish'
|
|
|
|
|
|
|
|
. ./test-lib.sh
|
|
|
|
|
2013-01-10 18:45:59 +01:00
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2010-05-27 17:34:51 +02:00
|
|
|
# Arguments: [<prefix] [<commit message>] [<commit options>]
|
2010-05-27 17:34:50 +02:00
|
|
|
check_summary_oneline() {
|
|
|
|
test_tick &&
|
2010-05-27 17:34:51 +02:00
|
|
|
git commit ${3+"$3"} -m "$2" | head -1 > act &&
|
2010-05-27 17:34:50 +02:00
|
|
|
|
|
|
|
# branch name
|
|
|
|
SUMMARY_PREFIX="$(git name-rev --name-only HEAD)" &&
|
|
|
|
|
|
|
|
# append the "special" prefix, like "root-commit", "detached HEAD"
|
|
|
|
if test -n "$1"
|
|
|
|
then
|
|
|
|
SUMMARY_PREFIX="$SUMMARY_PREFIX ($1)"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# abbrev SHA-1
|
|
|
|
SUMMARY_POSTFIX="$(git log -1 --pretty='format:%h')"
|
|
|
|
echo "[$SUMMARY_PREFIX $SUMMARY_POSTFIX] $2" >exp &&
|
|
|
|
|
2011-04-14 01:17:50 +02:00
|
|
|
test_i18ncmp exp act
|
2010-05-27 17:34:50 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
test_expect_success 'output summary format' '
|
|
|
|
|
|
|
|
echo new >file1 &&
|
|
|
|
git add file1 &&
|
|
|
|
check_summary_oneline "root-commit" "initial" &&
|
|
|
|
|
|
|
|
echo change >>file1 &&
|
2011-02-23 00:41:47 +01:00
|
|
|
git add file1
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'output summary format: root-commit' '
|
2010-05-27 17:34:50 +02:00
|
|
|
check_summary_oneline "" "a change"
|
|
|
|
'
|
|
|
|
|
commit::print_summary(): don't use format_commit_message()
This attempts to fix a regression in git-commit, where non-abbreviated
SHA-1s were printed in the summary.
One possible fix would be to set ctx.abbrev to DEFAULT_ABBREV in the
`if` block, where format_commit_message() is used.
Instead, we do away with the format_commit_message() codeblock
altogether, replacing it with a re-run of log_tree_commit().
We re-run log_tree_commit() with rev.always_show_header set, to force
the invocation of show_log(). The effect of this flag can be seen from
this excerpt from log-tree.c:560, the only area that
rev.always_show_header is checked:
shown = log_tree_diff(opt, commit, &log);
if (!shown && opt->loginfo && opt->always_show_header) {
log.parent = NULL;
show_log(opt);
shown = 1;
}
We also set rev.use_terminator, so that a newline is appended at the end
of the log message. Note that callers in builtin/log.c that also set
rev.always_show_header don't have to set rev.use_terminator, but still
get a newline, because they are wrapped in a pager.
Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-06-12 16:15:39 +02:00
|
|
|
test_expect_success 'output summary format for commit with an empty diff' '
|
2010-05-27 17:34:51 +02:00
|
|
|
|
|
|
|
check_summary_oneline "" "empty" "--allow-empty"
|
|
|
|
'
|
|
|
|
|
commit::print_summary(): don't use format_commit_message()
This attempts to fix a regression in git-commit, where non-abbreviated
SHA-1s were printed in the summary.
One possible fix would be to set ctx.abbrev to DEFAULT_ABBREV in the
`if` block, where format_commit_message() is used.
Instead, we do away with the format_commit_message() codeblock
altogether, replacing it with a re-run of log_tree_commit().
We re-run log_tree_commit() with rev.always_show_header set, to force
the invocation of show_log(). The effect of this flag can be seen from
this excerpt from log-tree.c:560, the only area that
rev.always_show_header is checked:
shown = log_tree_diff(opt, commit, &log);
if (!shown && opt->loginfo && opt->always_show_header) {
log.parent = NULL;
show_log(opt);
shown = 1;
}
We also set rev.use_terminator, so that a newline is appended at the end
of the log message. Note that callers in builtin/log.c that also set
rev.always_show_header don't have to set rev.use_terminator, but still
get a newline, because they are wrapped in a pager.
Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-06-12 16:15:39 +02:00
|
|
|
test_expect_success 'output summary format for merges' '
|
2010-05-27 17:34:51 +02:00
|
|
|
|
|
|
|
git checkout -b recursive-base &&
|
|
|
|
test_commit base file1 &&
|
|
|
|
|
|
|
|
git checkout -b recursive-a recursive-base &&
|
|
|
|
test_commit commit-a file1 &&
|
|
|
|
|
|
|
|
git checkout -b recursive-b recursive-base &&
|
|
|
|
test_commit commit-b file1 &&
|
|
|
|
|
|
|
|
# conflict
|
|
|
|
git checkout recursive-a &&
|
|
|
|
test_must_fail git merge recursive-b &&
|
|
|
|
# resolve the conflict
|
|
|
|
echo commit-a > file1 &&
|
|
|
|
git add file1 &&
|
|
|
|
check_summary_oneline "" "Merge"
|
|
|
|
'
|
|
|
|
|
2010-05-27 17:34:50 +02:00
|
|
|
output_tests_cleanup() {
|
|
|
|
# this is needed for "do not fire editor in the presence of conflicts"
|
|
|
|
git checkout master &&
|
|
|
|
|
|
|
|
# this is needed for the "partial removal" test to pass
|
|
|
|
git rm file1 &&
|
|
|
|
git commit -m "cleanup"
|
|
|
|
}
|
|
|
|
|
2007-11-23 01:21:49 +01:00
|
|
|
test_expect_success 'the basics' '
|
|
|
|
|
2010-05-27 17:34:50 +02:00
|
|
|
output_tests_cleanup &&
|
|
|
|
|
2007-11-23 01:21:49 +01:00
|
|
|
echo doing partial >"commit is" &&
|
|
|
|
mkdir not &&
|
|
|
|
echo very much encouraged but we should >not/forbid &&
|
|
|
|
git add "commit is" not &&
|
|
|
|
echo update added "commit is" file >"commit is" &&
|
|
|
|
echo also update another >not/forbid &&
|
|
|
|
test_tick &&
|
|
|
|
git commit -a -m "initial with -a" &&
|
|
|
|
|
|
|
|
git cat-file blob HEAD:"commit is" >current.1 &&
|
|
|
|
git cat-file blob HEAD:not/forbid >current.2 &&
|
|
|
|
|
|
|
|
cmp current.1 "commit is" &&
|
|
|
|
cmp current.2 not/forbid
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'partial' '
|
|
|
|
|
|
|
|
echo another >"commit is" &&
|
|
|
|
echo another >not/forbid &&
|
|
|
|
test_tick &&
|
|
|
|
git commit -m "partial commit to handle a file" "commit is" &&
|
|
|
|
|
|
|
|
changed=$(git diff-tree --name-only HEAD^ HEAD) &&
|
|
|
|
test "$changed" = "commit is"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2010-05-24 10:51:17 +02:00
|
|
|
test_expect_success 'partial modification in a subdirectory' '
|
2007-11-23 01:21:49 +01:00
|
|
|
|
|
|
|
test_tick &&
|
|
|
|
git commit -m "partial commit to subdirectory" not &&
|
|
|
|
|
|
|
|
changed=$(git diff-tree -r --name-only HEAD^ HEAD) &&
|
|
|
|
test "$changed" = "not/forbid"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'partial removal' '
|
|
|
|
|
|
|
|
git rm not/forbid &&
|
|
|
|
git commit -m "partial commit to remove not/forbid" not &&
|
|
|
|
|
|
|
|
changed=$(git diff-tree -r --name-only HEAD^ HEAD) &&
|
|
|
|
test "$changed" = "not/forbid" &&
|
|
|
|
remain=$(git ls-tree -r --name-only HEAD) &&
|
|
|
|
test "$remain" = "commit is"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'sign off' '
|
|
|
|
|
|
|
|
>positive &&
|
|
|
|
git add positive &&
|
|
|
|
git commit -s -m "thank you" &&
|
|
|
|
actual=$(git cat-file commit HEAD | sed -ne "s/Signed-off-by: //p") &&
|
|
|
|
expected=$(git var GIT_COMMITTER_IDENT | sed -e "s/>.*/>/") &&
|
|
|
|
test "z$actual" = "z$expected"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'multiple -m' '
|
|
|
|
|
|
|
|
>negative &&
|
|
|
|
git add negative &&
|
|
|
|
git commit -m "one" -m "two" -m "three" &&
|
|
|
|
actual=$(git cat-file commit HEAD | sed -e "1,/^\$/d") &&
|
|
|
|
expected=$(echo one; echo; echo two; echo; echo three) &&
|
|
|
|
test "z$actual" = "z$expected"
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'verbose' '
|
|
|
|
|
|
|
|
echo minus >negative &&
|
|
|
|
git add negative &&
|
|
|
|
git status -v | sed -ne "/^diff --git /p" >actual &&
|
|
|
|
echo "diff --git a/negative b/negative" >expect &&
|
2008-03-12 22:36:36 +01:00
|
|
|
test_cmp expect actual
|
2007-11-23 01:21:49 +01:00
|
|
|
|
|
|
|
'
|
|
|
|
|
2008-10-26 05:49:35 +01:00
|
|
|
test_expect_success 'verbose respects diff config' '
|
|
|
|
|
2017-10-03 15:43:47 +02:00
|
|
|
test_config diff.noprefix true &&
|
2008-10-26 05:49:35 +01:00
|
|
|
git status -v >actual &&
|
2017-10-03 15:43:47 +02:00
|
|
|
grep "diff --git negative negative" actual
|
2008-10-26 05:49:35 +01:00
|
|
|
'
|
|
|
|
|
2013-02-19 05:17:05 +01:00
|
|
|
mesg_with_comment_and_newlines='
|
|
|
|
# text
|
|
|
|
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'prepare file with comment line and trailing newlines' '
|
|
|
|
printf "%s" "$mesg_with_comment_and_newlines" >expect
|
|
|
|
'
|
|
|
|
|
2013-01-10 18:45:59 +01:00
|
|
|
test_expect_success 'cleanup commit messages (verbatim option,-t)' '
|
2007-12-22 19:46:24 +01:00
|
|
|
|
|
|
|
echo >>negative &&
|
2013-02-19 05:17:04 +01:00
|
|
|
git commit --cleanup=verbatim --no-status -t expect -a &&
|
|
|
|
git cat-file -p HEAD |sed -e "1,/^\$/d" >actual &&
|
2008-03-12 22:36:36 +01:00
|
|
|
test_cmp expect actual
|
2007-12-22 19:46:24 +01:00
|
|
|
|
|
|
|
'
|
|
|
|
|
2013-01-10 18:45:59 +01:00
|
|
|
test_expect_success 'cleanup commit messages (verbatim option,-F)' '
|
2007-12-22 19:46:24 +01:00
|
|
|
|
|
|
|
echo >>negative &&
|
|
|
|
git commit --cleanup=verbatim -F expect -a &&
|
|
|
|
git cat-file -p HEAD |sed -e "1,/^\$/d">actual &&
|
2008-03-12 22:36:36 +01:00
|
|
|
test_cmp expect actual
|
2007-12-22 19:46:24 +01:00
|
|
|
|
|
|
|
'
|
|
|
|
|
2013-02-19 05:17:06 +01:00
|
|
|
test_expect_success 'cleanup commit messages (verbatim option,-m)' '
|
2007-12-22 19:46:24 +01:00
|
|
|
|
|
|
|
echo >>negative &&
|
2013-02-19 05:17:05 +01:00
|
|
|
git commit --cleanup=verbatim -m "$mesg_with_comment_and_newlines" -a &&
|
2007-12-22 19:46:24 +01:00
|
|
|
git cat-file -p HEAD |sed -e "1,/^\$/d">actual &&
|
2008-03-12 22:36:36 +01:00
|
|
|
test_cmp expect actual
|
2007-12-22 19:46:24 +01:00
|
|
|
|
|
|
|
'
|
|
|
|
|
2013-01-10 18:45:59 +01:00
|
|
|
test_expect_success 'cleanup commit messages (whitespace option,-F)' '
|
2007-12-22 19:46:24 +01:00
|
|
|
|
|
|
|
echo >>negative &&
|
|
|
|
{ echo;echo "# text";echo; } >text &&
|
|
|
|
echo "# text" >expect &&
|
|
|
|
git commit --cleanup=whitespace -F text -a &&
|
|
|
|
git cat-file -p HEAD |sed -e "1,/^\$/d">actual &&
|
2008-03-12 22:36:36 +01:00
|
|
|
test_cmp expect actual
|
2007-12-22 19:46:24 +01:00
|
|
|
|
|
|
|
'
|
|
|
|
|
2014-02-17 13:15:32 +01:00
|
|
|
test_expect_success 'cleanup commit messages (scissors option,-F,-e)' '
|
|
|
|
|
|
|
|
echo >>negative &&
|
|
|
|
cat >text <<EOF &&
|
|
|
|
|
|
|
|
# to be kept
|
commit: cope with scissors lines in commit message
The diff and submodule shortlog appended to the commit message template
by 'git commit --verbose' are not stripped when the commit message
contains an indented scissors line.
When cleaning up a commit message with 'git commit --verbose' or
'--cleanup=scissors' the code is careful and triggers only on a pure
scissors line, i.e. a line containing nothing but a comment character, a
space, and the scissors cut. This is good, because people can embed
scissors lines in the commit message while using 'git commit --verbose',
and the text they write after their indented scissors line doesn't get
deleted.
While doing so, however, the cleanup function only looks at the first
line matching the scissors pattern and if it doesn't start at the
beginning of the line, then the function just returns without performing
any cleanup. This is wrong, because a "real" scissors line added by
'git commit --verbose' might follow, and in that case the diff and
submodule shortlog get included in the commit message.
Fix this by changing the scissors pattern to match only at the beginning
of the line, yet be careful to catch scissors on the first line as well.
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2015-06-09 02:28:34 +02:00
|
|
|
|
|
|
|
# ------------------------ >8 ------------------------
|
|
|
|
# to be kept, too
|
2014-02-17 13:15:32 +01:00
|
|
|
# ------------------------ >8 ------------------------
|
|
|
|
to be removed
|
commit: cope with scissors lines in commit message
The diff and submodule shortlog appended to the commit message template
by 'git commit --verbose' are not stripped when the commit message
contains an indented scissors line.
When cleaning up a commit message with 'git commit --verbose' or
'--cleanup=scissors' the code is careful and triggers only on a pure
scissors line, i.e. a line containing nothing but a comment character, a
space, and the scissors cut. This is good, because people can embed
scissors lines in the commit message while using 'git commit --verbose',
and the text they write after their indented scissors line doesn't get
deleted.
While doing so, however, the cleanup function only looks at the first
line matching the scissors pattern and if it doesn't start at the
beginning of the line, then the function just returns without performing
any cleanup. This is wrong, because a "real" scissors line added by
'git commit --verbose' might follow, and in that case the diff and
submodule shortlog get included in the commit message.
Fix this by changing the scissors pattern to match only at the beginning
of the line, yet be careful to catch scissors on the first line as well.
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2015-06-09 02:28:34 +02:00
|
|
|
# ------------------------ >8 ------------------------
|
|
|
|
to be removed, too
|
|
|
|
EOF
|
|
|
|
|
|
|
|
cat >expect <<EOF &&
|
|
|
|
# to be kept
|
|
|
|
|
|
|
|
# ------------------------ >8 ------------------------
|
|
|
|
# to be kept, too
|
2014-02-17 13:15:32 +01:00
|
|
|
EOF
|
|
|
|
git commit --cleanup=scissors -e -F text -a &&
|
|
|
|
git cat-file -p HEAD |sed -e "1,/^\$/d">actual &&
|
|
|
|
test_cmp expect actual
|
commit: cope with scissors lines in commit message
The diff and submodule shortlog appended to the commit message template
by 'git commit --verbose' are not stripped when the commit message
contains an indented scissors line.
When cleaning up a commit message with 'git commit --verbose' or
'--cleanup=scissors' the code is careful and triggers only on a pure
scissors line, i.e. a line containing nothing but a comment character, a
space, and the scissors cut. This is good, because people can embed
scissors lines in the commit message while using 'git commit --verbose',
and the text they write after their indented scissors line doesn't get
deleted.
While doing so, however, the cleanup function only looks at the first
line matching the scissors pattern and if it doesn't start at the
beginning of the line, then the function just returns without performing
any cleanup. This is wrong, because a "real" scissors line added by
'git commit --verbose' might follow, and in that case the diff and
submodule shortlog get included in the commit message.
Fix this by changing the scissors pattern to match only at the beginning
of the line, yet be careful to catch scissors on the first line as well.
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2015-06-09 02:28:34 +02:00
|
|
|
'
|
2014-02-17 13:15:32 +01:00
|
|
|
|
commit: cope with scissors lines in commit message
The diff and submodule shortlog appended to the commit message template
by 'git commit --verbose' are not stripped when the commit message
contains an indented scissors line.
When cleaning up a commit message with 'git commit --verbose' or
'--cleanup=scissors' the code is careful and triggers only on a pure
scissors line, i.e. a line containing nothing but a comment character, a
space, and the scissors cut. This is good, because people can embed
scissors lines in the commit message while using 'git commit --verbose',
and the text they write after their indented scissors line doesn't get
deleted.
While doing so, however, the cleanup function only looks at the first
line matching the scissors pattern and if it doesn't start at the
beginning of the line, then the function just returns without performing
any cleanup. This is wrong, because a "real" scissors line added by
'git commit --verbose' might follow, and in that case the diff and
submodule shortlog get included in the commit message.
Fix this by changing the scissors pattern to match only at the beginning
of the line, yet be careful to catch scissors on the first line as well.
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2015-06-09 02:28:34 +02:00
|
|
|
test_expect_success 'cleanup commit messages (scissors option,-F,-e, scissors on first line)' '
|
|
|
|
|
|
|
|
echo >>negative &&
|
|
|
|
cat >text <<EOF &&
|
|
|
|
# ------------------------ >8 ------------------------
|
|
|
|
to be removed
|
|
|
|
EOF
|
|
|
|
git commit --cleanup=scissors -e -F text -a --allow-empty-message &&
|
|
|
|
git cat-file -p HEAD |sed -e "1,/^\$/d">actual &&
|
|
|
|
test_must_be_empty actual
|
2014-02-17 13:15:32 +01:00
|
|
|
'
|
|
|
|
|
2013-01-10 18:45:59 +01:00
|
|
|
test_expect_success 'cleanup commit messages (strip option,-F)' '
|
2007-12-22 19:46:24 +01:00
|
|
|
|
|
|
|
echo >>negative &&
|
|
|
|
{ echo;echo "# text";echo sample;echo; } >text &&
|
|
|
|
echo sample >expect &&
|
|
|
|
git commit --cleanup=strip -F text -a &&
|
|
|
|
git cat-file -p HEAD |sed -e "1,/^\$/d">actual &&
|
2008-03-12 22:36:36 +01:00
|
|
|
test_cmp expect actual
|
2007-12-22 19:46:24 +01:00
|
|
|
|
|
|
|
'
|
|
|
|
|
2013-01-10 18:45:59 +01:00
|
|
|
test_expect_success 'cleanup commit messages (strip option,-F,-e)' '
|
2007-12-22 19:46:24 +01:00
|
|
|
|
|
|
|
echo >>negative &&
|
|
|
|
{ echo;echo sample;echo; } >text &&
|
|
|
|
git commit -e -F text -a &&
|
2011-02-23 00:41:48 +01:00
|
|
|
head -n 4 .git/COMMIT_EDITMSG >actual
|
|
|
|
'
|
|
|
|
|
|
|
|
echo "sample
|
2007-12-22 19:46:24 +01:00
|
|
|
|
2011-02-23 00:41:48 +01:00
|
|
|
# Please enter the commit message for your changes. Lines starting
|
|
|
|
# with '#' will be ignored, and an empty message aborts the commit." >expect
|
|
|
|
|
2013-01-10 18:45:59 +01:00
|
|
|
test_expect_success 'cleanup commit messages (strip option,-F,-e): output' '
|
2011-04-14 01:17:50 +02:00
|
|
|
test_i18ncmp expect actual
|
2007-12-22 19:46:24 +01:00
|
|
|
'
|
|
|
|
|
2013-01-10 18:45:59 +01:00
|
|
|
test_expect_success 'cleanup commit message (fail on invalid cleanup mode option)' '
|
|
|
|
test_must_fail git commit --cleanup=non-existent
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'cleanup commit message (fail on invalid cleanup mode configuration)' '
|
|
|
|
test_must_fail git -c commit.cleanup=non-existent commit
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'cleanup commit message (no config and no option uses default)' '
|
|
|
|
echo content >>file &&
|
|
|
|
git add file &&
|
2013-02-23 00:13:00 +01:00
|
|
|
(
|
|
|
|
test_set_editor "$TEST_DIRECTORY"/t7500/add-content-and-comment &&
|
|
|
|
git commit --no-status
|
|
|
|
) &&
|
2013-01-10 18:45:59 +01:00
|
|
|
commit_msg_is "commit message"
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'cleanup commit message (option overrides default)' '
|
|
|
|
echo content >>file &&
|
|
|
|
git add file &&
|
2013-02-23 00:13:00 +01:00
|
|
|
(
|
|
|
|
test_set_editor "$TEST_DIRECTORY"/t7500/add-content-and-comment &&
|
|
|
|
git commit --cleanup=whitespace --no-status
|
|
|
|
) &&
|
2013-01-10 18:45:59 +01:00
|
|
|
commit_msg_is "commit message # comment"
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'cleanup commit message (config overrides default)' '
|
|
|
|
echo content >>file &&
|
|
|
|
git add file &&
|
2013-02-23 00:13:00 +01:00
|
|
|
(
|
|
|
|
test_set_editor "$TEST_DIRECTORY"/t7500/add-content-and-comment &&
|
|
|
|
git -c commit.cleanup=whitespace commit --no-status
|
|
|
|
) &&
|
2013-01-10 18:45:59 +01:00
|
|
|
commit_msg_is "commit message # comment"
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'cleanup commit message (option overrides config)' '
|
|
|
|
echo content >>file &&
|
|
|
|
git add file &&
|
2013-02-23 00:13:00 +01:00
|
|
|
(
|
|
|
|
test_set_editor "$TEST_DIRECTORY"/t7500/add-content-and-comment &&
|
|
|
|
git -c commit.cleanup=whitespace commit --cleanup=default
|
|
|
|
) &&
|
2013-01-10 18:45:59 +01:00
|
|
|
commit_msg_is "commit message"
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'cleanup commit message (default, -m)' '
|
|
|
|
echo content >>file &&
|
|
|
|
git add file &&
|
|
|
|
git commit -m "message #comment " &&
|
|
|
|
commit_msg_is "message #comment"
|
|
|
|
'
|
|
|
|
|
|
|
|
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"
|
|
|
|
'
|
|
|
|
|
|
|
|
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"
|
|
|
|
'
|
|
|
|
|
2012-07-26 22:30:29 +02:00
|
|
|
test_expect_success 'message shows author when it is not equal to committer' '
|
2008-05-04 18:04:50 +02:00
|
|
|
echo >>negative &&
|
t7502: drop confusing test_might_fail call
In t7502.20, we run "git commit" and check that it warns us
that the author and committer identity are not the same
(this is always the case in the test environment, since we
set up the idents differently).
Instead of actually making a commit, we have a clean index,
so the "git commit" we run will fail. This is marked as
might_fail, which is not really correct; it will always fail
since there is nothing to commit.
However, the only reason not to do a complete commit would
be to see the intermediate state of the COMMIT_EDITMSG file
when the commit is not completed. We don't need to care
about this, though; even a complete commit will leave
COMMIT_EDITMSG for us to view. By doing a real commit and
dropping the might_fail, we are more robust against other
unforeseen failures of "git commit" that might influence our
test result.
It might seem less robust to depend on the fact that "git
commit" leaves COMMIT_EDITMSG in place after a successful
commit. However, that brings this test in line with others
parts of the script, which make the same assumption.
Furthermore, if that ever does change, the right solution is
not to prevent commit from completing, but to set EDITOR to
a script that will record the contents we see. After all,
the point of these tests is to check what the user sees in
their EDITOR, so that would be the most direct test. For
now, though, we can continue to use the "shortcut" that
COMMIT_EDITMSG is left intact.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-07-26 22:31:15 +02:00
|
|
|
git commit -e -m "sample" -a &&
|
2012-07-26 22:30:29 +02:00
|
|
|
test_i18ngrep \
|
|
|
|
"^# Author: *A U Thor <author@example.com>\$" \
|
|
|
|
.git/COMMIT_EDITMSG
|
2008-05-04 18:04:50 +02:00
|
|
|
'
|
|
|
|
|
2014-05-02 03:10:01 +02:00
|
|
|
test_expect_success 'message shows date when it is explicitly set' '
|
|
|
|
git commit --allow-empty -e -m foo --date="2010-01-02T03:04:05" &&
|
|
|
|
test_i18ngrep \
|
|
|
|
"^# Date: *Sat Jan 2 03:04:05 2010 +0000" \
|
|
|
|
.git/COMMIT_EDITMSG
|
|
|
|
'
|
|
|
|
|
t7502: handle systems where auto-identity is broken
Test t7502.21 checks whether we write the committer name
into COMMIT_EDITMSG when it has been automatically
determined. However, not all systems can produce valid
automatic identities.
Prior to f20f387 (commit: check committer identity more
strictly), this test worked even when we did not have a
valid automatic identity, since it did not run the strict
test until after we had generated the template. That commit
tightened the check to fail early (since we would fail
later, anyway), meaning that systems without a valid GECOS
name or hostname would fail the test.
We cannot just work around this, because it depends on
configuration outside the control of the test script.
Therefore we introduce a new test_prerequisite to run this
test only on systems where automatic ident works at all.
As a result, we can drop the confusing test_must_fail bit
from the test. The intent was that by giving "git commit"
invalid input (namely, nothing to commit), that it would
stop at a predictable point, whether we had a valid identity
or not, from which we could view the contents of
COMMIT_EDITMSG. Since that assumption no longer holds, and
we can only run the test when we have a valid identity,
there is no reason not to let commit run to completion. That
lets us be more robust to other unforeseen failures.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-07-26 22:32:31 +02:00
|
|
|
test_expect_success AUTOIDENT 'message shows committer when it is automatic' '
|
2008-05-04 18:04:51 +02:00
|
|
|
|
|
|
|
echo >>negative &&
|
2008-06-04 03:08:08 +02:00
|
|
|
(
|
2010-10-03 22:00:14 +02:00
|
|
|
sane_unset GIT_COMMITTER_EMAIL &&
|
|
|
|
sane_unset GIT_COMMITTER_NAME &&
|
t7502: handle systems where auto-identity is broken
Test t7502.21 checks whether we write the committer name
into COMMIT_EDITMSG when it has been automatically
determined. However, not all systems can produce valid
automatic identities.
Prior to f20f387 (commit: check committer identity more
strictly), this test worked even when we did not have a
valid automatic identity, since it did not run the strict
test until after we had generated the template. That commit
tightened the check to fail early (since we would fail
later, anyway), meaning that systems without a valid GECOS
name or hostname would fail the test.
We cannot just work around this, because it depends on
configuration outside the control of the test script.
Therefore we introduce a new test_prerequisite to run this
test only on systems where automatic ident works at all.
As a result, we can drop the confusing test_must_fail bit
from the test. The intent was that by giving "git commit"
invalid input (namely, nothing to commit), that it would
stop at a predictable point, whether we had a valid identity
or not, from which we could view the contents of
COMMIT_EDITMSG. Since that assumption no longer holds, and
we can only run the test when we have a valid identity,
there is no reason not to let commit run to completion. That
lets us be more robust to other unforeseen failures.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-07-26 22:32:31 +02:00
|
|
|
git commit -e -m "sample" -a
|
2008-06-04 03:08:08 +02:00
|
|
|
) &&
|
2012-07-26 22:30:29 +02:00
|
|
|
# the ident is calculated from the system, so we cannot
|
|
|
|
# check the actual value, only that it is there
|
|
|
|
test_i18ngrep "^# Committer: " .git/COMMIT_EDITMSG
|
2008-05-04 18:04:51 +02:00
|
|
|
'
|
|
|
|
|
2012-07-26 22:27:55 +02:00
|
|
|
write_script .git/FAKE_EDITOR <<EOF
|
|
|
|
echo editor started > "$(pwd)/.git/result"
|
2008-02-05 11:01:46 +01:00
|
|
|
exit 0
|
|
|
|
EOF
|
|
|
|
|
2012-11-15 01:33:40 +01:00
|
|
|
test_expect_success !AUTOIDENT 'do not fire editor when committer is bogus' '
|
2015-04-28 14:04:44 +02:00
|
|
|
>.git/result &&
|
2012-07-26 22:32:50 +02:00
|
|
|
|
|
|
|
echo >>negative &&
|
|
|
|
(
|
|
|
|
sane_unset GIT_COMMITTER_EMAIL &&
|
|
|
|
sane_unset GIT_COMMITTER_NAME &&
|
|
|
|
GIT_EDITOR="\"$(pwd)/.git/FAKE_EDITOR\"" &&
|
|
|
|
export GIT_EDITOR &&
|
|
|
|
test_must_fail git commit -e -m sample -a
|
|
|
|
) &&
|
2018-07-27 19:48:11 +02:00
|
|
|
test_must_be_empty .git/result
|
2012-07-26 22:32:50 +02:00
|
|
|
'
|
|
|
|
|
2013-05-25 23:43:34 +02:00
|
|
|
test_expect_success 'do not fire editor if -m <msg> was given' '
|
|
|
|
echo tick >file &&
|
|
|
|
git add file &&
|
|
|
|
echo "editor not started" >.git/result &&
|
|
|
|
(GIT_EDITOR="\"$(pwd)/.git/FAKE_EDITOR\"" git commit -m tick) &&
|
|
|
|
test "$(cat .git/result)" = "editor not started"
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'do not fire editor if -m "" was given' '
|
|
|
|
echo tock >file &&
|
|
|
|
git add file &&
|
|
|
|
echo "editor not started" >.git/result &&
|
|
|
|
(GIT_EDITOR="\"$(pwd)/.git/FAKE_EDITOR\"" \
|
|
|
|
git commit -m "" --allow-empty-message) &&
|
|
|
|
test "$(cat .git/result)" = "editor not started"
|
|
|
|
'
|
|
|
|
|
2008-02-05 11:01:46 +01:00
|
|
|
test_expect_success 'do not fire editor in the presence of conflicts' '
|
|
|
|
|
2008-06-04 03:10:08 +02:00
|
|
|
git clean -f &&
|
|
|
|
echo f >g &&
|
|
|
|
git add g &&
|
|
|
|
git commit -m "add g" &&
|
|
|
|
git branch second &&
|
|
|
|
echo master >g &&
|
|
|
|
echo g >h &&
|
|
|
|
git add g h &&
|
|
|
|
git commit -m "modify g and add h" &&
|
|
|
|
git checkout second &&
|
|
|
|
echo second >g &&
|
|
|
|
git add g &&
|
|
|
|
git commit -m second &&
|
|
|
|
# Must fail due to conflict
|
|
|
|
test_must_fail git cherry-pick -n master &&
|
|
|
|
echo "editor not started" >.git/result &&
|
2008-06-19 19:32:02 +02:00
|
|
|
(
|
2012-07-26 22:28:00 +02:00
|
|
|
GIT_EDITOR="\"$(pwd)/.git/FAKE_EDITOR\"" &&
|
2008-06-19 19:32:02 +02:00
|
|
|
export GIT_EDITOR &&
|
|
|
|
test_must_fail git commit
|
|
|
|
) &&
|
2008-06-04 03:10:08 +02:00
|
|
|
test "$(cat .git/result)" = "editor not started"
|
2008-02-05 11:01:46 +01:00
|
|
|
'
|
|
|
|
|
2012-07-26 22:27:55 +02:00
|
|
|
write_script .git/FAKE_EDITOR <<EOF
|
2008-05-29 16:55:53 +02:00
|
|
|
# kill -TERM command added below.
|
|
|
|
EOF
|
|
|
|
|
2009-03-25 13:21:15 +01:00
|
|
|
test_expect_success EXECKEEPSPID 'a SIGTERM should break locks' '
|
2008-05-29 16:55:53 +02:00
|
|
|
echo >>negative &&
|
2008-07-22 23:21:10 +02:00
|
|
|
! "$SHELL_PATH" -c '\''
|
2008-05-29 16:55:53 +02:00
|
|
|
echo kill -TERM $$ >> .git/FAKE_EDITOR
|
2008-07-22 23:21:10 +02:00
|
|
|
GIT_EDITOR=.git/FAKE_EDITOR
|
|
|
|
export GIT_EDITOR
|
|
|
|
exec git commit -a'\'' &&
|
|
|
|
test ! -f .git/index.lock
|
2008-05-29 16:55:53 +02:00
|
|
|
'
|
|
|
|
|
2008-06-03 07:17:42 +02:00
|
|
|
rm -f .git/MERGE_MSG .git/COMMIT_EDITMSG
|
|
|
|
git reset -q --hard
|
|
|
|
|
|
|
|
test_expect_success 'Hand committing of a redundant merge removes dups' '
|
|
|
|
|
|
|
|
git rev-parse second master >expect &&
|
|
|
|
test_must_fail git merge second master &&
|
|
|
|
git checkout master g &&
|
|
|
|
EDITOR=: git commit -a &&
|
|
|
|
git cat-file commit HEAD | sed -n -e "s/^parent //p" -e "/^$/q" >actual &&
|
|
|
|
test_cmp expect actual
|
|
|
|
|
|
|
|
'
|
|
|
|
|
2009-11-07 08:06:06 +01:00
|
|
|
test_expect_success 'A single-liner subject with a token plus colon is not a footer' '
|
|
|
|
|
|
|
|
git reset --hard &&
|
|
|
|
git commit -s -m "hello: kitty" --allow-empty &&
|
|
|
|
git cat-file commit HEAD | sed -e "1,/^$/d" >actual &&
|
2012-04-11 13:24:01 +02:00
|
|
|
test_line_count = 3 actual
|
2009-11-07 08:06:06 +01:00
|
|
|
|
|
|
|
'
|
|
|
|
|
2013-02-22 23:05:27 +01:00
|
|
|
test_expect_success 'commit -s places sob on third line after two empty lines' '
|
|
|
|
git commit -s --allow-empty --allow-empty-message &&
|
|
|
|
cat <<-EOF >expect &&
|
|
|
|
|
|
|
|
|
|
|
|
Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>
|
|
|
|
|
|
|
|
EOF
|
|
|
|
sed -e "/^#/d" -e "s/^:.*//" .git/COMMIT_EDITMSG >actual &&
|
|
|
|
test_cmp expect actual
|
|
|
|
'
|
|
|
|
|
2012-07-26 22:27:55 +02:00
|
|
|
write_script .git/FAKE_EDITOR <<\EOF
|
|
|
|
mv "$1" "$1.orig"
|
2010-01-13 09:12:54 +01:00
|
|
|
(
|
|
|
|
echo message
|
2012-07-26 22:27:55 +02:00
|
|
|
cat "$1.orig"
|
|
|
|
) >"$1"
|
2010-01-13 09:12:54 +01:00
|
|
|
EOF
|
|
|
|
|
|
|
|
echo '## Custom template' >template
|
|
|
|
|
|
|
|
try_commit () {
|
|
|
|
git reset --hard &&
|
|
|
|
echo >>negative &&
|
|
|
|
GIT_EDITOR=.git/FAKE_EDITOR git commit -a $* $use_template &&
|
|
|
|
case "$use_template" in
|
|
|
|
'')
|
2011-04-14 01:17:50 +02:00
|
|
|
test_i18ngrep ! "^## Custom template" .git/COMMIT_EDITMSG ;;
|
2010-01-13 09:12:54 +01:00
|
|
|
*)
|
2011-04-14 01:17:50 +02:00
|
|
|
test_i18ngrep "^## Custom template" .git/COMMIT_EDITMSG ;;
|
2010-01-13 09:12:54 +01:00
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
|
|
|
try_commit_status_combo () {
|
|
|
|
|
2011-04-14 01:17:50 +02:00
|
|
|
test_expect_success 'commit' '
|
2010-01-13 09:12:54 +01:00
|
|
|
try_commit "" &&
|
2011-04-14 01:17:50 +02:00
|
|
|
test_i18ngrep "^# Changes to be committed:" .git/COMMIT_EDITMSG
|
2010-01-13 09:12:54 +01:00
|
|
|
'
|
|
|
|
|
2011-04-14 01:17:50 +02:00
|
|
|
test_expect_success 'commit --status' '
|
2010-01-13 09:12:54 +01:00
|
|
|
try_commit --status &&
|
2011-04-14 01:17:50 +02:00
|
|
|
test_i18ngrep "^# Changes to be committed:" .git/COMMIT_EDITMSG
|
2010-01-13 09:12:54 +01:00
|
|
|
'
|
|
|
|
|
2011-04-14 01:17:50 +02:00
|
|
|
test_expect_success 'commit --no-status' '
|
2010-10-31 08:30:58 +01:00
|
|
|
try_commit --no-status &&
|
2011-04-14 01:17:50 +02:00
|
|
|
test_i18ngrep ! "^# Changes to be committed:" .git/COMMIT_EDITMSG
|
2010-01-13 09:12:54 +01:00
|
|
|
'
|
|
|
|
|
2011-04-14 01:17:50 +02:00
|
|
|
test_expect_success 'commit with commit.status = yes' '
|
2013-03-24 22:06:14 +01:00
|
|
|
test_config commit.status yes &&
|
2010-01-13 09:12:54 +01:00
|
|
|
try_commit "" &&
|
2011-04-14 01:17:50 +02:00
|
|
|
test_i18ngrep "^# Changes to be committed:" .git/COMMIT_EDITMSG
|
2010-01-13 09:12:54 +01:00
|
|
|
'
|
|
|
|
|
2011-04-14 01:17:50 +02:00
|
|
|
test_expect_success 'commit with commit.status = no' '
|
2013-03-24 22:06:14 +01:00
|
|
|
test_config commit.status no &&
|
2010-01-13 09:12:54 +01:00
|
|
|
try_commit "" &&
|
2011-04-14 01:17:50 +02:00
|
|
|
test_i18ngrep ! "^# Changes to be committed:" .git/COMMIT_EDITMSG
|
2010-01-13 09:12:54 +01:00
|
|
|
'
|
|
|
|
|
2011-04-14 01:17:50 +02:00
|
|
|
test_expect_success 'commit --status with commit.status = yes' '
|
2013-03-24 22:06:14 +01:00
|
|
|
test_config commit.status yes &&
|
2010-01-13 09:12:54 +01:00
|
|
|
try_commit --status &&
|
2011-04-14 01:17:50 +02:00
|
|
|
test_i18ngrep "^# Changes to be committed:" .git/COMMIT_EDITMSG
|
2010-01-13 09:12:54 +01:00
|
|
|
'
|
|
|
|
|
2011-04-14 01:17:50 +02:00
|
|
|
test_expect_success 'commit --no-status with commit.status = yes' '
|
2013-03-24 22:06:14 +01:00
|
|
|
test_config commit.status yes &&
|
2010-01-13 09:12:54 +01:00
|
|
|
try_commit --no-status &&
|
2011-04-14 01:17:50 +02:00
|
|
|
test_i18ngrep ! "^# Changes to be committed:" .git/COMMIT_EDITMSG
|
2010-01-13 09:12:54 +01:00
|
|
|
'
|
|
|
|
|
2011-04-14 01:17:50 +02:00
|
|
|
test_expect_success 'commit --status with commit.status = no' '
|
2013-03-24 22:06:14 +01:00
|
|
|
test_config commit.status no &&
|
2010-01-13 09:12:54 +01:00
|
|
|
try_commit --status &&
|
2011-04-14 01:17:50 +02:00
|
|
|
test_i18ngrep "^# Changes to be committed:" .git/COMMIT_EDITMSG
|
2010-01-13 09:12:54 +01:00
|
|
|
'
|
|
|
|
|
2011-04-14 01:17:50 +02:00
|
|
|
test_expect_success 'commit --no-status with commit.status = no' '
|
2013-03-24 22:06:14 +01:00
|
|
|
test_config commit.status no &&
|
2010-01-13 09:12:54 +01:00
|
|
|
try_commit --no-status &&
|
2011-04-14 01:17:50 +02:00
|
|
|
test_i18ngrep ! "^# Changes to be committed:" .git/COMMIT_EDITMSG
|
2010-01-13 09:12:54 +01:00
|
|
|
'
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
try_commit_status_combo
|
|
|
|
|
|
|
|
use_template="-t template"
|
|
|
|
|
|
|
|
try_commit_status_combo
|
|
|
|
|
2013-01-16 20:18:48 +01:00
|
|
|
test_expect_success 'commit --status with custom comment character' '
|
2013-03-24 22:06:10 +01:00
|
|
|
test_config core.commentchar ";" &&
|
2013-01-16 20:18:48 +01:00
|
|
|
try_commit --status &&
|
|
|
|
test_i18ngrep "^; Changes to be committed:" .git/COMMIT_EDITMSG
|
|
|
|
'
|
|
|
|
|
2014-05-17 03:52:23 +02:00
|
|
|
test_expect_success 'switch core.commentchar' '
|
|
|
|
test_commit "#foo" foo &&
|
|
|
|
GIT_EDITOR=.git/FAKE_EDITOR git -c core.commentChar=auto commit --amend &&
|
|
|
|
test_i18ngrep "^; Changes to be committed:" .git/COMMIT_EDITMSG
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'switch core.commentchar but out of options' '
|
|
|
|
cat >text <<\EOF &&
|
|
|
|
# 1
|
|
|
|
; 2
|
|
|
|
@ 3
|
|
|
|
! 4
|
|
|
|
$ 5
|
|
|
|
% 6
|
|
|
|
^ 7
|
|
|
|
& 8
|
|
|
|
| 9
|
|
|
|
: 10
|
|
|
|
EOF
|
|
|
|
git commit --amend -F text &&
|
|
|
|
(
|
|
|
|
test_set_editor .git/FAKE_EDITOR &&
|
|
|
|
test_must_fail git -c core.commentChar=auto commit --amend
|
|
|
|
)
|
|
|
|
'
|
|
|
|
|
2007-11-23 01:21:49 +01:00
|
|
|
test_done
|