ui-log: Line-wrap long commit subjects when showmsg is enabled
When showmsg is disabled ui-log truncates long commit subjects. This is good. However, the same is not desirable when showmsg is enabled, since you then end up with a truncated commit subject followed by the rest of the commit message below. Instead, when showmsg is enabled (and we're using all this space to display the entire commit message, anyway), line-wrap the commit subject instead of truncating it. Signed-off-by: Johan Herland <johan@herland.net> Signed-off-by: Lars Hjemli <hjemli@gmail.com>
This commit is contained in:
parent
268b34af23
commit
ad230267f8
3
cmd.c
3
cmd.c
@ -67,7 +67,8 @@ static void info_fn(struct cgit_context *ctx)
|
||||
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);
|
||||
}
|
||||
|
||||
static void ls_cache_fn(struct cgit_context *ctx)
|
||||
|
35
ui-log.c
35
ui-log.c
@ -98,6 +98,7 @@ void print_commit(struct commit *commit, struct rev_info *revs)
|
||||
char *tmp;
|
||||
int cols = 2;
|
||||
struct strbuf graphbuf = STRBUF_INIT;
|
||||
struct strbuf msgbuf = STRBUF_INIT;
|
||||
|
||||
if (ctx.repo->enable_log_filecount) {
|
||||
cols++;
|
||||
@ -136,6 +137,31 @@ 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);
|
||||
show_commit_decorations(commit);
|
||||
@ -156,7 +182,6 @@ void print_commit(struct commit *commit, struct rev_info *revs)
|
||||
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) {
|
||||
@ -204,9 +229,9 @@ void print_commit(struct commit *commit, struct rev_info *revs)
|
||||
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);
|
||||
}
|
||||
@ -246,7 +271,7 @@ 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;
|
||||
struct commit *commit;
|
||||
@ -286,7 +311,7 @@ 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";
|
||||
vector_push(&vec, &graph_arg, 0);
|
||||
@ -321,7 +346,7 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern
|
||||
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) {
|
||||
|
3
ui-log.h
3
ui-log.h
@ -2,7 +2,8 @@
|
||||
#define UI_LOG_H
|
||||
|
||||
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);
|
||||
|
||||
#endif /* UI_LOG_H */
|
||||
|
@ -59,7 +59,7 @@ void cgit_print_summary()
|
||||
if (ctx.cfg.summary_log > 0) {
|
||||
html("<tr class='nohover'><td colspan='4'> </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)
|
||||
print_urls(ctx.repo->clone_url, NULL);
|
||||
|
Loading…
Reference in New Issue
Block a user