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
Junio C Hamano <gitster@pobox.com>
Date
Feb 22, 2013, 18:35 UTC
Message-ID
<7vbobcdwo7.fsf@alter.siamese.dyndns.org>
In-Reply-To
<1361525158-3648-1-git-send-email-drafnel@gmail.com>
Brandon Casey <drafnel@gmail.com> writes:
Show 37 quoted lines
> Before commit 33f2f9ab, 'commit -s' would populate the edit buffer with
> a blank line before the Signed-off-by line.  This provided a nice
> hint to the user that something should be filled in.  Let's restore that
> behavior, but now let's ensure that the Signed-off-by line is preceded
> by two blank lines to hint that something should be filled in, and that
> a blank line should separate it from the Signed-off-by line.
>
> Plus, add a test for this behavior.
>
> Reported-by: John Keeping <john@keeping.me.uk>
> Signed-off-by: Brandon Casey <drafnel@gmail.com>
> ---
>
> Ok.  Here's a patch on top of 959a2623 bc/append-signed-off-by.  It
> implements the "2 blank lines preceding sob" behavior.
>
> -Brandon
>
>  sequencer.c       |  5 +++--
>  t/t7502-commit.sh | 12 ++++++++++++
>  2 files changed, 15 insertions(+), 2 deletions(-)
>
> 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.

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.
Previous: Brandon CaseyNext: Brandon Casey
Message 27 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.