-rw-r--r-- | ui-log.c | 93 |
1 files changed, 77 insertions, 16 deletions
@@ -79,3 +79,3 @@ void show_commit_decorations(struct commit *commit) -void print_commit(struct commit *commit) +void print_commit(struct commit *commit, struct rev_info *revs) { @@ -84,2 +84,21 @@ void print_commit(struct commit *commit) int cols = 2; + struct strbuf graphbuf = STRBUF_INIT; + + if (ctx.repo->enable_log_filecount) { + cols++; + if (ctx.repo->enable_log_linecount) + cols++; + } + + if (revs->graph) { + /* Advance graph until current commit */ + while (!graph_next_line(revs->graph, &graphbuf)) { + /* Print graph segment in otherwise empty table row */ + html("<tr class='nohover'><td/><td class='commitgraph'>"); + html(graphbuf.buf); + htmlf("</td><td colspan='%d' /></tr>\n", cols); + strbuf_setlen(&graphbuf, 0); + } + /* Current commit's graph segment is now ready in graphbuf */ + } @@ -93,4 +112,13 @@ void print_commit(struct commit *commit) html_link_close(); - htmlf("</td><td%s>", - ctx.qry.showmsg ? " class='logsubject'" : ""); + html("</td>"); + + if (revs->graph) { + /* Print graph segment for current commit */ + html("<td class='commitgraph'>"); + html(graphbuf.buf); + html("</td>"); + strbuf_setlen(&graphbuf, 0); + } + + htmlf("<td%s>", ctx.qry.showmsg ? " class='logsubject'" : ""); cgit_commit_link(info->subject, NULL, NULL, ctx.qry.head, @@ -114,5 +142,8 @@ void print_commit(struct commit *commit) - if (ctx.qry.showmsg) { /* Print message + notes in a second table row */ - /* Concatenate commit message and notes in msgbuf */ + if (revs->graph || ctx.qry.showmsg) { /* Print a second table row */ struct strbuf msgbuf = STRBUF_INIT; + html("<tr class='nohover'><td/>"); /* Empty 'Age' column */ + + if (ctx.qry.showmsg) { + /* Concatenate commit message + notes in msgbuf */ if (info->msg && *(info->msg)) { @@ -121,3 +152,4 @@ void print_commit(struct commit *commit) } - format_note(NULL, commit->object.sha1, &msgbuf, PAGE_ENCODING, + format_note(NULL, commit->object.sha1, &msgbuf, + PAGE_ENCODING, NOTES_SHOW_HEADER | NOTES_INDENT); @@ -125,12 +157,34 @@ void print_commit(struct commit *commit) strbuf_ltrim(&msgbuf); + } - if (ctx.repo->enable_log_filecount) { - cols++; - if (ctx.repo->enable_log_linecount) - cols++; + if (revs->graph) { + int lines = 0; + + /* Calculate graph padding */ + if (ctx.qry.showmsg) { + /* Count #lines in commit message + notes */ + const char *p = msgbuf.buf; + lines = 1; + while ((p = strchr(p, '\n'))) { + p++; + lines++; + } + } + + /* Print graph padding */ + html("<td class='commitgraph'>"); + while (lines > 0 || !graph_is_commit_finished(revs->graph)) { + if (graphbuf.len) + html("\n"); + strbuf_setlen(&graphbuf, 0); + graph_next_line(revs->graph, &graphbuf); + html(graphbuf.buf); + lines--; + } + html("</td>\n"); } - /* Create second table row containing msgbuf */ - htmlf("<tr class='nohover'><td/><td colspan='%d' class='logmsg'>", - cols); + /* Print msgbuf into remainder of table row */ + htmlf("<td colspan='%d'%s>\n", cols, + ctx.qry.showmsg ? " class='logmsg'" : ""); html_txt(msgbuf.buf); @@ -140,2 +194,3 @@ void print_commit(struct commit *commit) + strbuf_release(&graphbuf); cgit_free_commitinfo(info); @@ -218,2 +273,6 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern } + if (ctx.repo->enable_commit_graph) { + static const char *graph_arg = "--graph"; + vector_push(&vec, &graph_arg, 0); + } @@ -244,4 +303,6 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern - html("<tr class='nohover'><th class='left'>Age</th>" - "<th class='left'>Commit message"); + html("<tr class='nohover'><th class='left'>Age</th>"); + if (ctx.repo->enable_commit_graph) + html("<th></th>"); + html("<th class='left'>Commit message"); if (pager) { @@ -276,3 +337,3 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern for (i = 0; i < cnt && (commit = get_revision(&rev)) != NULL; i++) { - print_commit(commit); + print_commit(commit, &rev); free(commit->buffer); |