sequencer.c: teach append_signoff to avoid adding a duplicate newline
authorBrandon Casey <drafnel@gmail.com>
Tue, 12 Feb 2013 10:33:42 +0000 (02:33 -0800)
committerJunio C Hamano <gitster@pobox.com>
Tue, 12 Feb 2013 19:19:34 +0000 (11:19 -0800)
Teach append_signoff to detect whether a blank line exists at the position
that the signed-off-by line will be added, and refrain from adding an
additional one if one already exists. Or, add an additional line if one
is needed to make sure the new footer is separated from the message body
by a blank line.

Signed-off-by: Brandon Casey <bcasey@nvidia.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
sequencer.c
index 965b954baf65dc81e1e219ef3a91234b76ab5c73..53ee49a9b0b02a687e3b56e85d96794d9f1b31ce 100644 (file)
@@ -1123,8 +1123,19 @@ void append_signoff(struct strbuf *msgbuf, int ignore_footer, unsigned flag)
        else
                has_footer = has_conforming_footer(msgbuf, &sob, ignore_footer);
 
-       if (!has_footer)
-               strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0, "\n", 1);
+       if (!has_footer) {
+               const char *append_newlines = NULL;
+               size_t len = msgbuf->len - ignore_footer;
+
+               if (len && msgbuf->buf[len - 1] != '\n')
+                       append_newlines = "\n\n";
+               else if (len > 1 && msgbuf->buf[len - 2] != '\n')
+                       append_newlines = "\n";
+
+               if (append_newlines)
+                       strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
+                               append_newlines, strlen(append_newlines));
+       }
 
        if (has_footer != 3 && (!no_dup_sob || has_footer != 2))
                strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,