author | Lars Hjemli <hjemli@gmail.com> | 2008-12-06 16:38:19 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2008-12-06 16:38:19 (UTC) |
commit | f86a23ff537258d36bf8f1876fa7a4bede6673d8 (patch) (unidiff) | |
tree | 8328d415416058cdc5b0fd2c6564ddcab5766c7a /cgit.h | |
parent | 140012d7a8e51df5a9f9c556696778b86ade4fc9 (diff) | |
download | cgit-f86a23ff537258d36bf8f1876fa7a4bede6673d8.zip cgit-f86a23ff537258d36bf8f1876fa7a4bede6673d8.tar.gz cgit-f86a23ff537258d36bf8f1876fa7a4bede6673d8.tar.bz2 |
Add a 'stats' page to each repo
This new page, which is disabled by default, can be used to print some
statistics about the number of commits per period in the repository,
where period can be either weeks, months, quarters or years.
The function can be activated globally by setting 'enable-stats=1' in
cgitrc and disabled for individual repos by setting 'repo.enable-stats=0'.
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r-- | cgit.h | 3 |
1 files changed, 3 insertions, 0 deletions
@@ -16,186 +16,189 @@ | |||
16 | #include <log-tree.h> | 16 | #include <log-tree.h> |
17 | #include <archive.h> | 17 | #include <archive.h> |
18 | #include <xdiff/xdiff.h> | 18 | #include <xdiff/xdiff.h> |
19 | #include <utf8.h> | 19 | #include <utf8.h> |
20 | 20 | ||
21 | 21 | ||
22 | /* | 22 | /* |
23 | * Dateformats used on misc. pages | 23 | * Dateformats used on misc. pages |
24 | */ | 24 | */ |
25 | #define FMT_LONGDATE "%Y-%m-%d %H:%M:%S (%Z)" | 25 | #define FMT_LONGDATE "%Y-%m-%d %H:%M:%S (%Z)" |
26 | #define FMT_SHORTDATE "%Y-%m-%d" | 26 | #define FMT_SHORTDATE "%Y-%m-%d" |
27 | #define FMT_ATOMDATE "%Y-%m-%dT%H:%M:%SZ" | 27 | #define FMT_ATOMDATE "%Y-%m-%dT%H:%M:%SZ" |
28 | 28 | ||
29 | 29 | ||
30 | /* | 30 | /* |
31 | * Limits used for relative dates | 31 | * Limits used for relative dates |
32 | */ | 32 | */ |
33 | #define TM_MIN 60 | 33 | #define TM_MIN 60 |
34 | #define TM_HOUR (TM_MIN * 60) | 34 | #define TM_HOUR (TM_MIN * 60) |
35 | #define TM_DAY (TM_HOUR * 24) | 35 | #define TM_DAY (TM_HOUR * 24) |
36 | #define TM_WEEK (TM_DAY * 7) | 36 | #define TM_WEEK (TM_DAY * 7) |
37 | #define TM_YEAR (TM_DAY * 365) | 37 | #define TM_YEAR (TM_DAY * 365) |
38 | #define TM_MONTH (TM_YEAR / 12.0) | 38 | #define TM_MONTH (TM_YEAR / 12.0) |
39 | 39 | ||
40 | 40 | ||
41 | /* | 41 | /* |
42 | * Default encoding | 42 | * Default encoding |
43 | */ | 43 | */ |
44 | #define PAGE_ENCODING "UTF-8" | 44 | #define PAGE_ENCODING "UTF-8" |
45 | 45 | ||
46 | typedef void (*configfn)(const char *name, const char *value); | 46 | typedef void (*configfn)(const char *name, const char *value); |
47 | typedef void (*filepair_fn)(struct diff_filepair *pair); | 47 | typedef void (*filepair_fn)(struct diff_filepair *pair); |
48 | typedef void (*linediff_fn)(char *line, int len); | 48 | typedef void (*linediff_fn)(char *line, int len); |
49 | 49 | ||
50 | struct cgit_repo { | 50 | struct cgit_repo { |
51 | char *url; | 51 | char *url; |
52 | char *name; | 52 | char *name; |
53 | char *path; | 53 | char *path; |
54 | char *desc; | 54 | char *desc; |
55 | char *owner; | 55 | char *owner; |
56 | char *defbranch; | 56 | char *defbranch; |
57 | char *group; | 57 | char *group; |
58 | char *module_link; | 58 | char *module_link; |
59 | char *readme; | 59 | char *readme; |
60 | char *clone_url; | 60 | char *clone_url; |
61 | int snapshots; | 61 | int snapshots; |
62 | int enable_log_filecount; | 62 | int enable_log_filecount; |
63 | int enable_log_linecount; | 63 | int enable_log_linecount; |
64 | int enable_stats; | ||
64 | }; | 65 | }; |
65 | 66 | ||
66 | struct cgit_repolist { | 67 | struct cgit_repolist { |
67 | int length; | 68 | int length; |
68 | int count; | 69 | int count; |
69 | struct cgit_repo *repos; | 70 | struct cgit_repo *repos; |
70 | }; | 71 | }; |
71 | 72 | ||
72 | struct commitinfo { | 73 | struct commitinfo { |
73 | struct commit *commit; | 74 | struct commit *commit; |
74 | char *author; | 75 | char *author; |
75 | char *author_email; | 76 | char *author_email; |
76 | unsigned long author_date; | 77 | unsigned long author_date; |
77 | char *committer; | 78 | char *committer; |
78 | char *committer_email; | 79 | char *committer_email; |
79 | unsigned long committer_date; | 80 | unsigned long committer_date; |
80 | char *subject; | 81 | char *subject; |
81 | char *msg; | 82 | char *msg; |
82 | char *msg_encoding; | 83 | char *msg_encoding; |
83 | }; | 84 | }; |
84 | 85 | ||
85 | struct taginfo { | 86 | struct taginfo { |
86 | char *tagger; | 87 | char *tagger; |
87 | char *tagger_email; | 88 | char *tagger_email; |
88 | unsigned long tagger_date; | 89 | unsigned long tagger_date; |
89 | char *msg; | 90 | char *msg; |
90 | }; | 91 | }; |
91 | 92 | ||
92 | struct refinfo { | 93 | struct refinfo { |
93 | const char *refname; | 94 | const char *refname; |
94 | struct object *object; | 95 | struct object *object; |
95 | union { | 96 | union { |
96 | struct taginfo *tag; | 97 | struct taginfo *tag; |
97 | struct commitinfo *commit; | 98 | struct commitinfo *commit; |
98 | }; | 99 | }; |
99 | }; | 100 | }; |
100 | 101 | ||
101 | struct reflist { | 102 | struct reflist { |
102 | struct refinfo **refs; | 103 | struct refinfo **refs; |
103 | int alloc; | 104 | int alloc; |
104 | int count; | 105 | int count; |
105 | }; | 106 | }; |
106 | 107 | ||
107 | struct cgit_query { | 108 | struct cgit_query { |
108 | int has_symref; | 109 | int has_symref; |
109 | int has_sha1; | 110 | int has_sha1; |
110 | char *raw; | 111 | char *raw; |
111 | char *repo; | 112 | char *repo; |
112 | char *page; | 113 | char *page; |
113 | char *search; | 114 | char *search; |
114 | char *grep; | 115 | char *grep; |
115 | char *head; | 116 | char *head; |
116 | char *sha1; | 117 | char *sha1; |
117 | char *sha2; | 118 | char *sha2; |
118 | char *path; | 119 | char *path; |
119 | char *name; | 120 | char *name; |
120 | char *mimetype; | 121 | char *mimetype; |
121 | char *url; | 122 | char *url; |
123 | char *period; | ||
122 | int ofs; | 124 | int ofs; |
123 | int nohead; | 125 | int nohead; |
124 | }; | 126 | }; |
125 | 127 | ||
126 | struct cgit_config { | 128 | struct cgit_config { |
127 | char *agefile; | 129 | char *agefile; |
128 | char *cache_root; | 130 | char *cache_root; |
129 | char *clone_prefix; | 131 | char *clone_prefix; |
130 | char *css; | 132 | char *css; |
131 | char *favicon; | 133 | char *favicon; |
132 | char *footer; | 134 | char *footer; |
133 | char *index_header; | 135 | char *index_header; |
134 | char *index_info; | 136 | char *index_info; |
135 | char *logo; | 137 | char *logo; |
136 | char *logo_link; | 138 | char *logo_link; |
137 | char *module_link; | 139 | char *module_link; |
138 | char *repo_group; | 140 | char *repo_group; |
139 | char *robots; | 141 | char *robots; |
140 | char *root_title; | 142 | char *root_title; |
141 | char *root_desc; | 143 | char *root_desc; |
142 | char *root_readme; | 144 | char *root_readme; |
143 | char *script_name; | 145 | char *script_name; |
144 | char *virtual_root; | 146 | char *virtual_root; |
145 | int cache_size; | 147 | int cache_size; |
146 | int cache_dynamic_ttl; | 148 | int cache_dynamic_ttl; |
147 | int cache_max_create_time; | 149 | int cache_max_create_time; |
148 | int cache_repo_ttl; | 150 | int cache_repo_ttl; |
149 | int cache_root_ttl; | 151 | int cache_root_ttl; |
150 | int cache_static_ttl; | 152 | int cache_static_ttl; |
151 | int enable_index_links; | 153 | int enable_index_links; |
152 | int enable_log_filecount; | 154 | int enable_log_filecount; |
153 | int enable_log_linecount; | 155 | int enable_log_linecount; |
156 | int enable_stats; | ||
154 | int local_time; | 157 | int local_time; |
155 | int max_repo_count; | 158 | int max_repo_count; |
156 | int max_commit_count; | 159 | int max_commit_count; |
157 | int max_lock_attempts; | 160 | int max_lock_attempts; |
158 | int max_msg_len; | 161 | int max_msg_len; |
159 | int max_repodesc_len; | 162 | int max_repodesc_len; |
160 | int nocache; | 163 | int nocache; |
161 | int renamelimit; | 164 | int renamelimit; |
162 | int snapshots; | 165 | int snapshots; |
163 | int summary_branches; | 166 | int summary_branches; |
164 | int summary_log; | 167 | int summary_log; |
165 | int summary_tags; | 168 | int summary_tags; |
166 | }; | 169 | }; |
167 | 170 | ||
168 | struct cgit_page { | 171 | struct cgit_page { |
169 | time_t modified; | 172 | time_t modified; |
170 | time_t expires; | 173 | time_t expires; |
171 | size_t size; | 174 | size_t size; |
172 | char *mimetype; | 175 | char *mimetype; |
173 | char *charset; | 176 | char *charset; |
174 | char *filename; | 177 | char *filename; |
175 | char *title; | 178 | char *title; |
176 | }; | 179 | }; |
177 | 180 | ||
178 | struct cgit_context { | 181 | struct cgit_context { |
179 | struct cgit_query qry; | 182 | struct cgit_query qry; |
180 | struct cgit_config cfg; | 183 | struct cgit_config cfg; |
181 | struct cgit_repo *repo; | 184 | struct cgit_repo *repo; |
182 | struct cgit_page page; | 185 | struct cgit_page page; |
183 | }; | 186 | }; |
184 | 187 | ||
185 | struct cgit_snapshot_format { | 188 | struct cgit_snapshot_format { |
186 | const char *suffix; | 189 | const char *suffix; |
187 | const char *mimetype; | 190 | const char *mimetype; |
188 | write_archive_fn_t write_func; | 191 | write_archive_fn_t write_func; |
189 | int bit; | 192 | int bit; |
190 | }; | 193 | }; |
191 | 194 | ||
192 | extern const char *cgit_version; | 195 | extern const char *cgit_version; |
193 | 196 | ||
194 | extern struct cgit_repolist cgit_repolist; | 197 | extern struct cgit_repolist cgit_repolist; |
195 | extern struct cgit_context ctx; | 198 | extern struct cgit_context ctx; |
196 | extern const struct cgit_snapshot_format cgit_snapshot_formats[]; | 199 | extern const struct cgit_snapshot_format cgit_snapshot_formats[]; |
197 | 200 | ||
198 | extern struct cgit_repo *cgit_add_repo(const char *url); | 201 | extern struct cgit_repo *cgit_add_repo(const char *url); |
199 | extern struct cgit_repo *cgit_get_repoinfo(const char *url); | 202 | extern struct cgit_repo *cgit_get_repoinfo(const char *url); |
200 | extern void cgit_repo_config_cb(const char *name, const char *value); | 203 | extern void cgit_repo_config_cb(const char *name, const char *value); |
201 | 204 | ||