summaryrefslogtreecommitdiffabout
authorJohan Herland <johan@herland.net>2010-11-15 17:39:53 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2010-11-16 07:18:37 (UTC)
commitc2bfd40f8aaaa69a66c6eb729c202e42a43ec166 (patch) (unidiff)
tree7ab4e467a6e39124f7336b5599dfc58c8fbb4b18
parentad230267f8ecae6cb4f0da17d7a5f75ba38203e2 (diff)
downloadcgit-c2bfd40f8aaaa69a66c6eb729c202e42a43ec166.zip
cgit-c2bfd40f8aaaa69a66c6eb729c202e42a43ec166.tar.gz
cgit-c2bfd40f8aaaa69a66c6eb729c202e42a43ec166.tar.bz2
ui-log: Move 'Age' column when commit graph is present
When the commit graph is present, we prefer to draw it along the left edge, and moving the 'Age' column to the right of the 'Author' column, like in gitk. Signed-off-by: Johan Herland <johan@herland.net> Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--ui-log.c42
1 files changed, 30 insertions, 12 deletions
diff --git a/ui-log.c b/ui-log.c
index 05b5c29..8add66a 100644
--- a/ui-log.c
+++ b/ui-log.c
@@ -93,13 +93,13 @@ void show_commit_decorations(struct commit *commit)
93} 93}
94 94
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 = revs->graph ? 3 : 2;
100 struct strbuf graphbuf = STRBUF_INIT; 100 struct strbuf graphbuf = STRBUF_INIT;
101 struct strbuf msgbuf = STRBUF_INIT; 101 struct strbuf msgbuf = STRBUF_INIT;
102 102
103 if (ctx.repo->enable_log_filecount) { 103 if (ctx.repo->enable_log_filecount) {
104 cols++; 104 cols++;
105 if (ctx.repo->enable_log_linecount) 105 if (ctx.repo->enable_log_linecount)
@@ -107,37 +107,39 @@ void print_commit(struct commit *commit, struct rev_info *revs)
107 } 107 }
108 108
109 if (revs->graph) { 109 if (revs->graph) {
110 /* Advance graph until current commit */ 110 /* Advance graph until current commit */
111 while (!graph_next_line(revs->graph, &graphbuf)) { 111 while (!graph_next_line(revs->graph, &graphbuf)) {
112 /* Print graph segment in otherwise empty table row */ 112 /* Print graph segment in otherwise empty table row */
113 html("<tr class='nohover'><td/><td class='commitgraph'>"); 113 html("<tr class='nohover'><td class='commitgraph'>");
114 html(graphbuf.buf); 114 html(graphbuf.buf);
115 htmlf("</td><td colspan='%d' /></tr>\n", cols); 115 htmlf("</td><td colspan='%d' /></tr>\n", cols);
116 strbuf_setlen(&graphbuf, 0); 116 strbuf_setlen(&graphbuf, 0);
117 } 117 }
118 /* Current commit's graph segment is now ready in graphbuf */ 118 /* Current commit's graph segment is now ready in graphbuf */
119 } 119 }
120 120
121 info = cgit_parse_commit(commit); 121 info = cgit_parse_commit(commit);
122 htmlf("<tr%s><td>", 122 htmlf("<tr%s>", ctx.qry.showmsg ? " class='logheader'" : "");
123 ctx.qry.showmsg ? " class='logheader'" : "");
124 tmp = fmt("id=%s", sha1_to_hex(commit->object.sha1));
125 tmp = cgit_fileurl(ctx.repo->url, "commit", ctx.qry.vpath, tmp);
126 html_link_open(tmp, NULL, NULL);
127 cgit_print_age(commit->date, TM_WEEK * 2, FMT_SHORTDATE);
128 html_link_close();
129 html("</td>");
130 123
131 if (revs->graph) { 124 if (revs->graph) {
132 /* Print graph segment for current commit */ 125 /* Print graph segment for current commit */
133 html("<td class='commitgraph'>"); 126 html("<td class='commitgraph'>");
134 html(graphbuf.buf); 127 html(graphbuf.buf);
135 html("</td>"); 128 html("</td>");
136 strbuf_setlen(&graphbuf, 0); 129 strbuf_setlen(&graphbuf, 0);
137 } 130 }
131 else {
132 html("<td>");
133 tmp = fmt("id=%s", sha1_to_hex(commit->object.sha1));
134 tmp = cgit_fileurl(ctx.repo->url, "commit", ctx.qry.vpath, tmp);
135 html_link_open(tmp, NULL, NULL);
136 cgit_print_age(commit->date, TM_WEEK * 2, FMT_SHORTDATE);
137 html_link_close();
138 html("</td>");
139 }
138 140
139 htmlf("<td%s>", ctx.qry.showmsg ? " class='logsubject'" : ""); 141 htmlf("<td%s>", ctx.qry.showmsg ? " class='logsubject'" : "");
140 if (ctx.qry.showmsg) { 142 if (ctx.qry.showmsg) {
141 /* line-wrap long commit subjects instead of truncating them */ 143 /* line-wrap long commit subjects instead of truncating them */
142 size_t subject_len = strlen(info->subject); 144 size_t subject_len = strlen(info->subject);
143 145
@@ -164,12 +166,22 @@ void print_commit(struct commit *commit, struct rev_info *revs)
164 } 166 }
165 cgit_commit_link(info->subject, NULL, NULL, ctx.qry.head, 167 cgit_commit_link(info->subject, NULL, NULL, ctx.qry.head,
166 sha1_to_hex(commit->object.sha1), ctx.qry.vpath, 0); 168 sha1_to_hex(commit->object.sha1), ctx.qry.vpath, 0);
167 show_commit_decorations(commit); 169 show_commit_decorations(commit);
168 html("</td><td>"); 170 html("</td><td>");
169 html_txt(info->author); 171 html_txt(info->author);
172
173 if (revs->graph) {
174 html("</td><td>");
175 tmp = fmt("id=%s", sha1_to_hex(commit->object.sha1));
176 tmp = cgit_fileurl(ctx.repo->url, "commit", ctx.qry.vpath, tmp);
177 html_link_open(tmp, NULL, NULL);
178 cgit_print_age(commit->date, TM_WEEK * 2, FMT_SHORTDATE);
179 html_link_close();
180 }
181
170 if (ctx.repo->enable_log_filecount) { 182 if (ctx.repo->enable_log_filecount) {
171 files = 0; 183 files = 0;
172 add_lines = 0; 184 add_lines = 0;
173 rem_lines = 0; 185 rem_lines = 0;
174 cgit_diff_commit(commit, inspect_files, ctx.qry.vpath); 186 cgit_diff_commit(commit, inspect_files, ctx.qry.vpath);
175 html("</td><td>"); 187 html("</td><td>");
@@ -179,13 +191,13 @@ void print_commit(struct commit *commit, struct rev_info *revs)
179 htmlf("-%d/+%d", rem_lines, add_lines); 191 htmlf("-%d/+%d", rem_lines, add_lines);
180 } 192 }
181 } 193 }
182 html("</td></tr>\n"); 194 html("</td></tr>\n");
183 195
184 if (revs->graph || ctx.qry.showmsg) { /* Print a second table row */ 196 if (revs->graph || ctx.qry.showmsg) { /* Print a second table row */
185 html("<tr class='nohover'><td/>"); /* Empty 'Age' column */ 197 html("<tr class='nohover'>");
186 198
187 if (ctx.qry.showmsg) { 199 if (ctx.qry.showmsg) {
188 /* Concatenate commit message + notes in msgbuf */ 200 /* Concatenate commit message + notes in msgbuf */
189 if (info->msg && *(info->msg)) { 201 if (info->msg && *(info->msg)) {
190 strbuf_addstr(&msgbuf, info->msg); 202 strbuf_addstr(&msgbuf, info->msg);
191 strbuf_addch(&msgbuf, '\n'); 203 strbuf_addch(&msgbuf, '\n');
@@ -220,12 +232,14 @@ void print_commit(struct commit *commit, struct rev_info *revs)
220 graph_next_line(revs->graph, &graphbuf); 232 graph_next_line(revs->graph, &graphbuf);
221 html(graphbuf.buf); 233 html(graphbuf.buf);
222 lines--; 234 lines--;
223 } 235 }
224 html("</td>\n"); 236 html("</td>\n");
225 } 237 }
238 else
239 html("<td/>"); /* Empty 'Age' column */
226 240
227 /* Print msgbuf into remainder of table row */ 241 /* Print msgbuf into remainder of table row */
228 htmlf("<td colspan='%d'%s>\n", cols, 242 htmlf("<td colspan='%d'%s>\n", cols,
229 ctx.qry.showmsg ? " class='logmsg'" : ""); 243 ctx.qry.showmsg ? " class='logmsg'" : "");
230 html_txt(msgbuf.buf); 244 html_txt(msgbuf.buf);
231 html("</td></tr>\n"); 245 html("</td></tr>\n");
@@ -342,25 +356,29 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern
342 compile_grep_patterns(&rev.grep_filter); 356 compile_grep_patterns(&rev.grep_filter);
343 prepare_revision_walk(&rev); 357 prepare_revision_walk(&rev);
344 358
345 if (pager) 359 if (pager)
346 html("<table class='list nowrap'>"); 360 html("<table class='list nowrap'>");
347 361
348 html("<tr class='nohover'><th class='left'>Age</th>"); 362 html("<tr class='nohover'>");
349 if (commit_graph) 363 if (commit_graph)
350 html("<th></th>"); 364 html("<th></th>");
365 else
366 html("<th class='left'>Age</th>");
351 html("<th class='left'>Commit message"); 367 html("<th class='left'>Commit message");
352 if (pager) { 368 if (pager) {
353 html(" ("); 369 html(" (");
354 cgit_log_link(ctx.qry.showmsg ? "Collapse" : "Expand", NULL, 370 cgit_log_link(ctx.qry.showmsg ? "Collapse" : "Expand", NULL,
355 NULL, ctx.qry.head, ctx.qry.sha1, 371 NULL, ctx.qry.head, ctx.qry.sha1,
356 ctx.qry.vpath, ctx.qry.ofs, ctx.qry.grep, 372 ctx.qry.vpath, ctx.qry.ofs, ctx.qry.grep,
357 ctx.qry.search, ctx.qry.showmsg ? 0 : 1); 373 ctx.qry.search, ctx.qry.showmsg ? 0 : 1);
358 html(")"); 374 html(")");
359 } 375 }
360 html("</th><th class='left'>Author</th>"); 376 html("</th><th class='left'>Author</th>");
377 if (commit_graph)
378 html("<th class='left'>Age</th>");
361 if (ctx.repo->enable_log_filecount) { 379 if (ctx.repo->enable_log_filecount) {
362 html("<th class='left'>Files</th>"); 380 html("<th class='left'>Files</th>");
363 columns++; 381 columns++;
364 if (ctx.repo->enable_log_linecount) { 382 if (ctx.repo->enable_log_linecount) {
365 html("<th class='left'>Lines</th>"); 383 html("<th class='left'>Lines</th>");
366 columns++; 384 columns++;