summaryrefslogtreecommitdiffabout
path: root/ui-log.c
Side-by-side diff
Diffstat (limited to 'ui-log.c') (more/less context) (ignore whitespace changes)
-rw-r--r--ui-log.c35
1 files changed, 30 insertions, 5 deletions
diff --git a/ui-log.c b/ui-log.c
index 5cf66cb..05b5c29 100644
--- a/ui-log.c
+++ b/ui-log.c
@@ -95,12 +95,13 @@ void show_commit_decorations(struct commit *commit)
void print_commit(struct commit *commit, struct rev_info *revs)
{
struct commitinfo *info;
char *tmp;
int cols = 2;
struct strbuf graphbuf = STRBUF_INIT;
+ struct strbuf msgbuf = STRBUF_INIT;
if (ctx.repo->enable_log_filecount) {
cols++;
if (ctx.repo->enable_log_linecount)
cols++;
}
@@ -133,12 +134,37 @@ void print_commit(struct commit *commit, struct rev_info *revs)
html(graphbuf.buf);
html("</td>");
strbuf_setlen(&graphbuf, 0);
}
htmlf("<td%s>", ctx.qry.showmsg ? " class='logsubject'" : "");
+ if (ctx.qry.showmsg) {
+ /* line-wrap long commit subjects instead of truncating them */
+ size_t subject_len = strlen(info->subject);
+
+ if (subject_len > ctx.cfg.max_msg_len &&
+ ctx.cfg.max_msg_len >= 15) {
+ /* symbol for signaling line-wrap (in PAGE_ENCODING) */
+ const char wrap_symbol[] = { ' ', 0xE2, 0x86, 0xB5, 0 };
+ int i = ctx.cfg.max_msg_len - strlen(wrap_symbol);
+
+ /* Rewind i to preceding space character */
+ while (i > 0 && !isspace(info->subject[i]))
+ --i;
+ if (!i) /* Oops, zero spaces. Reset i */
+ i = ctx.cfg.max_msg_len - strlen(wrap_symbol);
+
+ /* add remainder starting at i to msgbuf */
+ strbuf_add(&msgbuf, info->subject + i, subject_len - i);
+ strbuf_trim(&msgbuf);
+ strbuf_add(&msgbuf, "\n\n", 2);
+
+ /* Place wrap_symbol at position i in info->subject */
+ strcpy(info->subject + i, wrap_symbol);
+ }
+ }
cgit_commit_link(info->subject, NULL, NULL, ctx.qry.head,
sha1_to_hex(commit->object.sha1), ctx.qry.vpath, 0);
show_commit_decorations(commit);
html("</td><td>");
html_txt(info->author);
if (ctx.repo->enable_log_filecount) {
@@ -153,13 +179,12 @@ void print_commit(struct commit *commit, struct rev_info *revs)
htmlf("-%d/+%d", rem_lines, add_lines);
}
}
html("</td></tr>\n");
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)) {
strbuf_addstr(&msgbuf, info->msg);
@@ -201,15 +226,15 @@ void print_commit(struct commit *commit, struct rev_info *revs)
/* Print msgbuf into remainder of table row */
htmlf("<td colspan='%d'%s>\n", cols,
ctx.qry.showmsg ? " class='logmsg'" : "");
html_txt(msgbuf.buf);
html("</td></tr>\n");
- strbuf_release(&msgbuf);
}
+ strbuf_release(&msgbuf);
strbuf_release(&graphbuf);
cgit_free_commitinfo(info);
}
static const char *disambiguate_ref(const char *ref)
{
@@ -243,13 +268,13 @@ static char *next_token(char **src)
(*src)++;
}
return result;
}
void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern,
- char *path, int pager)
+ char *path, int pager, int commit_graph)
{
struct rev_info rev;
struct commit *commit;
struct vector vec = VECTOR_INIT(char *);
int i, columns = 3;
char *arg;
@@ -283,13 +308,13 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern
break;
}
vector_push(&vec, &arg, 0);
}
}
}
- if (ctx.repo->enable_commit_graph) {
+ if (commit_graph) {
static const char *graph_arg = "--graph";
static const char *color_arg = "--color";
vector_push(&vec, &graph_arg, 0);
vector_push(&vec, &color_arg, 0);
graph_set_column_colors(column_colors_html,
COLUMN_COLORS_HTML_MAX);
@@ -318,13 +343,13 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern
prepare_revision_walk(&rev);
if (pager)
html("<table class='list nowrap'>");
html("<tr class='nohover'><th class='left'>Age</th>");
- if (ctx.repo->enable_commit_graph)
+ if (commit_graph)
html("<th></th>");
html("<th class='left'>Commit message");
if (pager) {
html(" (");
cgit_log_link(ctx.qry.showmsg ? "Collapse" : "Expand", NULL,
NULL, ctx.qry.head, ctx.qry.sha1,