summaryrefslogtreecommitdiffabout
path: root/ui-log.c
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 /ui-log.c
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 (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
@@ -100,2 +100,3 @@ void print_commit(struct commit *commit, struct rev_info *revs)
100 struct strbuf graphbuf = STRBUF_INIT; 100 struct strbuf graphbuf = STRBUF_INIT;
101 struct strbuf msgbuf = STRBUF_INIT;
101 102
@@ -138,2 +139,27 @@ void print_commit(struct commit *commit, struct rev_info *revs)
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,
@@ -158,3 +184,2 @@ void print_commit(struct commit *commit, struct rev_info *revs)
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 */
@@ -206,5 +231,5 @@ void print_commit(struct commit *commit, struct rev_info *revs)
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);
@@ -248,3 +273,3 @@ static char *next_token(char **src)
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{
@@ -288,3 +313,3 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern
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";
@@ -323,3 +348,3 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern
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>");