author | Lars Hjemli <hjemli@gmail.com> | 2007-05-18 11:55:52 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2007-05-18 11:55:52 (UTC) |
commit | e189344a7dfe6fa1b07434d5170e6441dcbaf788 (patch) (unidiff) | |
tree | f1500b97f95a710dba27469510114388be435d01 /ui-log.c | |
parent | c1ad6cb77889880ad0189a689840fbfa6e5cbc80 (diff) | |
download | cgit-e189344a7dfe6fa1b07434d5170e6441dcbaf788.zip cgit-e189344a7dfe6fa1b07434d5170e6441dcbaf788.tar.gz cgit-e189344a7dfe6fa1b07434d5170e6441dcbaf788.tar.bz2 |
Add knobs to enable/disable files/lines changed in log view
These columns can cause lots of IO on the server, so add settings to
explicitly enable them. Also, add per repo settings to optionally disable
the columns if sitewide enabled.
While at it, do not allow repo.snapshot to enable snapshots if the global
setting is disabled.
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r-- | ui-log.c | 33 |
1 files changed, 21 insertions, 12 deletions
@@ -1,119 +1,128 @@ | |||
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 | 10 | ||
11 | int files, lines; | 11 | int files, lines; |
12 | 12 | ||
13 | void count_lines(char *line, int size) | 13 | void count_lines(char *line, int size) |
14 | { | 14 | { |
15 | if (size>0 && (line[0] == '+' || line[0] == '-')) | 15 | if (size>0 && (line[0] == '+' || line[0] == '-')) |
16 | lines++; | 16 | lines++; |
17 | } | 17 | } |
18 | 18 | ||
19 | void inspect_files(struct diff_filepair *pair) | 19 | void inspect_files(struct diff_filepair *pair) |
20 | { | 20 | { |
21 | files++; | 21 | files++; |
22 | cgit_diff_files(pair->one->sha1, pair->two->sha1, count_lines); | 22 | if (cgit_repo->enable_log_linecount) |
23 | cgit_diff_files(pair->one->sha1, pair->two->sha1, count_lines); | ||
23 | } | 24 | } |
24 | 25 | ||
25 | void print_commit(struct commit *commit) | 26 | void print_commit(struct commit *commit) |
26 | { | 27 | { |
27 | char buf[32]; | 28 | char buf[32]; |
28 | struct commitinfo *info; | 29 | struct commitinfo *info; |
29 | struct tm *time; | 30 | struct tm *time; |
30 | 31 | ||
31 | info = cgit_parse_commit(commit); | 32 | info = cgit_parse_commit(commit); |
32 | time = gmtime(&commit->date); | 33 | time = gmtime(&commit->date); |
33 | html("<tr><td>"); | 34 | html("<tr><td>"); |
34 | strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M", time); | 35 | strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M", time); |
35 | html_txt(buf); | 36 | html_txt(buf); |
36 | html("</td><td>"); | 37 | html("</td><td>"); |
37 | char *qry = fmt("h=%s", sha1_to_hex(commit->object.sha1)); | 38 | char *qry = fmt("h=%s", sha1_to_hex(commit->object.sha1)); |
38 | char *url = cgit_pageurl(cgit_query_repo, "commit", qry); | 39 | char *url = cgit_pageurl(cgit_query_repo, "commit", qry); |
39 | html_link_open(url, NULL, NULL); | 40 | html_link_open(url, NULL, NULL); |
40 | html_ntxt(cgit_max_msg_len, info->subject); | 41 | html_ntxt(cgit_max_msg_len, info->subject); |
41 | html_link_close(); | 42 | html_link_close(); |
42 | files = 0; | 43 | if (cgit_repo->enable_log_filecount) { |
43 | lines = 0; | 44 | files = 0; |
44 | cgit_diff_commit(commit, inspect_files); | 45 | lines = 0; |
45 | html("</td><td class='right'>"); | 46 | cgit_diff_commit(commit, inspect_files); |
46 | htmlf("%d", files); | 47 | html("</td><td class='right'>"); |
47 | html("</td><td class='right'>"); | 48 | htmlf("%d", files); |
48 | htmlf("%d", lines); | 49 | if (cgit_repo->enable_log_linecount) { |
50 | html("</td><td class='right'>"); | ||
51 | htmlf("%d", lines); | ||
52 | } | ||
53 | } | ||
49 | html("</td><td>"); | 54 | html("</td><td>"); |
50 | html_txt(info->author); | 55 | html_txt(info->author); |
51 | html("</td></tr>\n"); | 56 | html("</td></tr>\n"); |
52 | cgit_free_commitinfo(info); | 57 | cgit_free_commitinfo(info); |
53 | } | 58 | } |
54 | 59 | ||
55 | 60 | ||
56 | void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *path) | 61 | void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *path) |
57 | { | 62 | { |
58 | struct rev_info rev; | 63 | struct rev_info rev; |
59 | struct commit *commit; | 64 | struct commit *commit; |
60 | const char *argv[] = {NULL, tip, NULL, NULL, NULL}; | 65 | const char *argv[] = {NULL, tip, NULL, NULL, NULL}; |
61 | int argc = 2; | 66 | int argc = 2; |
62 | int i; | 67 | int i; |
63 | 68 | ||
64 | if (grep) | 69 | if (grep) |
65 | argv[argc++] = fmt("--grep=%s", grep); | 70 | argv[argc++] = fmt("--grep=%s", grep); |
66 | if (path) { | 71 | if (path) { |
67 | argv[argc++] = "--"; | 72 | argv[argc++] = "--"; |
68 | argv[argc++] = path; | 73 | argv[argc++] = path; |
69 | } | 74 | } |
70 | init_revisions(&rev, NULL); | 75 | init_revisions(&rev, NULL); |
71 | rev.abbrev = DEFAULT_ABBREV; | 76 | rev.abbrev = DEFAULT_ABBREV; |
72 | rev.commit_format = CMIT_FMT_DEFAULT; | 77 | rev.commit_format = CMIT_FMT_DEFAULT; |
73 | rev.verbose_header = 1; | 78 | rev.verbose_header = 1; |
74 | rev.show_root_diff = 0; | 79 | rev.show_root_diff = 0; |
75 | setup_revisions(argc, argv, &rev, NULL); | 80 | setup_revisions(argc, argv, &rev, NULL); |
76 | if (rev.grep_filter) { | 81 | if (rev.grep_filter) { |
77 | rev.grep_filter->regflags |= REG_ICASE; | 82 | rev.grep_filter->regflags |= REG_ICASE; |
78 | compile_grep_patterns(rev.grep_filter); | 83 | compile_grep_patterns(rev.grep_filter); |
79 | } | 84 | } |
80 | prepare_revision_walk(&rev); | 85 | prepare_revision_walk(&rev); |
81 | 86 | ||
82 | html("<table class='list nowrap'>"); | 87 | html("<table class='list nowrap'>"); |
83 | html("<tr class='nohover'><th class='left'>Date</th>" | 88 | html("<tr class='nohover'><th class='left'>Date</th>" |
84 | "<th class='left'>Message</th>" | 89 | "<th class='left'>Message</th>"); |
85 | "<th class='left'>Files</th>" | 90 | |
86 | "<th class='left'>Lines</th>" | 91 | if (cgit_repo->enable_log_filecount) { |
87 | "<th class='left'>Author</th></tr>\n"); | 92 | html("<th class='left'>Files</th>"); |
93 | if (cgit_repo->enable_log_linecount) | ||
94 | html("<th class='left'>Lines</th>"); | ||
95 | } | ||
96 | html("<th class='left'>Author</th></tr>\n"); | ||
88 | 97 | ||
89 | if (ofs<0) | 98 | if (ofs<0) |
90 | ofs = 0; | 99 | ofs = 0; |
91 | 100 | ||
92 | for (i = 0; i < ofs && (commit = get_revision(&rev)) != NULL; i++) { | 101 | for (i = 0; i < ofs && (commit = get_revision(&rev)) != NULL; i++) { |
93 | free(commit->buffer); | 102 | free(commit->buffer); |
94 | commit->buffer = NULL; | 103 | commit->buffer = NULL; |
95 | free_commit_list(commit->parents); | 104 | free_commit_list(commit->parents); |
96 | commit->parents = NULL; | 105 | commit->parents = NULL; |
97 | } | 106 | } |
98 | 107 | ||
99 | for (i = 0; i < cnt && (commit = get_revision(&rev)) != NULL; i++) { | 108 | for (i = 0; i < cnt && (commit = get_revision(&rev)) != NULL; i++) { |
100 | print_commit(commit); | 109 | print_commit(commit); |
101 | free(commit->buffer); | 110 | free(commit->buffer); |
102 | commit->buffer = NULL; | 111 | commit->buffer = NULL; |
103 | free_commit_list(commit->parents); | 112 | free_commit_list(commit->parents); |
104 | commit->parents = NULL; | 113 | commit->parents = NULL; |
105 | } | 114 | } |
106 | html("</table>\n"); | 115 | html("</table>\n"); |
107 | 116 | ||
108 | html("<div class='pager'>"); | 117 | html("<div class='pager'>"); |
109 | if (ofs > 0) { | 118 | if (ofs > 0) { |
110 | html(" <a href='"); | 119 | html(" <a href='"); |
111 | html(cgit_pageurl(cgit_query_repo, cgit_query_page, | 120 | html(cgit_pageurl(cgit_query_repo, cgit_query_page, |
112 | fmt("h=%s&ofs=%d", tip, ofs-cnt))); | 121 | fmt("h=%s&ofs=%d", tip, ofs-cnt))); |
113 | html("'>[prev]</a> "); | 122 | html("'>[prev]</a> "); |
114 | } | 123 | } |
115 | 124 | ||
116 | if ((commit = get_revision(&rev)) != NULL) { | 125 | if ((commit = get_revision(&rev)) != NULL) { |
117 | html(" <a href='"); | 126 | html(" <a href='"); |
118 | html(cgit_pageurl(cgit_query_repo, "log", | 127 | html(cgit_pageurl(cgit_query_repo, "log", |
119 | fmt("h=%s&ofs=%d", tip, ofs+cnt))); | 128 | fmt("h=%s&ofs=%d", tip, ofs+cnt))); |