X-Git-Url: https://git.cameronkatri.com/cgit.git/blobdiff_plain/b47b7bd1d0fb872763214e674b53a562c7513fc0..6d6f8bdeed0b47422337c430fdaf236b978f6c44:/ui-stats.c diff --git a/ui-stats.c b/ui-stats.c index bdaf9cc..28b794f 100644 --- a/ui-stats.c +++ b/ui-stats.c @@ -1,9 +1,13 @@ -#include - #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" +#else +#define SZ_FMT "%zu" +#endif #define MONTHS 6 @@ -19,21 +23,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) @@ -79,7 +83,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); } @@ -149,7 +153,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; } @@ -175,7 +179,7 @@ static void add_commit(struct string_list *authors, struct commit *commit, info = cgit_parse_commit(commit); tmp = xstrdup(info->author); - author = string_list_insert(tmp, authors); + author = string_list_insert(authors, tmp); if (!author->util) author->util = xcalloc(1, sizeof(struct authorstat)); else @@ -186,7 +190,7 @@ static void add_commit(struct string_list *authors, struct commit *commit, date = gmtime(&t); period->trunc(date); tmp = xstrdup(period->pretty(date)); - item = string_list_insert(tmp, items); + item = string_list_insert(items, tmp); if (item->util) free(tmp); item->util++; @@ -207,8 +211,8 @@ 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_context *ctx, + struct cgit_period *period) { struct string_list authors; struct rev_info rev; @@ -235,7 +239,7 @@ struct string_list collect_stats(struct cgit_context *ctx, 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); @@ -249,9 +253,12 @@ struct string_list collect_stats(struct cgit_context *ctx, 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; @@ -279,18 +286,18 @@ void print_combined_authorrow(struct string_list *authors, int from, int to, author = &authors->items[i]; authorstat = author->util; items = &authorstat->list; - date = string_list_lookup(tmp, items); + date = string_list_lookup(items, tmp); if (date) subtotal += (size_t)date->util; } - htmlf("%d", centerclass, subtotal); + htmlf("%ld", centerclass, subtotal); total += subtotal; } - htmlf("%d", rightclass, total); + 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; @@ -331,20 +338,20 @@ void print_authors(struct string_list *authors, int top, for (j = 0; j < period->count; j++) { tmp = period->pretty(tm); period->inc(tm); - date = string_list_lookup(tmp, items); + date = string_list_lookup(items, tmp); if (!date) html("0"); else { - htmlf("%d", date->util); + htmlf(""SZ_FMT"", (size_t)date->util); total += (size_t)date->util; } } - htmlf("%d", total); + htmlf("%ld", total); } if (top < authors->nr) print_combined_authorrow(authors, top, authors->nr - 1, - "Others (%d)", "left", "", "sum", period); + "Others (%ld)", "left", "", "sum", period); print_combined_authorrow(authors, 0, authors->nr - 1, "Total", "total", "sum", "sum", period); @@ -367,12 +374,11 @@ void cgit_show_stats(struct cgit_context *ctx) i = cgit_find_stats_period(code, &period); if (!i) { - cgit_print_error(fmt("Unknown statistics type: %c", code)); + 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)); + cgit_print_error("Statistics type disabled: %s", period->name); return; } authors = collect_stats(ctx, period); @@ -382,6 +388,33 @@ void cgit_show_stats(struct cgit_context *ctx) top = ctx->qry.ofs; if (!top) top = 10; + + html("
"); + html("stat options"); + html("
"); + cgit_add_hidden_formfields(1, 0, "stats"); + html(""); + if (ctx->repo->max_stats > 1) { + html(""); + html(""); + } + html(""); + html(""); + html("
Period:
Authors:
"); + html(""); + html("
"); + html("
"); + html("
"); htmlf("

Commits per author per %s", period->name); if (ctx->qry.path) { html(" (path '"); @@ -389,30 +422,6 @@ void cgit_show_stats(struct cgit_context *ctx) html("')"); } html("

"); - - html("
"); - cgit_add_hidden_formfields(1, 0, "stats"); - if (ctx->repo->max_stats > 1) { - html("Period: "); - html("

"); - } - html("Authors: "); - html(""); - html(""); - html(""); - html("
"); print_authors(&authors, top, period); }