Skip to content

Commit

Permalink
git-notes: fix printing of multi-line notes
Browse files Browse the repository at this point in the history
The line length was read from the same position every time,
causing mangled output when printing notes with multiple lines.

Also, adding new-line manually for each line ensures that we
get a new-line between commits, matching git-log for commits
without notes.

Signed-off-by: Tor Arne Vestbø <tavestbo@trolltech.com>
Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Tor Arne Vestbø authored and Junio C Hamano committed Jan 14, 2009
1 parent bb1dff9 commit 22a3d06
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 7 deletions.
13 changes: 7 additions & 6 deletions notes.c
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,8 @@ void get_commit_notes(const struct commit *commit, struct strbuf *sb,
{
static const char *utf8 = "utf-8";
unsigned char *sha1;
char *msg;
unsigned long msgoffset, msglen;
char *msg, *msg_p;
unsigned long linelen, msglen;
enum object_type type;

if (!initialized) {
Expand Down Expand Up @@ -148,12 +148,13 @@ void get_commit_notes(const struct commit *commit, struct strbuf *sb,

strbuf_addstr(sb, "\nNotes:\n");

for (msgoffset = 0; msgoffset < msglen;) {
int linelen = strchrnul(msg, '\n') - msg;
for (msg_p = msg; msg_p < msg + msglen; msg_p += linelen + 1) {
linelen = strchrnul(msg_p, '\n') - msg_p;

strbuf_addstr(sb, " ");
strbuf_add(sb, msg + msgoffset, linelen);
msgoffset += linelen;
strbuf_add(sb, msg_p, linelen);
strbuf_addch(sb, '\n');
}

free(msg);
}
32 changes: 31 additions & 1 deletion t/t3301-notes.sh
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,37 @@ EOF
test_expect_success 'show notes' '
! (git cat-file commit HEAD | grep b1) &&
git log -1 > output &&
git diff expect output
test_cmp expect output
'
test_expect_success 'create multi-line notes (setup)' '
: > a3 &&
git add a3 &&
test_tick &&
git commit -m 3rd &&
MSG="b3
c3c3c3c3
d3d3d3" git notes edit
'

cat > expect-multiline << EOF
commit 1584215f1d29c65e99c6c6848626553fdd07fd75
Author: A U Thor <author@example.com>
Date: Thu Apr 7 15:15:13 2005 -0700
3rd
Notes:
b3
c3c3c3c3
d3d3d3
EOF

printf "\n" >> expect-multiline
cat expect >> expect-multiline

test_expect_success 'show multi-line notes' '
git log -2 > output &&
test_cmp expect-multiline output
'

test_done

0 comments on commit 22a3d06

Please sign in to comment.