summaryrefslogtreecommitdiffabout
path: root/ui-log.c
Unidiff
Diffstat (limited to 'ui-log.c') (more/less context) (ignore whitespace changes)
-rw-r--r--ui-log.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/ui-log.c b/ui-log.c
index 0d86fd5..5cf66cb 100644
--- a/ui-log.c
+++ b/ui-log.c
@@ -1,47 +1,62 @@
1/* ui-log.c: functions for log output 1/* ui-log.c: functions for log output
2 * 2 *
3 * Copyright (C) 2006 Lars Hjemli 3 * Copyright (C) 2006 Lars Hjemli
4 * 4 *
5 * Licensed under GNU General Public License v2 5 * Licensed under GNU General Public License v2
6 * (see COPYING for full license text) 6 * (see COPYING for full license text)
7 */ 7 */
8 8
9#include "cgit.h" 9#include "cgit.h"
10#include "html.h" 10#include "html.h"
11#include "ui-shared.h" 11#include "ui-shared.h"
12#include "vector.h" 12#include "vector.h"
13 13
14int files, add_lines, rem_lines; 14int files, add_lines, rem_lines;
15 15
16/*
17 * The list of available column colors in the commit graph.
18 */
19static const char *column_colors_html[] = {
20 "<span class='column1'>",
21 "<span class='column2'>",
22 "<span class='column3'>",
23 "<span class='column4'>",
24 "<span class='column5'>",
25 "<span class='column6'>",
26 "</span>",
27};
28
29#define COLUMN_COLORS_HTML_MAX (ARRAY_SIZE(column_colors_html) - 1)
30
16void count_lines(char *line, int size) 31void count_lines(char *line, int size)
17{ 32{
18 if (size <= 0) 33 if (size <= 0)
19 return; 34 return;
20 35
21 if (line[0] == '+') 36 if (line[0] == '+')
22 add_lines++; 37 add_lines++;
23 38
24 else if (line[0] == '-') 39 else if (line[0] == '-')
25 rem_lines++; 40 rem_lines++;
26} 41}
27 42
28void inspect_files(struct diff_filepair *pair) 43void inspect_files(struct diff_filepair *pair)
29{ 44{
30 unsigned long old_size = 0; 45 unsigned long old_size = 0;
31 unsigned long new_size = 0; 46 unsigned long new_size = 0;
32 int binary = 0; 47 int binary = 0;
33 48
34 files++; 49 files++;
35 if (ctx.repo->enable_log_linecount) 50 if (ctx.repo->enable_log_linecount)
36 cgit_diff_files(pair->one->sha1, pair->two->sha1, &old_size, 51 cgit_diff_files(pair->one->sha1, pair->two->sha1, &old_size,
37 &new_size, &binary, 0, ctx.qry.ignorews, 52 &new_size, &binary, 0, ctx.qry.ignorews,
38 count_lines); 53 count_lines);
39} 54}
40 55
41void show_commit_decorations(struct commit *commit) 56void show_commit_decorations(struct commit *commit)
42{ 57{
43 struct name_decoration *deco; 58 struct name_decoration *deco;
44 static char buf[1024]; 59 static char buf[1024];
45 60
46 buf[sizeof(buf) - 1] = 0; 61 buf[sizeof(buf) - 1] = 0;
47 deco = lookup_decoration(&name_decoration, &commit->object); 62 deco = lookup_decoration(&name_decoration, &commit->object);
@@ -244,65 +259,69 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern
244 259
245 if (!tip) 260 if (!tip)
246 tip = ctx.qry.head; 261 tip = ctx.qry.head;
247 tip = disambiguate_ref(tip); 262 tip = disambiguate_ref(tip);
248 vector_push(&vec, &tip, 0); 263 vector_push(&vec, &tip, 0);
249 264
250 if (grep && pattern && *pattern) { 265 if (grep && pattern && *pattern) {
251 pattern = xstrdup(pattern); 266 pattern = xstrdup(pattern);
252 if (!strcmp(grep, "grep") || !strcmp(grep, "author") || 267 if (!strcmp(grep, "grep") || !strcmp(grep, "author") ||
253 !strcmp(grep, "committer")) { 268 !strcmp(grep, "committer")) {
254 arg = fmt("--%s=%s", grep, pattern); 269 arg = fmt("--%s=%s", grep, pattern);
255 vector_push(&vec, &arg, 0); 270 vector_push(&vec, &arg, 0);
256 } 271 }
257 if (!strcmp(grep, "range")) { 272 if (!strcmp(grep, "range")) {
258 /* Split the pattern at whitespace and add each token 273 /* Split the pattern at whitespace and add each token
259 * as a revision expression. Do not accept other 274 * as a revision expression. Do not accept other
260 * rev-list options. Also, replace the previously 275 * rev-list options. Also, replace the previously
261 * pushed tip (it's no longer relevant). 276 * pushed tip (it's no longer relevant).
262 */ 277 */
263 vec.count--; 278 vec.count--;
264 while ((arg = next_token(&pattern))) { 279 while ((arg = next_token(&pattern))) {
265 if (*arg == '-') { 280 if (*arg == '-') {
266 fprintf(stderr, "Bad range expr: %s\n", 281 fprintf(stderr, "Bad range expr: %s\n",
267 arg); 282 arg);
268 break; 283 break;
269 } 284 }
270 vector_push(&vec, &arg, 0); 285 vector_push(&vec, &arg, 0);
271 } 286 }
272 } 287 }
273 } 288 }
274 if (ctx.repo->enable_commit_graph) { 289 if (ctx.repo->enable_commit_graph) {
275 static const char *graph_arg = "--graph"; 290 static const char *graph_arg = "--graph";
291 static const char *color_arg = "--color";
276 vector_push(&vec, &graph_arg, 0); 292 vector_push(&vec, &graph_arg, 0);
293 vector_push(&vec, &color_arg, 0);
294 graph_set_column_colors(column_colors_html,
295 COLUMN_COLORS_HTML_MAX);
277 } 296 }
278 297
279 if (path) { 298 if (path) {
280 arg = "--"; 299 arg = "--";
281 vector_push(&vec, &arg, 0); 300 vector_push(&vec, &arg, 0);
282 vector_push(&vec, &path, 0); 301 vector_push(&vec, &path, 0);
283 } 302 }
284 303
285 /* Make sure the vector is NULL-terminated */ 304 /* Make sure the vector is NULL-terminated */
286 vector_push(&vec, NULL, 0); 305 vector_push(&vec, NULL, 0);
287 vec.count--; 306 vec.count--;
288 307
289 init_revisions(&rev, NULL); 308 init_revisions(&rev, NULL);
290 rev.abbrev = DEFAULT_ABBREV; 309 rev.abbrev = DEFAULT_ABBREV;
291 rev.commit_format = CMIT_FMT_DEFAULT; 310 rev.commit_format = CMIT_FMT_DEFAULT;
292 rev.verbose_header = 1; 311 rev.verbose_header = 1;
293 rev.show_root_diff = 0; 312 rev.show_root_diff = 0;
294 setup_revisions(vec.count, vec.data, &rev, NULL); 313 setup_revisions(vec.count, vec.data, &rev, NULL);
295 load_ref_decorations(DECORATE_FULL_REFS); 314 load_ref_decorations(DECORATE_FULL_REFS);
296 rev.show_decorations = 1; 315 rev.show_decorations = 1;
297 rev.grep_filter.regflags |= REG_ICASE; 316 rev.grep_filter.regflags |= REG_ICASE;
298 compile_grep_patterns(&rev.grep_filter); 317 compile_grep_patterns(&rev.grep_filter);
299 prepare_revision_walk(&rev); 318 prepare_revision_walk(&rev);
300 319
301 if (pager) 320 if (pager)
302 html("<table class='list nowrap'>"); 321 html("<table class='list nowrap'>");
303 322
304 html("<tr class='nohover'><th class='left'>Age</th>"); 323 html("<tr class='nohover'><th class='left'>Age</th>");
305 if (ctx.repo->enable_commit_graph) 324 if (ctx.repo->enable_commit_graph)
306 html("<th></th>"); 325 html("<th></th>");
307 html("<th class='left'>Commit message"); 326 html("<th class='left'>Commit message");
308 if (pager) { 327 if (pager) {