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

Re: [PATCH] git-commit: populate the edit buffer with 2 blank lines before s-o-b

From
Brandon Casey <drafnel@gmail.com>
Date
Feb 22, 2013, 22:03 UTC
Message-ID
<CA+sFfMdok7wRDhgq7i=b3cu3LB+poExvxLBxYkg8L3pN92bEYg@mail.gmail.com>
In-Reply-To
<7vbobcdwo7.fsf@alter.siamese.dyndns.org>
On Fri, Feb 22, 2013 at 10:35 AM, Junio C Hamano <gitster@pobox.com> wrote:
> Brandon Casey <drafnel@gmail.com> writes:
Show 36 quoted lines
>> diff --git a/sequencer.c b/sequencer.c
>> index 53ee49a..2dac106 100644
>> --- a/sequencer.c
>> +++ b/sequencer.c
>> @@ -1127,9 +1127,10 @@ void append_signoff(struct strbuf *msgbuf, int ignore_footer, unsigned flag)
>>               const char *append_newlines = NULL;
>>               size_t len = msgbuf->len - ignore_footer;
>>
>> -             if (len && msgbuf->buf[len - 1] != '\n')
>> +             /* ensure a blank line precedes our signoff */
>> +             if (!len || msgbuf->buf[len - 1] != '\n')
>>                       append_newlines = "\n\n";
>> -             else if (len > 1 && msgbuf->buf[len - 2] != '\n')
>> +             else if (len == 1 || msgbuf->buf[len - 2] != '\n')
>>                       append_newlines = "\n";
>
> Maybe I am getting slower with age, but it took me 5 minutes of
> staring the above to convince me that it is doing the right thing.
>
> The if/elseif cascade is dealing with three separate things and the
> logic is a bit dense:
>
>  * Is the buffer completely empty?  We need to add two LFs to give a
>    room for the title and body;
>
>  * Otherwise:
>
>    - Is the final line incomplete?  We need to add one LF to make it a
>      complete line whatever we do.
>
>    - Is the final line an empty line?  We need to add one more LF to
>      make sure we have a blank line before we add S-o-b.
>
> I wondered if we can rewrite it to make the logic clearer (that is
> where I spent most of the 5 minutes), but I did not think of a
> better way; probably the above is the best we could do.

We could unroll the conditionals into individual blocks and add your comments from above like:

   if (!len) {
      /* The buffer is completely empty.  Leave room for the title and body. */
      append_newlines = "\n\n";
   } else if (msgbuf->buf[len - 1] != '\n') {
      /* Incomplete line.  Complete the line and add a blank one */
      append_newlines = "\n\n";
   } else if (len == 1) {
      /*
       * Buffer contains a single newline.  Add another so that we leave
       * room for the title and body.
       */
      append_newlines = "\n";
   } ...

Not sure that it will reduce the amount of time needed to understand what's going on, but at least it describes the expectations made by each block.

Show 11 quoted lines
> Thanks.
>
> By the way, I think we would want to introduce a symbolic constants
> for the possible return values from has_conforming_footer().  The
> check that appears after this hunk
>
>         if (has_footer != 3 && (!no_dup_sob || has_footer != 2))
>                 strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
>                                 sob.buf, sob.len);
>
> is hard to grok without them.

Yeah, Jonathan said the same thing and I agree. I was hoping someone else would beat me to it.

-Brandon
Previous: Junio C HamanoNext: Brandon Casey
Message 28 of 41 in “unify appending of sob”
  1. 00/12 unify appending of sobBrandon Casey, Feb 12, 2013
  2. 01/12 sequencer.c: rework search for start of footer to improve clarityBrandon Casey, Feb 12, 2013
  3. 02/12 commit, cherry-pick -s: remove broken support for multiline rfc2822 fieldsBrandon Casey, Feb 12, 2013
  4. 03/12 t/test-lib-functions.sh: allow to specify the tag name to test_commitBrandon Casey, Feb 12, 2013
  5. Ævar Arnfjörð BjarmasonMay 13, 2017
  6. 04/12 t/t3511: add some tests of 'cherry-pick -s' functionalityBrandon Casey, Feb 12, 2013
  7. 05/12 sequencer.c: recognize "(cherry picked from ..." as part of s-o-b footerBrandon Casey, Feb 12, 2013
  8. Junio C HamanoFeb 12, 2013
  9. Brandon CaseyFeb 12, 2013
  10. Junio C HamanoFeb 12, 2013
  11. Brandon CaseyFeb 12, 2013
  12. Junio C HamanoFeb 12, 2013
  13. Jonathan NiederFeb 12, 2013
  14. 06/12 sequencer.c: require a conforming footer to be preceded by a blank lineBrandon Casey, Feb 12, 2013
  15. 07/12 sequencer.c: always separate "(cherry picked from" from commit bodyBrandon Casey, Feb 12, 2013
  16. 08/12 sequencer.c: teach append_signoff how to detect duplicate s-o-bBrandon Casey, Feb 12, 2013
  17. 09/12 sequencer.c: teach append_signoff to avoid adding a duplicate newlineBrandon Casey, Feb 12, 2013
  18. 09/12 sequencer.c: teach append_signoff to avoid adding a duplicate newlineBrandon Casey, Feb 12, 2013
  19. John KeepingFeb 14, 2013
  20. Brandon CaseyFeb 15, 2013
  21. John KeepingFeb 17, 2013
  22. Junio C HamanoFeb 21, 2013
  23. Brandon CaseyFeb 21, 2013
  24. Brandon CaseyFeb 21, 2013
  25. Junio C HamanoFeb 21, 2013
  26. git-commit: populate the edit buffer with 2 blank lines before s-o-bBrandon Casey, Feb 22, 2013
  27. Junio C HamanoFeb 22, 2013
  28. Brandon CaseyFeb 22, 2013
  29. git-commit: populate the edit buffer with 2 blank lines before s-o-bBrandon Casey, Feb 22, 2013
  30. Jeff KingFeb 22, 2013
  31. Junio C HamanoFeb 22, 2013
  32. 10/12 t4014: more tests about appending s-o-b linesBrandon Casey, Feb 12, 2013
  33. 11/12 format-patch: update append_signoff prototypeBrandon Casey, Feb 12, 2013
  34. Junio C HamanoFeb 12, 2013
  35. Brandon CaseyFeb 12, 2013
  36. 12/12 Unify appending signoff in format-patch, commit and sequencerBrandon Casey, Feb 12, 2013
  37. 13/12 fixup! t/t3511: add some tests of 'cherry-pick -s' functionalityBrandon Casey, Feb 12, 2013
  38. Jonathan NiederFeb 12, 2013
  39. Junio C HamanoFeb 12, 2013
  40. Jonathan NiederFeb 12, 2013
  41. Junio C HamanoFeb 12, 2013

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.