X-Git-Url: https://git.cameronkatri.com/cgit.git/blobdiff_plain/08352c7a02f057f6cbaf817ca7e53c53be590a62..b12273001459d72571a7625ffd085502f2a3844c:/ui-stats.c diff --git a/ui-stats.c b/ui-stats.c index 59f4c1e..a264f6a 100644 --- a/ui-stats.c +++ b/ui-stats.c @@ -1,7 +1,7 @@ #include "cgit.h" +#include "ui-stats.h" #include "html.h" #include "ui-shared.h" -#include "ui-stats.h" #ifdef NO_C99_FORMAT #define SZ_FMT "%u" @@ -9,8 +9,6 @@ #define SZ_FMT "%zu" #endif -#define MONTHS 6 - struct authorstat { long total; struct string_list list; @@ -23,21 +21,21 @@ static void trunc_week(struct tm *tm) { time_t t = timegm(tm); t -= ((tm->tm_wday + 6) % 7) * DAY_SECS; - gmtime_r(&t, tm); + gmtime_r(&t, tm); } static void dec_week(struct tm *tm) { time_t t = timegm(tm); t -= WEEK_SECS; - gmtime_r(&t, tm); + gmtime_r(&t, tm); } static void inc_week(struct tm *tm) { time_t t = timegm(tm); t += WEEK_SECS; - gmtime_r(&t, tm); + gmtime_r(&t, tm); } static char *pretty_week(struct tm *tm) @@ -83,7 +81,7 @@ static char *pretty_month(struct tm *tm) static void trunc_quarter(struct tm *tm) { trunc_month(tm); - while(tm->tm_mon % 3 != 0) + while (tm->tm_mon % 3 != 0) dec_month(tm); } @@ -153,7 +151,7 @@ int cgit_find_stats_period(const char *expr, struct cgit_period **period) if (periods[i].code == code || !strcmp(periods[i].name, expr)) { if (period) *period = &periods[i]; - return i+1; + return i + 1; } return 0; } @@ -211,13 +209,12 @@ static int cmp_total_commits(const void *a1, const void *a2) /* Walk the commit DAG and collect number of commits per author per * timeperiod into a nested string_list collection. */ -struct string_list collect_stats(struct cgit_context *ctx, - struct cgit_period *period) +static struct string_list collect_stats(struct cgit_period *period) { struct string_list authors; struct rev_info rev; struct commit *commit; - const char *argv[] = {NULL, ctx->qry.head, NULL, NULL, NULL, NULL}; + const char *argv[] = {NULL, ctx.qry.head, NULL, NULL, NULL, NULL}; int argc = 3; time_t now; long i; @@ -231,15 +228,15 @@ struct string_list collect_stats(struct cgit_context *ctx, period->dec(tm); strftime(tmp, sizeof(tmp), "%Y-%m-%d", tm); argv[2] = xstrdup(fmt("--since=%s", tmp)); - if (ctx->qry.path) { + if (ctx.qry.path) { argv[3] = "--"; - argv[4] = ctx->qry.path; + argv[4] = ctx.qry.path; argc += 2; } init_revisions(&rev, NULL); rev.abbrev = DEFAULT_ABBREV; rev.commit_format = CMIT_FMT_DEFAULT; - rev.no_merges = 1; + rev.max_parents = 1; rev.verbose_header = 1; rev.show_root_diff = 0; setup_revisions(argc, argv, &rev, NULL); @@ -247,15 +244,19 @@ struct string_list collect_stats(struct cgit_context *ctx, memset(&authors, 0, sizeof(authors)); while ((commit = get_revision(&rev)) != NULL) { add_commit(&authors, commit, period); - free(commit->buffer); + free_commit_buffer(commit); free_commit_list(commit->parents); + commit->parents = NULL; } return authors; } -void print_combined_authorrow(struct string_list *authors, int from, int to, - const char *name, const char *leftclass, const char *centerclass, - const char *rightclass, struct cgit_period *period) +static void print_combined_authorrow(struct string_list *authors, int from, + int to, const char *name, + const char *leftclass, + const char *centerclass, + const char *rightclass, + struct cgit_period *period) { struct string_list_item *author; struct authorstat *authorstat; @@ -293,8 +294,8 @@ void print_combined_authorrow(struct string_list *authors, int from, int to, htmlf("%ld", rightclass, total); } -void print_authors(struct string_list *authors, int top, - struct cgit_period *period) +static void print_authors(struct string_list *authors, int top, + struct cgit_period *period) { struct string_list_item *author; struct authorstat *authorstat; @@ -359,31 +360,30 @@ void print_authors(struct string_list *authors, int top, * for each author is another string_list which is used to calculate the * number of commits per time-interval. */ -void cgit_show_stats(struct cgit_context *ctx) +void cgit_show_stats(void) { struct string_list authors; struct cgit_period *period; int top, i; const char *code = "w"; - if (ctx->qry.period) - code = ctx->qry.period; + if (ctx.qry.period) + code = ctx.qry.period; i = cgit_find_stats_period(code, &period); if (!i) { - cgit_print_error(fmt("Unknown statistics type: %c", code[0])); + cgit_print_error("Unknown statistics type: %c", code[0]); return; } - if (i > ctx->repo->max_stats) { - cgit_print_error(fmt("Statistics type disabled: %s", - period->name)); + if (i > ctx.repo->max_stats) { + cgit_print_error("Statistics type disabled: %s", period->name); return; } - authors = collect_stats(ctx, period); + authors = collect_stats(period); qsort(authors.items, authors.nr, sizeof(struct string_list_item), cmp_total_commits); - top = ctx->qry.ofs; + top = ctx.qry.ofs; if (!top) top = 10; @@ -392,10 +392,10 @@ void cgit_show_stats(struct cgit_context *ctx) html("
"); cgit_add_hidden_formfields(1, 0, "stats"); html(""); - if (ctx->repo->max_stats > 1) { + if (ctx.repo->max_stats > 1) { html(""); html(""); @@ -414,9 +414,9 @@ void cgit_show_stats(struct cgit_context *ctx) html(""); html(""); htmlf("

Commits per author per %s", period->name); - if (ctx->qry.path) { + if (ctx.qry.path) { html(" (path '"); - html_txt(ctx->qry.path); + html_txt(ctx.qry.path); html("')"); } html("

");
Period: