t/t7502: compare entire commit message with what was expected
PATCH 1/4 t/t7502: compare entire commit message with what was expected
This test attempts to verify that a commit in "verbatim" mode, when supplied a commit template, produces a commit in which the commit message matches exactly the template that was supplied. But, since the commit operation appends additional instructions for the user as comments in the commit buffer, which would cause the comparison to fail, this test decided to compare only the first three lines (the length of the template) of the resulting commit message to the original template file.
This has two problems.
1. It does not allow the template to be lengthened or shortened without also modifying the number of lines that are considered significant (i.e. the argument to 'head -n').
2. It will not catch a bug in git that causes git to append additional lines to the commit message.
So, let's use the --no-status option to 'git commit' which will cause git to refrain from appending the lines of instructional text to the commit message. This will allow the entire resulting commit message to be compared against the expected value.
--- t/t7502-commit.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
t/t7502-commit.sh +2 -2
@@ -181,8 +181,8 @@ test_expect_success 'cleanup commit messages (verbatim option,-t)' ' echo >>negative && { echo;echo "# text";echo; } >expect && - git commit --cleanup=verbatim -t expect -a && - git cat-file -p HEAD |sed -e "1,/^\$/d" |head -n 3 >actual && + git commit --cleanup=verbatim --no-status -t expect -a && + git cat-file -p HEAD |sed -e "1,/^\$/d" >actual && test_cmp expect actual '
Signature · 1 line
1.8.1.3.638.g372f416.dirty
PATCH 2/4 t7502: demonstrate breakage with a commit message with trailing newlines
This test attempts to verify that a commit message supplied to 'git commit' via the -m switch was used in full as the commit message for a commit when --cleanup=verbatim was used.
But, this test has been broken since it was introduced. Since the commit message containing trailing newlines was supplied to 'git commit' using a command substitution, the trailing newlines were removed by the shell. This means that a string without any trailing newlines was actually supplied to 'git commit'.
The test was able to complete successfully since internally, git appends two newlines to each string supplied via the -m switch. So, the two newlines removed by the shell were then re-added by git, and the resulting commit matched what was expected.
So, let's move the initial creation of the commit message string out from within a previous test so that it stands alone. Assign the desired commit message to a variable using literal newlines. Then populate the expect file from the contents of the commit message variable. This way the shell variable becomes the authoritative source of the commit message and can be supplied via the -m switch with the trailing newlines intact.
Mark this test as failing, since it is not handled correctly by git. As described above, git appends two extra newlines to every string supplied via -m.
--- t/t7502-commit.sh | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-)
t/t7502-commit.sh +11 -3
@@ -177,10 +177,18 @@ test_expect_success 'verbose respects diff config' ' git config --unset color.diff ' +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 +' + test_expect_success 'cleanup commit messages (verbatim option,-t)' ' echo >>negative && - { echo;echo "# text";echo; } >expect && git commit --cleanup=verbatim --no-status -t expect -a && git cat-file -p HEAD |sed -e "1,/^\$/d" >actual && test_cmp expect actual
@@ -196,10 +204,10 @@ test_expect_success 'cleanup commit messages (verbatim option,-F)' ' ' -test_expect_success 'cleanup commit messages (verbatim option,-m)' ' +test_expect_failure 'cleanup commit messages (verbatim option,-m)' ' echo >>negative && - git commit --cleanup=verbatim -m "$(cat expect)" -a && + git commit --cleanup=verbatim -m "$mesg_with_comment_and_newlines" -a && git cat-file -p HEAD |sed -e "1,/^\$/d">actual && test_cmp expect actual
Signature · 1 line
1.8.1.3.638.g372f416.dirty
Re: [PATCH 2/4] t7502: demonstrate breakage with a commit message with trailing newlines
Quoted 3 lines · Brandon Casey
This test attempts to verify that a commit message supplied to 'git commit' via the -m switch was used in full as the commit message for a commit when --cleanup=verbatim was used.
[...]
Quoted 2 lines
The test was able to complete successfully since internally, git appends two newlines to each string supplied via the -m switch.
[...]
Quoted 3 lines
Mark this test as failing, since it is not handled correctly by git. As described above, git appends two extra newlines to every string supplied via -m.
Good catch. This is an old one, triggered by a combination of
v1.5.4-rc0~78^2~23 builtin-commit: resurrect behavior for multiple -m
options, 2007-11-11
and
v1.5.4-rc2~3^2 Allow selection of different cleanup modes for commit
messages, 2007-12-22
The patch makes sense and makes the test easier to read, so
(Patch left unsnipped for reference.)
Quoted 43 lines
Signed-off-by Brandon Casey <[email protected]>--- t/t7502-commit.sh | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-)t/t7502-commit.sh +11
-3@@ -177,10 +177,18 @@ test_expect_success 'verbose respects diff config' ' git config --unset color.diff ' +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 +' + test_expect_success 'cleanup commit messages (verbatim option,-t)' ' echo >>negative && - { echo;echo "# text";echo; } >expect && git commit --cleanup=verbatim --no-status -t expect -a && git cat-file -p HEAD |sed -e "1,/^\$/d" >actual && test_cmp expect actual@@ -196,10 +204,10 @@ test_expect_success 'cleanup commit messages (verbatim option,-F)' ' ' -test_expect_success 'cleanup commit messages (verbatim option,-m)' ' +test_expect_failure 'cleanup commit messages (verbatim option,-m)' ' echo >>negative && - git commit --cleanup=verbatim -m "$(cat expect)" -a && + git commit --cleanup=verbatim -m "$mesg_with_comment_and_newlines" -a && git cat-file -p HEAD |sed -e "1,/^\$/d">actual && test_cmp expect actual
PATCH 3/4 git-commit: only append a newline to -m mesg if necessary
In reply to Brandon CaseyCurrently, git will append two newlines to every message supplied via the -m switch. The purpose of this is to allow -m to be supplied multiple times and have each supplied string become a paragraph in the resulting commit message.
Normally, this does not cause a problem since any trailing newlines will be removed by the cleanup operation. If cleanup=verbatim for example, then the trailing newlines will not be removed and will survive into the resulting commit message.
Instead, let's ensure that the string supplied to -m is newline terminated, but only append a second newline when appending additional messages.
Fixes the test in t7502.
--- builtin/commit.c | 4 +++- t/t7502-commit.sh | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-)
builtin/commit.c +3 -1
@@ -124,8 +124,10 @@ static int opt_parse_m(const struct option *opt, const char *arg, int unset)if (unset)strbuf_setlen (buf,0 );else { +if (buf->len) +strbuf_addch (buf,'\n' );strbuf_addstr (buf, arg); -strbuf_addstr (buf,"\n\n" ); +strbuf_complete_line (buf); }return 0 ; }
t/t7502-commit.sh +1 -1
@@ -204,7 +204,7 @@ test_expect_success 'cleanup commit messages (verbatim option,-F)' ' ' -test_expect_failure 'cleanup commit messages (verbatim option,-m)' ' +test_expect_success 'cleanup commit messages (verbatim option,-m)' ' echo >>negative && git commit --cleanup=verbatim -m "$mesg_with_comment_and_newlines" -a &&
Signature · 1 line
1.8.1.3.638.g372f416.dirty
Re: [PATCH 3/4] git-commit: only append a newline to -m mesg if necessary
Quoted 12 lines · Brandon Casey
Currently, git will append two newlines to every message supplied via the -m switch. The purpose of this is to allow -m to be supplied multiple times and have each supplied string become a paragraph in the resulting commit message.
Normally, this does not cause a problem since any trailing newlines will be removed by the cleanup operation. If cleanup=verbatim for example, then the trailing newlines will not be removed and will survive into the resulting commit message.
Instead, let's ensure that the string supplied to -m is newline terminated, but only append a second newline when appending additional messages.
[...]
builtin/commit.c static int opt_parse_m(const struct option *opt, const char *arg, int unset) · line 130
Quoted 11 lines
builtin/commit.c +3
-1@@ -124,8 +124,10 @@ static int opt_parse_m(const struct option *opt, const char *arg, int unset)if (unset)strbuf_setlen (buf,0 );else { +if (buf->len) +strbuf_addch (buf,'\n' );strbuf_addstr (buf, arg); -strbuf_addstr (buf,"\n\n" ); +strbuf_complete_line (buf);
As long as 'message' always consists of complete lines, this will append 'arg' as a new paragraph, as desired. And no other code path touches 'message', so it always consists of complete lines.
Thanks for a clear patch and explanation.
(rest of patch kept unsnipped for reference)
Quoted 17 lines
builtin/commit.c +0
-0}return 0 ; }t/t7502-commit.sh +1
-1@@ -204,7 +204,7 @@ test_expect_success 'cleanup commit messages (verbatim option,-F)' ' ' -test_expect_failure 'cleanup commit messages (verbatim option,-m)' ' +test_expect_success 'cleanup commit messages (verbatim option,-m)' ' echo >>negative && git commit --cleanup=verbatim -m "$mesg_with_comment_and_newlines" -a &&
PATCH 4/4 Documentation/git-commit.txt: correct a few minor grammatical mistakes
In reply to Brandon Casey--- Documentation/git-commit.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
Documentation/git-commit.txt +3 -3
@@ -174,10 +174,10 @@ OPTIONS --cleanup=<mode>:: This option sets how the commit message is cleaned up. The '<mode>' can be one of 'verbatim', 'whitespace', 'strip', - and 'default'. The 'default' mode will strip leading and + or 'default'. The 'default' mode will strip leading and trailing empty lines and #commentary from the commit message - only if the message is to be edited. Otherwise only whitespace - removed. The 'verbatim' mode does not change message at all, + only if the message is to be edited. Otherwise only whitespace is + removed. The 'verbatim' mode does not change the message at all, 'whitespace' removes just leading/trailing whitespace lines and 'strip' removes both whitespace and commentary. The default can be changed by the 'commit.cleanup' configuration variable
Signature · 1 line
1.8.1.3.638.g372f416.dirty
Re: [PATCH 4/4] Documentation/git-commit.txt: correct a few minor grammatical mistakes
Quoted 6 lines · Brandon Casey
Documentation/git-commit.txt +0
-0@@ -174,10 +174,10 @@ OPTIONS --cleanup=<mode>:: This option sets how the commit message is cleaned up. The '<mode>' can be one of 'verbatim', 'whitespace', 'strip',
Documentation/git-commit.txt OPTIONS · line 183
Quoted 10 lines
Documentation/git-commit.txt +3
-3- and 'default'. The 'default' mode will strip leading and + or 'default'. The 'default' mode will strip leading and trailing empty lines and #commentary from the commit message - only if the message is to be edited. Otherwise only whitespace - removed. The 'verbatim' mode does not change message at all, + only if the message is to be edited. Otherwise only whitespace is + removed. The 'verbatim' mode does not change the message at all, 'whitespace' removes just leading/trailing whitespace lines and 'strip' removes both whitespace and commentary. The default can be changed by the 'commit.cleanup' configuration variable
Yeah, the current text is a bit choppy. How about this?
Documentation/git-commit.txt +19 -10
@@ -172,16 +172,25 @@ OPTIONS linkgit:git-commit-tree[1]. --cleanup=<mode>:: - This option sets how the commit message is cleaned up. - The '<mode>' can be one of 'verbatim', 'whitespace', 'strip', - and 'default'. The 'default' mode will strip leading and - trailing empty lines and #commentary from the commit message - only if the message is to be edited. Otherwise only whitespace - removed. The 'verbatim' mode does not change message at all, - 'whitespace' removes just leading/trailing whitespace lines - and 'strip' removes both whitespace and commentary. The default - can be changed by the 'commit.cleanup' configuration variable - (see linkgit:git-config[1]). + This option determines how the supplied commit message should be + cleaned up before committing. The '<mode>' can be `verbatim`, + `whitespace`, `strip`, or `default`. ++ +-- +default:: + Strip leading and trailing empty lines and #commentary from + the commit message only if the message is to be edited. + Otherwise only remove whitespace. +verbatim:: + Do not change the message at all. +whitespace:: + Remove only leading and trailing whitespace lines. +strip:: + Remove both whitespace and commentary. +-- ++ +The default can be changed using the 'commit.cleanup' configuration +variable (see linkgit:git-config[1]). -e:: --edit::
Re: [PATCH 4/4] Documentation/git-commit.txt: correct a few minor grammatical mistakes
Quoted 12 lines · Jonathan Nieder
Quoted 10 lines · Brandon Casey
Documentation/git-commit.txt +1
-2@@ -174,10 +174,10 @@ OPTIONS --cleanup=<mode>:: This option sets how the commit message is cleaned up. The '<mode>' can be one of 'verbatim', 'whitespace', 'strip', - and 'default'. The 'default' mode will strip leading and + or 'default'. The 'default' mode will strip leading and trailing empty lines and #commentary from the commit message - only if the message is to be edited. Otherwise only whitespace
Quoted 8 lines
Documentation/git-commit.txt OPTIONS · line 183
Quoted 6 lines
Documentation/git-commit.txt +2
-1- removed. The 'verbatim' mode does not change message at all, + only if the message is to be edited. Otherwise only whitespace is + removed. The 'verbatim' mode does not change the message at all, 'whitespace' removes just leading/trailing whitespace lines and 'strip' removes both whitespace and commentary. The default can be changed by the 'commit.cleanup' configuration variableYeah, the current text is a bit choppy. How about this?
Hmm, I think the original text was more confusing than I realized. I think we should reorder the cleanup modes, placing "default" last, and then describe default in terms of either strip or whitespace depending on whether an editor will be spawned.
Quoted 23 lines
Signed-off-by Jonathan Nieder <[email protected]>Documentation/git-commit.txt +5
-10@@ -172,16 +172,25 @@ OPTIONS linkgit:git-commit-tree[1]. --cleanup=<mode>:: - This option sets how the commit message is cleaned up. - The '<mode>' can be one of 'verbatim', 'whitespace', 'strip', - and 'default'. The 'default' mode will strip leading and - trailing empty lines and #commentary from the commit message - only if the message is to be edited. Otherwise only whitespace - removed. The 'verbatim' mode does not change message at all, - 'whitespace' removes just leading/trailing whitespace lines - and 'strip' removes both whitespace and commentary. The default - can be changed by the 'commit.cleanup' configuration variable - (see linkgit:git-config[1]). + This option determines how the supplied commit message should be + cleaned up before committing. The '<mode>' can be `verbatim`, + `whitespace`, `strip`, or `default`. ++ +--
Documentation/git-commit.txt OPTIONS · line 189
Quoted 10 lines
Documentation/git-commit.txt +10
-0+default:: + Strip leading and trailing empty lines and #commentary from + the commit message only if the message is to be edited. + Otherwise only remove whitespace. +verbatim:: + Do not change the message at all. +whitespace:: + Remove only leading and trailing whitespace lines. +strip:: + Remove both whitespace and commentary.
Let's reorder these. Maybe something like this:
+strip::
+ Strip leading and trailing empty lines, trailing whitespace
and #commentary and
+ collapse consecutive blank lines into one.
+whitespace::
+ Same as "strip" except #commentary is not removed.
+verbatim::
+ Do not change the message at all.
+default::
+ "strip" if the message is to be edited. Otherwise "whitespace".
Documentation/git-commit.txt OPTIONS · line 196
Quoted 7 lines
Documentation/git-commit.txt +4
-0+-- ++ +The default can be changed using the 'commit.cleanup' configuration +variable (see linkgit:git-config[1]). -e:: --edit::
-Brandon
Re: [PATCH 4/4] Documentation/git-commit.txt: correct a few minor grammatical mistakes
Quoted 4 lines · Brandon Casey
Hmm, I think the original text was more confusing than I realized. I think we should reorder the cleanup modes, placing "default" last, and then describe default in terms of either strip or whitespace depending on whether an editor will be spawned.
Sounds good to me. :)
Re: [PATCH 4/4] Documentation/git-commit.txt: correct a few minor grammatical mistakes
Quoted 8 lines · Jonathan Nieder
Quoted 4 lines · Brandon Casey
Hmm, I think the original text was more confusing than I realized. I think we should reorder the cleanup modes, placing "default" last, and then describe default in terms of either strip or whitespace depending on whether an editor will be spawned.
Sounds good to me. :)
Will take 1-3 of the series for now, as the above seems to indicate that I'll see a quick reroll of 4/4.
Thanks both for patches and review.
PATCH v2 4/4 Documentation/git-commit.txt: rework the --cleanup section
From: Brandon Casey <[email protected]>
---
Ok, here's the updated text. I am not set up to build the documentation, so I hope someone will test, but looks right to me.
-Brandon
Documentation/git-commit.txt | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-)
Documentation/git-commit.txt +18 -10
@@ -172,16 +172,24 @@ OPTIONS linkgit:git-commit-tree[1]. --cleanup=<mode>:: - This option sets how the commit message is cleaned up. - The '<mode>' can be one of 'verbatim', 'whitespace', 'strip', - and 'default'. The 'default' mode will strip leading and - trailing empty lines and #commentary from the commit message - only if the message is to be edited. Otherwise only whitespace - removed. The 'verbatim' mode does not change message at all, - 'whitespace' removes just leading/trailing whitespace lines - and 'strip' removes both whitespace and commentary. The default - can be changed by the 'commit.cleanup' configuration variable - (see linkgit:git-config[1]). + This option determines how the supplied commit message should be + cleaned up before committing. The '<mode>' can be `strip`, + `whitespace`, `verbatim`, or `default`. ++ +-- +strip:: + Strip leading and trailing empty lines, trailing whitespace, and + #commentary and collapse consecutive empty lines. +whitespace:: + Same as `strip` except #commentary is not removed. +verbatim:: + Do not change the message at all. +default:: + `strip` if the message is to be edited. Otherwise `whitespace`. +-- ++ + The default can be changed by the 'commit.cleanup' configuration + variable (see linkgit:git-config[1]). -e:: --edit::
Signature · 1 line
1.8.1.3.566.gaa39828
PATCH v2 4/4 Documentation/git-commit.txt: rework the --cleanup section
In reply to Junio C HamanoFrom: Brandon Casey <[email protected]>
---
[RESEND] I originally specified Junio's address as [email protected].
Ok, here's the updated text. I am not set up to build the documentation, so I hope someone will test, but looks right to me.
-Brandon
Documentation/git-commit.txt | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-)
Documentation/git-commit.txt +18 -10
@@ -172,16 +172,24 @@ OPTIONS linkgit:git-commit-tree[1]. --cleanup=<mode>:: - This option sets how the commit message is cleaned up. - The '<mode>' can be one of 'verbatim', 'whitespace', 'strip', - and 'default'. The 'default' mode will strip leading and - trailing empty lines and #commentary from the commit message - only if the message is to be edited. Otherwise only whitespace - removed. The 'verbatim' mode does not change message at all, - 'whitespace' removes just leading/trailing whitespace lines - and 'strip' removes both whitespace and commentary. The default - can be changed by the 'commit.cleanup' configuration variable - (see linkgit:git-config[1]). + This option determines how the supplied commit message should be + cleaned up before committing. The '<mode>' can be `strip`, + `whitespace`, `verbatim`, or `default`. ++ +-- +strip:: + Strip leading and trailing empty lines, trailing whitespace, and + #commentary and collapse consecutive empty lines. +whitespace:: + Same as `strip` except #commentary is not removed. +verbatim:: + Do not change the message at all. +default:: + `strip` if the message is to be edited. Otherwise `whitespace`. +-- ++ + The default can be changed by the 'commit.cleanup' configuration + variable (see linkgit:git-config[1]). -e:: --edit::
Signature · 1 line
1.8.1.3.566.gaa39828
PATCH v2 4/4 Documentation/git-commit.txt: rework the --cleanup section
In reply to Junio C HamanoFrom: Brandon Casey <[email protected]>
---
[RESEND] I originally specified Junio's address as [email protected]. [RESEND] Sorry, now with the correct address.
Ok, here's the updated text. I am not set up to build the documentation, so I hope someone will test, but looks right to me.
-Brandon
Documentation/git-commit.txt | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-)
Documentation/git-commit.txt +18 -10
@@ -172,16 +172,24 @@ OPTIONS linkgit:git-commit-tree[1]. --cleanup=<mode>:: - This option sets how the commit message is cleaned up. - The '<mode>' can be one of 'verbatim', 'whitespace', 'strip', - and 'default'. The 'default' mode will strip leading and - trailing empty lines and #commentary from the commit message - only if the message is to be edited. Otherwise only whitespace - removed. The 'verbatim' mode does not change message at all, - 'whitespace' removes just leading/trailing whitespace lines - and 'strip' removes both whitespace and commentary. The default - can be changed by the 'commit.cleanup' configuration variable - (see linkgit:git-config[1]). + This option determines how the supplied commit message should be + cleaned up before committing. The '<mode>' can be `strip`, + `whitespace`, `verbatim`, or `default`. ++ +-- +strip:: + Strip leading and trailing empty lines, trailing whitespace, and + #commentary and collapse consecutive empty lines. +whitespace:: + Same as `strip` except #commentary is not removed. +verbatim:: + Do not change the message at all. +default:: + `strip` if the message is to be edited. Otherwise `whitespace`. +-- ++ + The default can be changed by the 'commit.cleanup' configuration + variable (see linkgit:git-config[1]). -e:: --edit::
Signature · 1 line
1.8.1.3.566.gaa39828
PATCH 1/1 fixup! Documentation/git-commit.txt: rework the --cleanup section
Hi,
Quoted 1 line · Brandon Casey
Signed-off-by Brandon Casey <[email protected]>
This renders as
--cleanup=<mode>
This option determines how the supplied commit message should be cleaned up before committing. The <mode> can be strip, whitespace, verbatim, or default.
strip
Strip leading and trailing empty lines, trailing whitespace, and #commentary and collapse consecutive empty lines.
whitespace
Same as strip except #commentary is not removed.
verbatim
Do not change the message at all.
default
strip if the message is to be edited. Otherwise whitespace.
The default can be changed by the 'commit.cleanup' config variable (see linkgit:git-config[1]).
Problems:
* There's a weird extra blank line after "default"
* Wrong indentation for the final paragraph.
* The linkgit isn't resolved for some reason.
The following fixes it for me.
--- Documentation/git-commit.txt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
Documentation/git-commit.txt +4 -3
@@ -185,11 +185,12 @@ whitespace:: verbatim:: Do not change the message at all. default:: - `strip` if the message is to be edited. Otherwise `whitespace`. + Same as `strip` if the message is to be edited. + Otherwise `whitespace`. -- + - The default can be changed by the 'commit.cleanup' configuration - variable (see linkgit:git-config[1]). +The default can be changed by the 'commit.cleanup' configuration +variable (see linkgit:git-config[1]). -e:: --edit::
Signature · 1 line
1.8.1.3
Re: [PATCH] fixup! Documentation/git-commit.txt: rework the --cleanup section
Quoted 11 lines · Jonathan Nieder
Hi,
Brandon Casey wrote:
Problems:
* There's a weird extra blank line after "default"
* Wrong indentation for the final paragraph.
* The linkgit isn't resolved for some reason.The following fixes it for me.
Thanks Jonathan.
-Brandon
Re: [PATCH v2 4/4] Documentation/git-commit.txt: rework the --cleanup section
In reply to Brandon CaseyQuoted 11 lines · Brandon Casey
From: Brandon Casey <[email protected]>
Signed-off-by Brandon Casey <[email protected]>---
[RESEND] I originally specified Junio's address as [email protected]. [RESEND] Sorry, now with the correct address.
Ok, here's the updated text. I am not set up to build the documentation, so I hope someone will test, but looks right to me.
Thanks for marking this as unverified.
Jonathan, thanks for the fixup.
Quoted 4 lines · Brandon Casey
So, let's use the --no-status option to 'git commit' which will cause git to refrain from appending the lines of instructional text to the commit message. This will allow the entire resulting commit message to be compared against the expected value.
The downside (not a new problem, but a downside nonetheless) is that it means the test doesn't demonstrate what --cleanup=verbatim --status will do.
How about something like this?
t/t7502-commit.sh +25 -3
@@ -180,15 +180,37 @@ test_expect_success 'verbose respects diff config' ' test_expect_success 'cleanup commit messages (verbatim option,-t)' ' echo >>negative && - { echo;echo "# text";echo; } >expect && - git commit --cleanup=verbatim -t expect -a && - git cat-file -p HEAD |sed -e "1,/^\$/d" |head -n 3 >actual && + { + echo && + echo "# text" && + echo + } >template && + { + cat template && + cat <<-\EOF && + + # Please enter the commit message for your changes. Lines starting + # with '\''#'\'' will be kept; you may remove them yourself if you want to. + # An empty message aborts the commit. + # + # Author: A U Thor <[email protected]> + # + EOF + git commit -a --dry-run + } >expect && + git commit --cleanup=verbatim -t template -a && + git cat-file -p HEAD |sed -e "1,/^\$/d" >actual && test_cmp expect actual ' test_expect_success 'cleanup commit messages (verbatim option,-F)' ' + { + echo && + echo "# text" && + echo + } >expect && echo >>negative && git commit --cleanup=verbatim -F expect -a && git cat-file -p HEAD |sed -e "1,/^\$/d">actual &&
Quoted 1 line · Jonathan Nieder
+++
w/t/t7502-commit.sh
[...]
t/t7502-commit.sh test_expect_success 'verbose respects diff config' ' · line 203
Quoted 13 lines
t/t7502-commit.sh +11
-1+ # Please enter the commit message for your changes. Lines starting + # with '\''#'\'' will be kept; you may remove them yourself if you want to. + # An empty message aborts the commit. + # + # Author: A U Thor <[email protected]> + # + EOF + git commit -a --dry-run + } >expect && + git commit --cleanup=verbatim -t template -a && - git cat-file -p HEAD |sed -e "1,/^\$/d" |head -n 3 >actual && + git cat-file -p HEAD |sed -e "1,/^\$/d" >actual && test_cmp expect actual
Quick correction: this would use test_i18ncmp instead of test_cmp if it ends up being a good idea.
Quoted 5 lines · Jonathan Nieder
The downside (not a new problem, but a downside nonetheless) is that it means the test doesn't demonstrate what --cleanup=verbatim --status will do.
How about something like this?
Can't we be a bit more robust by not using a hardcoded block of lines as the "expect" string? You could for example use what you would see in your editor when "git commit" is run without the "-t" option to form the expected pattern, no?
In any case, I think (1) a test for 'verbatim with status' is worth doing, and (2) it would be cleaner to do this as a separate step, perhaps on top of Brandon's 4-patch series.
Quoted 48 lines
Signed-off-by Jonathan Nieder <[email protected]>t/t7502-commit.sh +25
-3@@ -180,15 +180,37 @@ test_expect_success 'verbose respects diff config' ' test_expect_success 'cleanup commit messages (verbatim option,-t)' ' echo >>negative && - { echo;echo "# text";echo; } >expect && - git commit --cleanup=verbatim -t expect -a && - git cat-file -p HEAD |sed -e "1,/^\$/d" |head -n 3 >actual && + { + echo && + echo "# text" && + echo + } >template && + { + cat template && + cat <<-\EOF && + + # Please enter the commit message for your changes. Lines starting + # with '\''#'\'' will be kept; you may remove them yourself if you want to. + # An empty message aborts the commit. + # + # Author: A U Thor <[email protected]> + # + EOF + git commit -a --dry-run + } >expect && + git commit --cleanup=verbatim -t template -a && + git cat-file -p HEAD |sed -e "1,/^\$/d" >actual && test_cmp expect actual ' test_expect_success 'cleanup commit messages (verbatim option,-F)' ' + { + echo && + echo "# text" && + echo + } >expect && echo >>negative && git commit --cleanup=verbatim -F expect -a && git cat-file -p HEAD |sed -e "1,/^\$/d">actual &&