diff options
Diffstat (limited to '')
| -rw-r--r-- | source/ui-stats.c | 23 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1 file changed, 12 insertions, 11 deletions
diff --git a/source/ui-stats.c b/source/ui-stats.c index 55ed370..f200b63 100644 --- a/source/ui-stats.c +++ b/source/ui-stats.c @@ -202,13 +202,13 @@ static void add_commit(struct string_list *authors, struct commitinfo *info, } /* - * Count the commits in the displayed window, returning a list of authors - * whose util field holds a struct authorstat. Merge commits are left out, so - * that pulling a branch in does not credit the merger with its commits. + * Count the commits in the displayed window into authors, whose util fields + * hold a struct authorstat, and return non-zero once an error page has + * answered instead. Merge commits are left out, so that pulling a branch in + * does not credit the merger with its commits. */ -static struct string_list collect_stats(const struct cgit_period *period) +static int collect_stats(const struct cgit_period *period, struct string_list *authors) { - struct string_list authors; struct rev_info rev; struct commit *commit; // setup_revisions reads these the way main does, skipping the first @@ -239,24 +239,23 @@ static struct string_list collect_stats(const struct cgit_period *period) // whole history and discarding older commits. The check below still // bounds the period edge exactly. rev.max_age = since; - memset(&authors, 0, sizeof(authors)); // A failed setup leaves the walk holding freed commits, so it must // not be read from. if (prepare_revision_walk(&rev)) { cgit_print_error_page(500, "Internal Server Error", "Unable to read the history"); - return authors; + return -1; } while ((commit = get_revision(&rev))) { struct commitinfo *info = cgit_parse_commit(commit); if ((time_t)info->committer_date >= since) - add_commit(&authors, info, period); + add_commit(authors, info, period); cgit_free_commitinfo(info); release_commit_memory(the_repository->parsed_objects, commit); commit->parents = NULL; } - return authors; + return 0; } static int cmp_total_commits(const void *a, const void *b) @@ -431,7 +430,8 @@ const char *cgit_find_stats_periodname(int idx) void cgit_show_stats(void) { - struct string_list authors, labels; + struct string_list authors = STRING_LIST_INIT_NODUP; + struct string_list labels; const struct cgit_period *period; int top, period_index; const char *code = "w"; @@ -448,7 +448,8 @@ void cgit_show_stats(void) cgit_print_error_page(400, "Bad Request", "Statistics type disabled: %s", period->name); return; } - authors = collect_stats(period); + if (collect_stats(period, &authors)) + return; qsort(authors.items, authors.nr, sizeof(struct string_list_item), cmp_total_commits); top = ctx.qry.ofs; |
