git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2 2/2] trailer: support multiline title

From
Christian Couder <christian.couder@gmail.com>
Date
Aug 29, 2015, 04:00 UTC
Message-ID
<CAP8UFD2Vm0ObZXfH_D-AgHS3eOrL-9W6jqcAMqsZLWA4ArL=3g@mail.gmail.com>
In-Reply-To
<xmqqegip3k5y.fsf@gitster.dls.corp.google.com>
On Wed, Aug 26, 2015 at 9:48 PM, Junio C Hamano <gitster@pobox.com> wrote:
Show 17 quoted lines
> Christian Couder <christian.couder@gmail.com> writes:
>
>> 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'
>>
>> In this special case, it is best to look at the first line and if it
>> does not contain only spaces, consider that the second line is not a
>> trailer.
>> ---
>
> Missing sign-off,
Ok, will add it.
[...]
Show 39 quoted lines
> I think the analysis behind the first patch is correct.  It stops
> the backward scan of the main loop to reach there by realizing that
> the first line, which must be the first line of the patch title
> paragraph, can never be a trailer.
>
> To extend that correct realization to cover the case where the title
> paragraph has more than one line, the right thing to do is to scan
> forward from the beginning to find the first paragraph break, which
> must be the end of the title paragraph, and exclude the whole thing,
> wouldn't it?
>
> That is, I am wondering why the patch is not more like this (there
> may be off-by-one, but just to illustrate the approach; I didn't
> even compile test this one so...)?
>
> Puzzled...
>
>  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 trailer */
> +       for (start = 0; start < count; start++)
> +               if (!lines[start]->len)
> +                       break; /* paragraph 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)) {
Yeah, we can do that. It will be clearer.

Thanks, Christian.

Previous: Junio C Hamano
Message 9 of 9 in “trailer: ignore first line of message”
  1. 1/2 trailer: ignore first line of messageChristian Couder, Aug 26, 2015
  2. 2/2 trailer: support multiline titleChristian Couder, Aug 26, 2015
  3. Matthieu MoyAug 26, 2015
  4. Jacob KellerAug 26, 2015
  5. Christian CouderAug 26, 2015
  6. Junio C HamanoAug 26, 2015
  7. Matthieu MoyAug 26, 2015
  8. Junio C HamanoAug 26, 2015
  9. Christian CouderAug 29, 2015

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.