summaryrefslogtreecommitdiffabout
authorJohan Herland <johan@herland.net>2010-11-15 17:39:52 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2010-11-16 07:18:37 (UTC)
commitad230267f8ecae6cb4f0da17d7a5f75ba38203e2 (patch) (unidiff)
treeb25cb32e8caf932b031691a5c85b827b847261c5
parent268b34af23cdcac87aed3300bfe6154cbc65753e (diff)
downloadcgit-ad230267f8ecae6cb4f0da17d7a5f75ba38203e2.zip
cgit-ad230267f8ecae6cb4f0da17d7a5f75ba38203e2.tar.gz
cgit-ad230267f8ecae6cb4f0da17d7a5f75ba38203e2.tar.bz2
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>
Diffstat (more/less context) (show 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
@@ -64,13 +64,14 @@ static void info_fn(struct cgit_context *ctx)
64 cgit_clone_info(ctx); 64 cgit_clone_info(ctx);
65} 65}
66 66
67static void log_fn(struct cgit_context *ctx) 67static void log_fn(struct cgit_context *ctx)
68{ 68{
69 cgit_print_log(ctx->qry.sha1, ctx->qry.ofs, ctx->cfg.max_commit_count, 69 cgit_print_log(ctx->qry.sha1, ctx->qry.ofs, ctx->cfg.max_commit_count,
70 ctx->qry.grep, ctx->qry.search, ctx->qry.path, 1); 70 ctx->qry.grep, ctx->qry.search, ctx->qry.path, 1,
71 ctx->repo->enable_commit_graph);
71} 72}
72 73
73static void ls_cache_fn(struct cgit_context *ctx) 74static void ls_cache_fn(struct cgit_context *ctx)
74{ 75{
75 ctx->page.mimetype = "text/plain"; 76 ctx->page.mimetype = "text/plain";
76 ctx->page.filename = "ls-cache.txt"; 77 ctx->page.filename = "ls-cache.txt";
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)
95void print_commit(struct commit *commit, struct rev_info *revs) 95void print_commit(struct commit *commit, struct rev_info *revs)
96{ 96{
97 struct commitinfo *info; 97 struct commitinfo *info;
98 char *tmp; 98 char *tmp;
99 int cols = 2; 99 int cols = 2;
100 struct strbuf graphbuf = STRBUF_INIT; 100 struct strbuf graphbuf = STRBUF_INIT;
101 struct strbuf msgbuf = STRBUF_INIT;
101 102
102 if (ctx.repo->enable_log_filecount) { 103 if (ctx.repo->enable_log_filecount) {
103 cols++; 104 cols++;
104 if (ctx.repo->enable_log_linecount) 105 if (ctx.repo->enable_log_linecount)
105 cols++; 106 cols++;
106 } 107 }
@@ -133,12 +134,37 @@ void print_commit(struct commit *commit, struct rev_info *revs)
133 html(graphbuf.buf); 134 html(graphbuf.buf);
134 html("</td>"); 135 html("</td>");
135 strbuf_setlen(&graphbuf, 0); 136 strbuf_setlen(&graphbuf, 0);
136 } 137 }
137 138
138 htmlf("<td%s>", ctx.qry.showmsg ? " class='logsubject'" : ""); 139 htmlf("<td%s>", ctx.qry.showmsg ? " class='logsubject'" : "");
140 if (ctx.qry.showmsg) {
141 /* line-wrap long commit subjects instead of truncating them */
142 size_t subject_len = strlen(info->subject);
143
144 if (subject_len > ctx.cfg.max_msg_len &&
145 ctx.cfg.max_msg_len >= 15) {
146 /* symbol for signaling line-wrap (in PAGE_ENCODING) */
147 const char wrap_symbol[] = { ' ', 0xE2, 0x86, 0xB5, 0 };
148 int i = ctx.cfg.max_msg_len - strlen(wrap_symbol);
149
150 /* Rewind i to preceding space character */
151 while (i > 0 && !isspace(info->subject[i]))
152 --i;
153 if (!i) /* Oops, zero spaces. Reset i */
154 i = ctx.cfg.max_msg_len - strlen(wrap_symbol);
155
156 /* add remainder starting at i to msgbuf */
157 strbuf_add(&msgbuf, info->subject + i, subject_len - i);
158 strbuf_trim(&msgbuf);
159 strbuf_add(&msgbuf, "\n\n", 2);
160
161 /* Place wrap_symbol at position i in info->subject */
162 strcpy(info->subject + i, wrap_symbol);
163 }
164 }
139 cgit_commit_link(info->subject, NULL, NULL, ctx.qry.head, 165 cgit_commit_link(info->subject, NULL, NULL, ctx.qry.head,
140 sha1_to_hex(commit->object.sha1), ctx.qry.vpath, 0); 166 sha1_to_hex(commit->object.sha1), ctx.qry.vpath, 0);
141 show_commit_decorations(commit); 167 show_commit_decorations(commit);
142 html("</td><td>"); 168 html("</td><td>");
143 html_txt(info->author); 169 html_txt(info->author);
144 if (ctx.repo->enable_log_filecount) { 170 if (ctx.repo->enable_log_filecount) {
@@ -153,13 +179,12 @@ void print_commit(struct commit *commit, struct rev_info *revs)
153 htmlf("-%d/+%d", rem_lines, add_lines); 179 htmlf("-%d/+%d", rem_lines, add_lines);
154 } 180 }
155 } 181 }
156 html("</td></tr>\n"); 182 html("</td></tr>\n");
157 183
158 if (revs->graph || ctx.qry.showmsg) { /* Print a second table row */ 184 if (revs->graph || ctx.qry.showmsg) { /* Print a second table row */
159 struct strbuf msgbuf = STRBUF_INIT;
160 html("<tr class='nohover'><td/>"); /* Empty 'Age' column */ 185 html("<tr class='nohover'><td/>"); /* Empty 'Age' column */
161 186
162 if (ctx.qry.showmsg) { 187 if (ctx.qry.showmsg) {
163 /* Concatenate commit message + notes in msgbuf */ 188 /* Concatenate commit message + notes in msgbuf */
164 if (info->msg && *(info->msg)) { 189 if (info->msg && *(info->msg)) {
165 strbuf_addstr(&msgbuf, info->msg); 190 strbuf_addstr(&msgbuf, info->msg);
@@ -201,15 +226,15 @@ void print_commit(struct commit *commit, struct rev_info *revs)
201 226
202 /* Print msgbuf into remainder of table row */ 227 /* Print msgbuf into remainder of table row */
203 htmlf("<td colspan='%d'%s>\n", cols, 228 htmlf("<td colspan='%d'%s>\n", cols,
204 ctx.qry.showmsg ? " class='logmsg'" : ""); 229 ctx.qry.showmsg ? " class='logmsg'" : "");
205 html_txt(msgbuf.buf); 230 html_txt(msgbuf.buf);
206 html("</td></tr>\n"); 231 html("</td></tr>\n");
207 strbuf_release(&msgbuf);
208 } 232 }
209 233
234 strbuf_release(&msgbuf);
210 strbuf_release(&graphbuf); 235 strbuf_release(&graphbuf);
211 cgit_free_commitinfo(info); 236 cgit_free_commitinfo(info);
212} 237}
213 238
214static const char *disambiguate_ref(const char *ref) 239static const char *disambiguate_ref(const char *ref)
215{ 240{
@@ -243,13 +268,13 @@ static char *next_token(char **src)
243 (*src)++; 268 (*src)++;
244 } 269 }
245 return result; 270 return result;
246} 271}
247 272
248void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern, 273void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern,
249 char *path, int pager) 274 char *path, int pager, int commit_graph)
250{ 275{
251 struct rev_info rev; 276 struct rev_info rev;
252 struct commit *commit; 277 struct commit *commit;
253 struct vector vec = VECTOR_INIT(char *); 278 struct vector vec = VECTOR_INIT(char *);
254 int i, columns = 3; 279 int i, columns = 3;
255 char *arg; 280 char *arg;
@@ -283,13 +308,13 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern
283 break; 308 break;
284 } 309 }
285 vector_push(&vec, &arg, 0); 310 vector_push(&vec, &arg, 0);
286 } 311 }
287 } 312 }
288 } 313 }
289 if (ctx.repo->enable_commit_graph) { 314 if (commit_graph) {
290 static const char *graph_arg = "--graph"; 315 static const char *graph_arg = "--graph";
291 static const char *color_arg = "--color"; 316 static const char *color_arg = "--color";
292 vector_push(&vec, &graph_arg, 0); 317 vector_push(&vec, &graph_arg, 0);
293 vector_push(&vec, &color_arg, 0); 318 vector_push(&vec, &color_arg, 0);
294 graph_set_column_colors(column_colors_html, 319 graph_set_column_colors(column_colors_html,
295 COLUMN_COLORS_HTML_MAX); 320 COLUMN_COLORS_HTML_MAX);
@@ -318,13 +343,13 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern
318 prepare_revision_walk(&rev); 343 prepare_revision_walk(&rev);
319 344
320 if (pager) 345 if (pager)
321 html("<table class='list nowrap'>"); 346 html("<table class='list nowrap'>");
322 347
323 html("<tr class='nohover'><th class='left'>Age</th>"); 348 html("<tr class='nohover'><th class='left'>Age</th>");
324 if (ctx.repo->enable_commit_graph) 349 if (commit_graph)
325 html("<th></th>"); 350 html("<th></th>");
326 html("<th class='left'>Commit message"); 351 html("<th class='left'>Commit message");
327 if (pager) { 352 if (pager) {
328 html(" ("); 353 html(" (");
329 cgit_log_link(ctx.qry.showmsg ? "Collapse" : "Expand", NULL, 354 cgit_log_link(ctx.qry.showmsg ? "Collapse" : "Expand", NULL,
330 NULL, ctx.qry.head, ctx.qry.sha1, 355 NULL, ctx.qry.head, ctx.qry.sha1,
diff --git a/ui-log.h b/ui-log.h
index 6034055..d0cb779 100644
--- a/ui-log.h
+++ b/ui-log.h
@@ -1,8 +1,9 @@
1#ifndef UI_LOG_H 1#ifndef UI_LOG_H
2#define UI_LOG_H 2#define UI_LOG_H
3 3
4extern void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, 4extern void cgit_print_log(const char *tip, int ofs, int cnt, char *grep,
5 char *pattern, char *path, int pager); 5 char *pattern, char *path, int pager,
6 int commit_graph);
6extern void show_commit_decorations(struct commit *commit); 7extern void show_commit_decorations(struct commit *commit);
7 8
8#endif /* UI_LOG_H */ 9#endif /* UI_LOG_H */
diff --git a/ui-summary.c b/ui-summary.c
index b203bcc..5be2545 100644
--- a/ui-summary.c
+++ b/ui-summary.c
@@ -56,13 +56,13 @@ void cgit_print_summary()
56 cgit_print_branches(ctx.cfg.summary_branches); 56 cgit_print_branches(ctx.cfg.summary_branches);
57 html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>"); 57 html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>");
58 cgit_print_tags(ctx.cfg.summary_tags); 58 cgit_print_tags(ctx.cfg.summary_tags);
59 if (ctx.cfg.summary_log > 0) { 59 if (ctx.cfg.summary_log > 0) {
60 html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>"); 60 html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>");
61 cgit_print_log(ctx.qry.head, 0, ctx.cfg.summary_log, NULL, 61 cgit_print_log(ctx.qry.head, 0, ctx.cfg.summary_log, NULL,
62 NULL, NULL, 0); 62 NULL, NULL, 0, 0);
63 } 63 }
64 if (ctx.repo->clone_url) 64 if (ctx.repo->clone_url)
65 print_urls(ctx.repo->clone_url, NULL); 65 print_urls(ctx.repo->clone_url, NULL);
66 else if (ctx.cfg.clone_prefix) 66 else if (ctx.cfg.clone_prefix)
67 print_urls(ctx.cfg.clone_prefix, ctx.repo->url); 67 print_urls(ctx.cfg.clone_prefix, ctx.repo->url);
68 html("</table>"); 68 html("</table>");