git-notes: fix printing of multi-line notes
authorTor Arne Vestbø <tavestbo@trolltech.com>
Tue, 13 Jan 2009 19:57:16 +0000 (20:57 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 14 Jan 2009 22:54:41 +0000 (14:54 -0800)
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>
notes.c
t/t3301-notes.sh

diff --git a/notes.c b/notes.c
index ad43a2ed15cdc5939850d18346f86924b9ee5f94..bd737842d9eb9da747e613111117f2c8bd0b24ea 100644 (file)
--- a/notes.c
+++ b/notes.c
@@ -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) {
@@ -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);
 }
index ba42c45ec4f3a786a53c059be9dadaff763ad644..9393a25511f46632763c374fec700c3eb446509e 100755 (executable)
@@ -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