sequencer.c: require a conforming footer to be preceded by a blank line
authorBrandon Casey <drafnel@gmail.com>
Tue, 12 Feb 2013 10:17:33 +0000 (02:17 -0800)
committerJunio C Hamano <gitster@pobox.com>
Tue, 12 Feb 2013 19:14:33 +0000 (11:14 -0800)
Currently, append_signoff() performs a search for the last line of the
commit buffer by searching back from the end until it hits a newline. If
it reaches the beginning of the buffer without finding a newline, that
means either the commit message was empty, or there was only one line in it.
In this case, append_signoff will skip the call to has_conforming_footer
since it already knows that it is necessary to append a newline before
appending the sob.

Let's perform this function inside of has_conforming_footer where it
appropriately belongs and generalize it so that we require that the
footer paragraph be an actual distinct paragraph separated by a blank
line.

Signed-off-by: Brandon Casey <drafnel@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
sequencer.c
index 7889b6bc19c0a9e5b81203ea5465f21ed6306d51..5a9c43d80626db52ca89b806751b36a826949a69 100644 (file)
@@ -1061,6 +1061,10 @@ static int has_conforming_footer(struct strbuf *sb, int ignore_footer)
                prev = ch;
        }
 
+       /* require at least one blank line */
+       if (prev != '\n' || buf[i] != '\n')
+               return 0;
+
        /* advance to start of last paragraph */
        while (i < len - 1 && buf[i] == '\n')
                i++;
@@ -1089,7 +1093,7 @@ void append_signoff(struct strbuf *msgbuf, int ignore_footer)
        for (i = msgbuf->len - 1 - ignore_footer; i > 0 && msgbuf->buf[i - 1] != '\n'; i--)
                ; /* do nothing */
        if (prefixcmp(msgbuf->buf + i, sob.buf)) {
-               if (!i || !has_conforming_footer(msgbuf, ignore_footer))
+               if (!has_conforming_footer(msgbuf, ignore_footer))
                        strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0, "\n", 1);
                strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0, sob.buf, sob.len);
        }