From: Junio C Hamano Date: Fri, 06 May 2005 19:37:00 GMT Subject: [PATCH] Tweak git-diff-tree -v output further (take 2). Message-ID: <7vbr7ocfj7.fsf@assigned-by-dhcp.cox.net> (This one is simpler than the previous one I just sent out) The first hunk of this is a pure bugfix---it guards us against a commit message that does not end with a newline. This adds the full header information to git-diff-tree -v output in addition to the log message it already produces. It also stops indenting the log message to match what git-export does. Signed-off-by: Junio C Hamano --- diff-tree.c | 22 ++++++++++++---------- 1 files changed, 12 insertions(+), 10 deletions(-) # - linus-mirror: diff-tree: add "verbose header" mode # + (working tree) --- a/diff-tree.c +++ b/diff-tree.c @@ -278,7 +278,7 @@ static int get_one_line(const char *msg, while (len--) { ret++; - if (*msg++ == '\n') + if (!*msg || *msg++ == '\n') break; } return ret; @@ -287,12 +287,14 @@ static int get_one_line(const char *msg, static char *generate_header(const char *commit, const char *parent, const char *msg, unsigned long len) { static char this_header[1000]; - int offset; - offset = sprintf(this_header, "%s%s (from %s)\n", header_prefix, commit, parent); - if (verbose_header) { + if (!verbose_header) + sprintf(this_header, "%s%s (from %s)\n", header_prefix, + commit, parent); + else { + int offset; int hdr = 1; - + offset = sprintf(this_header, "Id: %s\n", commit); for (;;) { const char *line = msg; int linelen = get_one_line(msg, len); @@ -306,11 +308,11 @@ static char *generate_header(const char len -= linelen; if (linelen == 1) hdr = 0; - if (hdr) - continue; - memset(this_header + offset, ' ', 4); - memcpy(this_header + offset + 4, line, linelen); - offset += linelen + 4; + memcpy(this_header + offset, line, linelen); + if (hdr && !strncmp(line, "parent ", 7) && + !strncmp(line+7, parent, 40)) + this_header[offset + 6] = '*'; + offset += linelen; } this_header[offset++] = '\n'; this_header[offset] = 0;