mirror of
https://github.com/git/git
synced 2024-10-02 14:45:21 +00:00
commit: pass --no-divider to interpret-trailers
When git-commit sees any "--trailer" options, it passes the COMMIT_EDITMSG file through git-interpret-trailers. But it does so without passing --no-divider, which means that interpret-trailers will look for a "---" divider to signal the end of the commit message. That behavior doesn't make any sense in this context; we know we have a complete and solitary commit message, not something we have to further parse. And as a result, we'll do the wrong thing if the commit message contains a "---" marker (which otherwise is not syntactically significant), inserting any new trailers at the wrong spot. We can fix this by passing --no-divider. This is the exact situation for which it was added in1688c9a489
(interpret-trailers: allow suppressing "---" divider, 2018-08-22). As noted in the message for that commit, it just adds the mechanism, and further patches were needed to trigger it from various callers. We did that back then in a few spots, likeffce7f590f
(sequencer: ignore "---" divider when parsing trailers, 2018-08-22), but obviously missed this one. Reported-by: <eric.frederich@siemens.com> Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
fe86abd751
commit
be3d654343
|
@ -1043,7 +1043,8 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
|
|||
struct child_process run_trailer = CHILD_PROCESS_INIT;
|
||||
|
||||
strvec_pushl(&run_trailer.args, "interpret-trailers",
|
||||
"--in-place", git_path_commit_editmsg(), NULL);
|
||||
"--in-place", "--no-divider",
|
||||
git_path_commit_editmsg(), NULL);
|
||||
strvec_pushv(&run_trailer.args, trailer_args.v);
|
||||
run_trailer.git_cmd = 1;
|
||||
if (run_command(&run_trailer))
|
||||
|
|
|
@ -466,6 +466,25 @@ test_expect_success 'commit --trailer with -c and command' '
|
|||
test_cmp expected actual
|
||||
'
|
||||
|
||||
test_expect_success 'commit --trailer not confused by --- separator' '
|
||||
cat >msg <<-\EOF &&
|
||||
subject
|
||||
|
||||
body with dashes
|
||||
---
|
||||
in it
|
||||
EOF
|
||||
git commit --allow-empty --trailer="my-trailer: value" -F msg &&
|
||||
{
|
||||
cat msg &&
|
||||
echo &&
|
||||
echo "my-trailer: value"
|
||||
} >expected &&
|
||||
git cat-file commit HEAD >commit.msg &&
|
||||
sed -e "1,/^\$/d" commit.msg >actual &&
|
||||
test_cmp expected actual
|
||||
'
|
||||
|
||||
test_expect_success 'multiple -m' '
|
||||
|
||||
>negative &&
|
||||
|
|
Loading…
Reference in a new issue