X-Git-Url: https://gitweb.ps.run/ps-cgit/blobdiff_plain/fb2f3f6c29bad733723152893c5246a756e4cada..7996157f14d99ee6d26c042816e12bd9089c1efb:/ui-stats.c diff --git a/ui-stats.c b/ui-stats.c index 1104485..59f4c1e 100644 --- a/ui-stats.c +++ b/ui-stats.c @@ -1,10 +1,14 @@ -#include - #include "cgit.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 struct authorstat { @@ -154,6 +158,14 @@ int cgit_find_stats_period(const char *expr, struct cgit_period **period) return 0; } +const char *cgit_find_stats_periodname(int idx) +{ + if (idx > 0 && idx < 4) + return periods[idx - 1].name; + else + return ""; +} + static void add_commit(struct string_list *authors, struct commit *commit, struct cgit_period *period) { @@ -167,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 @@ -178,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++; @@ -271,14 +283,14 @@ 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, @@ -323,20 +335,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); @@ -359,7 +371,7 @@ 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(fmt("Unknown statistics type: %c", code[0])); return; } if (i > ctx->repo->max_stats) { @@ -374,6 +386,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 '"); @@ -381,31 +420,6 @@ void cgit_show_stats(struct cgit_context *ctx) html("')"); } html("

"); - - html("
"); - if (strcmp(ctx->qry.head, ctx->repo->defbranch)) - htmlf("", ctx->qry.head); - if (ctx->repo->max_stats > 1) { - html("Period: "); - html("

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