Skip to content

Commit be3d654

Browse files
peffgitster
authored andcommitted
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 in 1688c9a (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, like ffce7f5 (sequencer: ignore "---" divider when parsing trailers, 2018-08-22), but obviously missed this one. Reported-by: <[email protected]> Signed-off-by: Jeff King <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent fe86abd commit be3d654

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

builtin/commit.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1043,7 +1043,8 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
10431043
struct child_process run_trailer = CHILD_PROCESS_INIT;
10441044

10451045
strvec_pushl(&run_trailer.args, "interpret-trailers",
1046-
"--in-place", git_path_commit_editmsg(), NULL);
1046+
"--in-place", "--no-divider",
1047+
git_path_commit_editmsg(), NULL);
10471048
strvec_pushv(&run_trailer.args, trailer_args.v);
10481049
run_trailer.git_cmd = 1;
10491050
if (run_command(&run_trailer))

t/t7502-commit-porcelain.sh

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,25 @@ test_expect_success 'commit --trailer with -c and command' '
466466
test_cmp expected actual
467467
'
468468

469+
test_expect_success 'commit --trailer not confused by --- separator' '
470+
cat >msg <<-\EOF &&
471+
subject
472+
473+
body with dashes
474+
---
475+
in it
476+
EOF
477+
git commit --allow-empty --trailer="my-trailer: value" -F msg &&
478+
{
479+
cat msg &&
480+
echo &&
481+
echo "my-trailer: value"
482+
} >expected &&
483+
git cat-file commit HEAD >commit.msg &&
484+
sed -e "1,/^\$/d" commit.msg >actual &&
485+
test_cmp expected actual
486+
'
487+
469488
test_expect_success 'multiple -m' '
470489
471490
>negative &&

0 commit comments

Comments
 (0)