git-commit: populate the edit buffer with 2 blank lines before s-o-b
'commit -s' populates the edit buffer with a blank line before the Signed-off-by line, to allow the user to immediately start typing the log message. But commit 33f2f9ab removed this space, forcing the user to first push the Signed-off-by line down to open a place to type the log message. Fix this regression and let's ensure that the Signed-off-by line is preceded by two blank lines, instead of just one, to hint that something should be filled in, and that a blank line should separate it from the body and the Signed-off-by line. Add a test for this behavior. Reported-by: John Keeping <john@keeping.me.uk> Signed-off-by: Brandon Casey <drafnel@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Brandon Casey committed
Feb 22, 2013 at 14:05 UTC
8c613fd5efa1c3bbd48845ed91c533192e699c08
2 files changed
+37
-2
sequencer.c
+25
-2
@@ -1127,10 +1127,33 @@ void append_signoff(struct strbuf *msgbuf, int ignore_footer, unsigned flag)
1127
const char *append_newlines = NULL;
1128
size_t len = msgbuf->len - ignore_footer;
1129
1130
- if (len && msgbuf->buf[len - 1] != '\n')
1130
+ if (!len) {
1131
+ /*
1132
+ * The buffer is completely empty. Leave foom for
1133
+ * the title and body to be filled in by the user.
1134
+ */
1135
append_newlines = "\n\n";
1132
- else if (len > 1 && msgbuf->buf[len - 2] != '\n')
1136
+ } else if (msgbuf->buf[len - 1] != '\n') {
1137
+ /*
1138
+ * Incomplete line. Complete the line and add a
1139
+ * blank one so that there is an empty line between
1140
+ * the message body and the sob.
1141
+ */
1142
+ append_newlines = "\n\n";
1143
+ } else if (len == 1) {
1144
+ /*
1145
+ * Buffer contains a single newline. Add another
1146
+ * so that we leave room for the title and body.
1147
+ */
1148
+ append_newlines = "\n";
1149
+ } else if (msgbuf->buf[len - 2] != '\n') {
1150
+ /*
1151
+ * Buffer ends with a single newline. Add another
1152
+ * so that there is an empty line between the message
1153
+ * body and the sob.
1154
+ */
1155
append_newlines = "\n";
1156
+ } /* else, the buffer already ends with two newlines. */
1157
1158
if (append_newlines)
1159
strbuf_splice(msgbuf, msgbuf->len - ignore_footer, 0,
t/t7502-commit.sh
+12
@@ -349,6 +349,18 @@ test_expect_success 'A single-liner subject with a token plus colon is not a foo
349
350
'
351
352
+test_expect_success 'commit -s places sob on third line after two empty lines' '
353
+ git commit -s --allow-empty --allow-empty-message &&
354
+ cat <<-EOF >expect &&
355
+
356
+
357
+ Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>
358
+
359
+ EOF
360
+ sed -e "/^#/d" -e "s/^:.*//" .git/COMMIT_EDITMSG >actual &&
361
+ test_cmp expect actual
362
+'
363
+
364
write_script .git/FAKE_EDITOR <<\EOF
365
mv "$1" "$1.orig"
366
(