summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--cmd.c3
-rw-r--r--ui-log.c35
-rw-r--r--ui-log.h3
-rw-r--r--ui-summary.c2
4 files changed, 35 insertions, 8 deletions
diff --git a/cmd.c b/cmd.c
index 6dc9f5e..536515b 100644
--- a/cmd.c
+++ b/cmd.c
@@ -68,5 +68,6 @@ static void log_fn(struct cgit_context *ctx)
{
cgit_print_log(ctx->qry.sha1, ctx->qry.ofs, ctx->cfg.max_commit_count,
- ctx->qry.grep, ctx->qry.search, ctx->qry.path, 1);
+ ctx->qry.grep, ctx->qry.search, ctx->qry.path, 1,
+ ctx->repo->enable_commit_graph);
}
diff --git a/ui-log.c b/ui-log.c
index 5cf66cb..05b5c29 100644
--- a/ui-log.c
+++ b/ui-log.c
@@ -99,4 +99,5 @@ void print_commit(struct commit *commit, struct rev_info *revs)
int cols = 2;
struct strbuf graphbuf = STRBUF_INIT;
+ struct strbuf msgbuf = STRBUF_INIT;
if (ctx.repo->enable_log_filecount) {
@@ -137,4 +138,29 @@ void print_commit(struct commit *commit, struct rev_info *revs)
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);
@@ -157,5 +183,4 @@ void print_commit(struct commit *commit, struct rev_info *revs)
if (revs->graph || ctx.qry.showmsg) { /* Print a second table row */
- struct strbuf msgbuf = STRBUF_INIT;
html("<tr class='nohover'><td/>"); /* Empty 'Age' column */
@@ -205,7 +230,7 @@ void print_commit(struct commit *commit, struct rev_info *revs)
html_txt(msgbuf.buf);
html("</td></tr>\n");
- strbuf_release(&msgbuf);
}
+ strbuf_release(&msgbuf);
strbuf_release(&graphbuf);
cgit_free_commitinfo(info);
@@ -247,5 +272,5 @@ static char *next_token(char **src)
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;
@@ -287,5 +312,5 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern
}
}
- if (ctx.repo->enable_commit_graph) {
+ if (commit_graph) {
static const char *graph_arg = "--graph";
static const char *color_arg = "--color";
@@ -322,5 +347,5 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern
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");
diff --git a/ui-log.h b/ui-log.h
index 6034055..d0cb779 100644
--- a/ui-log.h
+++ b/ui-log.h
@@ -3,5 +3,6 @@
extern void cgit_print_log(const char *tip, int ofs, int cnt, char *grep,
- char *pattern, char *path, int pager);
+ char *pattern, char *path, int pager,
+ int commit_graph);
extern void show_commit_decorations(struct commit *commit);
diff --git a/ui-summary.c b/ui-summary.c
index b203bcc..5be2545 100644
--- a/ui-summary.c
+++ b/ui-summary.c
@@ -60,5 +60,5 @@ void cgit_print_summary()
html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>");
cgit_print_log(ctx.qry.head, 0, ctx.cfg.summary_log, NULL,
- NULL, NULL, 0);
+ NULL, NULL, 0, 0);
}
if (ctx.repo->clone_url)