author | Johan Herland <johan@herland.net> | 2010-11-15 17:39:51 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2010-11-16 07:18:37 (UTC) |
commit | 268b34af23cdcac87aed3300bfe6154cbc65753e (patch) (unidiff) | |
tree | fccbebc21c004f5967947275ba5086589086ec36 /ui-log.c | |
parent | 9a8d39c668b98464bac97d4e5442966de63f97b2 (diff) | |
download | cgit-268b34af23cdcac87aed3300bfe6154cbc65753e.zip cgit-268b34af23cdcac87aed3300bfe6154cbc65753e.tar.gz cgit-268b34af23cdcac87aed3300bfe6154cbc65753e.tar.bz2 |
ui-log: Colorize commit graph
Use the existing coloring logic in Git's graph code to color the lines
between commits in the commit graph.
Whereas Git normally uses ANSI color escapes to produce colors, we here
use graph_set_column_colors() to replace those with HTML color escapes,
that embed the graph lines in <span> tags that apply the desired color
using CSS.
Signed-off-by: Johan Herland <johan@herland.net>
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r-- | ui-log.c | 19 |
1 files changed, 19 insertions, 0 deletions
@@ -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 | ||
14 | int files, add_lines, rem_lines; | 14 | int files, add_lines, rem_lines; |
15 | 15 | ||
16 | /* | ||
17 | * The list of available column colors in the commit graph. | ||
18 | */ | ||
19 | static 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 | |||
16 | void count_lines(char *line, int size) | 31 | void 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 | ||
28 | void inspect_files(struct diff_filepair *pair) | 43 | void 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 | ||
41 | void show_commit_decorations(struct commit *commit) | 56 | void 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) { |