notes.c: Use two newlines (instead of one) when concatenating notes

When using combine_notes_concatenate() to concatenate notes, it currently
ensures exactly one newline character between the given notes. However,
when using builtin/notes.c:create_note() to concatenate notes (e.g. by
'git notes append'), it adds a newline character to the trailing newline
of the preceding notes object, thus resulting in _two_ newlines (aka. a
blank line) separating contents of the two notes.

This patch brings combine_notes_concatenate() into consistency with
builtin/notes.c:create_note(), by ensuring exactly _two_ newline characters
between concatenated notes.

The patch also changes a few notes-related selftests accordingly.

Signed-off-by: Johan Herland <johan@herland.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Johan Herland 2010-11-09 22:49:44 +01:00 committed by Junio C Hamano
parent 32a36b4d6f
commit d4990c4b2f
5 changed files with 15 additions and 3 deletions

View File

@ -812,16 +812,17 @@ int combine_notes_concatenate(unsigned char *cur_sha1,
return 0;
}
/* we will separate the notes by a newline anyway */
/* we will separate the notes by two newlines anyway */
if (cur_msg[cur_len - 1] == '\n')
cur_len--;
/* concatenate cur_msg and new_msg into buf */
buf_len = cur_len + 1 + new_len;
buf_len = cur_len + 2 + new_len;
buf = (char *) xmalloc(buf_len);
memcpy(buf, cur_msg, cur_len);
buf[cur_len] = '\n';
memcpy(buf + cur_len + 1, new_msg, new_len);
buf[cur_len + 1] = '\n';
memcpy(buf + cur_len + 2, new_msg, new_len);
free(cur_msg);
free(new_msg);

View File

@ -955,6 +955,7 @@ Date: Thu Apr 7 15:27:13 2005 -0700
Notes (other):
a fresh note
$whitespace
another fresh note
EOF
@ -976,8 +977,11 @@ Date: Thu Apr 7 15:27:13 2005 -0700
Notes (other):
a fresh note
$whitespace
another fresh note
$whitespace
append 1
$whitespace
append 2
EOF

View File

@ -173,6 +173,7 @@ verify_concatenated_notes () {
while [ $i -gt 0 ]; do
echo " commit #$i" &&
echo " first note for commit #$i" &&
echo " " &&
echo " second note for commit #$i" &&
i=$(($i-1));
done > expect &&

View File

@ -593,6 +593,7 @@ test_expect_success 'rebase -i can copy notes' '
cat >expect <<EOF
an earlier note
a note
EOF

View File

@ -255,13 +255,18 @@ EOF
INPUT_END
whitespace=" "
cat >expect <<EXPECT_END
fourth commit
pre-prefix of note for fourth commit
$whitespace
prefix of note for fourth commit
$whitespace
third note for fourth commit
third commit
prefix of note for third commit
$whitespace
third note for third commit
second commit
third note for second commit