|
|
|
@@ -133,48 +133,56 @@ struct cgit_period periods[] = { |
133 | /* Given a period code or name, return a period index (1, 2, 3 or 4) |
133 | /* Given a period code or name, return a period index (1, 2, 3 or 4) |
134 | * and update the period pointer to the correcsponding struct. |
134 | * and update the period pointer to the correcsponding struct. |
135 | * If no matching code is found, return 0. |
135 | * If no matching code is found, return 0. |
136 | */ |
136 | */ |
137 | int cgit_find_stats_period(const char *expr, struct cgit_period **period) |
137 | int cgit_find_stats_period(const char *expr, struct cgit_period **period) |
138 | { |
138 | { |
139 | int i; |
139 | int i; |
140 | char code = '\0'; |
140 | char code = '\0'; |
141 | |
141 | |
142 | if (!expr) |
142 | if (!expr) |
143 | return 0; |
143 | return 0; |
144 | |
144 | |
145 | if (strlen(expr) == 1) |
145 | if (strlen(expr) == 1) |
146 | code = expr[0]; |
146 | code = expr[0]; |
147 | |
147 | |
148 | for (i = 0; i < sizeof(periods) / sizeof(periods[0]); i++) |
148 | for (i = 0; i < sizeof(periods) / sizeof(periods[0]); i++) |
149 | if (periods[i].code == code || !strcmp(periods[i].name, expr)) { |
149 | if (periods[i].code == code || !strcmp(periods[i].name, expr)) { |
150 | if (period) |
150 | if (period) |
151 | *period = &periods[i]; |
151 | *period = &periods[i]; |
152 | return i+1; |
152 | return i+1; |
153 | } |
153 | } |
154 | return 0; |
154 | return 0; |
155 | } |
155 | } |
156 | |
156 | |
| |
157 | const char *cgit_find_stats_periodname(int idx) |
| |
158 | { |
| |
159 | if (idx > 0 && idx < 4) |
| |
160 | return periods[idx - 1].name; |
| |
161 | else |
| |
162 | return ""; |
| |
163 | } |
| |
164 | |
157 | static void add_commit(struct string_list *authors, struct commit *commit, |
165 | static void add_commit(struct string_list *authors, struct commit *commit, |
158 | struct cgit_period *period) |
166 | struct cgit_period *period) |
159 | { |
167 | { |
160 | struct commitinfo *info; |
168 | struct commitinfo *info; |
161 | struct string_list_item *author, *item; |
169 | struct string_list_item *author, *item; |
162 | struct authorstat *authorstat; |
170 | struct authorstat *authorstat; |
163 | struct string_list *items; |
171 | struct string_list *items; |
164 | char *tmp; |
172 | char *tmp; |
165 | struct tm *date; |
173 | struct tm *date; |
166 | time_t t; |
174 | time_t t; |
167 | |
175 | |
168 | info = cgit_parse_commit(commit); |
176 | info = cgit_parse_commit(commit); |
169 | tmp = xstrdup(info->author); |
177 | tmp = xstrdup(info->author); |
170 | author = string_list_insert(tmp, authors); |
178 | author = string_list_insert(tmp, authors); |
171 | if (!author->util) |
179 | if (!author->util) |
172 | author->util = xcalloc(1, sizeof(struct authorstat)); |
180 | author->util = xcalloc(1, sizeof(struct authorstat)); |
173 | else |
181 | else |
174 | free(tmp); |
182 | free(tmp); |
175 | authorstat = author->util; |
183 | authorstat = author->util; |
176 | items = &authorstat->list; |
184 | items = &authorstat->list; |
177 | t = info->committer_date; |
185 | t = info->committer_date; |
178 | date = gmtime(&t); |
186 | date = gmtime(&t); |
179 | period->trunc(date); |
187 | period->trunc(date); |
180 | tmp = xstrdup(period->pretty(date)); |
188 | tmp = xstrdup(period->pretty(date)); |
|