diff options
author | Christian Couder <christian.couder@gmail.com> | 2015-08-30 21:14:40 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2015-08-31 11:14:08 -0700 |
commit | 5c99995df8ee3b02224f0e2e86a3d1e4bb2f7348 (patch) | |
tree | 4ef2e1820b7241fe34ce5a8faca5082307d388c9 | |
parent | 6262fe9ca3cd61d27ca5c5599ab46d166e5b23a2 (diff) | |
download | git-5c99995df8ee3b02224f0e2e86a3d1e4bb2f7348.tar.gz |
trailer: support multiline titlecc/trailers-corner-case-fix
We currently ignore the first line passed to `git interpret-trailers`,
when looking for the beginning of the trailers.
Unfortunately this does not work well when a commit is created with a
line break in the title, using for example the following command:
git commit -m 'place of
code: change we made'
That's why instead of ignoring only the first line, it is better to
ignore the first paragraph.
Signed-off-by: Christian Couder <christian.couder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rwxr-xr-x | t/t7513-interpret-trailers.sh | 14 | ||||
-rw-r--r-- | trailer.c | 15 |
2 files changed, 25 insertions, 4 deletions
diff --git a/t/t7513-interpret-trailers.sh b/t/t7513-interpret-trailers.sh index 8f1f55be25..1abec57f6e 100755 --- a/t/t7513-interpret-trailers.sh +++ b/t/t7513-interpret-trailers.sh @@ -112,6 +112,20 @@ test_expect_success 'with only a title in the message' ' test_cmp expected actual ' +test_expect_success 'with multiline title in the message' ' + cat >expected <<-\EOF && + place of + code: change + + Reviewed-by: Peff + Acked-by: Johan + EOF + printf "%s\n" "place of" "code: change" | + git interpret-trailers --trailer "Reviewed-by: Peff" \ + --trailer "Acked-by: Johan" >actual && + test_cmp expected actual +' + test_expect_success 'with config setup' ' git config trailer.ack.key "Acked-by: " && cat >expected <<-\EOF && @@ -743,15 +743,22 @@ static int find_patch_start(struct strbuf **lines, int count) */ static int find_trailer_start(struct strbuf **lines, int count) { - int start, only_spaces = 1; + int start, end_of_title, only_spaces = 1; + + /* The first paragraph is the title and cannot be trailers */ + for (start = 0; start < count; start++) { + if (lines[start]->buf[0] == comment_line_char) + continue; + if (contains_only_spaces(lines[start]->buf)) + break; + } + end_of_title = start; /* * Get the start of the trailers by looking starting from the end * for a line with only spaces before lines with one separator. - * The first line must not be analyzed as the others as it - * should be either the message title or a blank line. */ - for (start = count - 1; start >= 1; start--) { + for (start = count - 1; start >= end_of_title; start--) { if (lines[start]->buf[0] == comment_line_char) continue; if (contains_only_spaces(lines[start]->buf)) { |