-#include <string-list.h>
-
#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 {
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)
{
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
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++;
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("<td class='%s'>%d</td>", centerclass, subtotal);
+ htmlf("<td class='%s'>%ld</td>", centerclass, subtotal);
total += subtotal;
}
- htmlf("<td class='%s'>%d</td></tr>", rightclass, total);
+ htmlf("<td class='%s'>%ld</td></tr>", rightclass, total);
}
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("<td>0</td>");
else {
- htmlf("<td>%d</td>", date->util);
+ htmlf("<td>"SZ_FMT"</td>", (size_t)date->util);
total += (size_t)date->util;
}
}
- htmlf("<td class='sum'>%d</td></tr>", total);
+ htmlf("<td class='sum'>%ld</td></tr>", 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);
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) {
top = ctx->qry.ofs;
if (!top)
top = 10;
+
+ html("<div class='cgit-panel'>");
+ html("<b>stat options</b>");
+ html("<form method='get' action=''>");
+ cgit_add_hidden_formfields(1, 0, "stats");
+ html("<table><tr><td colspan='2'/></tr>");
+ if (ctx->repo->max_stats > 1) {
+ html("<tr><td class='label'>Period:</td>");
+ html("<td class='ctrl'><select name='period' onchange='this.form.submit();'>");
+ for (i = 0; i < ctx->repo->max_stats; i++)
+ html_option(fmt("%c", periods[i].code),
+ periods[i].name, fmt("%c", period->code));
+ html("</select></td></tr>");
+ }
+ html("<tr><td class='label'>Authors:</td>");
+ html("<td class='ctrl'><select name='ofs' onchange='this.form.submit();'>");
+ html_intoption(10, "10", top);
+ html_intoption(25, "25", top);
+ html_intoption(50, "50", top);
+ html_intoption(100, "100", top);
+ html_intoption(-1, "all", top);
+ html("</select></td></tr>");
+ html("<tr><td/><td class='ctrl'>");
+ html("<noscript><input type='submit' value='Reload'/></noscript>");
+ html("</td></tr></table>");
+ html("</form>");
+ html("</div>");
htmlf("<h2>Commits per author per %s", period->name);
if (ctx->qry.path) {
html(" (path '");
html("')");
}
html("</h2>");
-
- html("<form method='get' action='.' style='float: right; text-align: right;'>");
- if (strcmp(ctx->qry.head, ctx->repo->defbranch))
- htmlf("<input type='hidden' name='h' value='%s'/>", ctx->qry.head);
- if (ctx->repo->max_stats > 1) {
- html("Period: ");
- html("<select name='period' onchange='this.form.submit();'>");
- for (i = 0; i < ctx->repo->max_stats; i++)
- htmlf("<option value='%c'%s>%s</option>",
- periods[i].code,
- period == &periods[i] ? " selected" : "",
- periods[i].name);
- html("</select><br/><br/>");
- }
- html("Authors: ");
- html("");
- html("<select name='ofs' onchange='this.form.submit();'>");
- htmlf("<option value='10'%s>10</option>", top == 10 ? " selected" : "");
- htmlf("<option value='25'%s>25</option>", top == 25 ? " selected" : "");
- htmlf("<option value='50'%s>50</option>", top == 50 ? " selected" : "");
- htmlf("<option value='100'%s>100</option>", top == 100 ? " selected" : "");
- htmlf("<option value='-1'%s>All</option>", top == -1 ? " selected" : "");
- html("</select>");
- html("<noscript> <input type='submit' value='Reload'/></noscript>");
- html("</form>");
print_authors(&authors, top, period);
}