about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLars Hjemli <hjemli@gmail.com>2008-12-07 11:45:28 +0100
committerLars Hjemli <hjemli@gmail.com>2008-12-07 11:45:28 +0100
commitc6a6aa2186daf39814baa0e71378c2e9e1041002 (patch)
treeefd65ff67657677745b3d98f3840a4f93ce0f44c
parentAdd a 'stats' page to each repo (diff)
downloadcgit-pink-c6a6aa2186daf39814baa0e71378c2e9e1041002.tar.gz
cgit-pink-c6a6aa2186daf39814baa0e71378c2e9e1041002.zip
ui-stats: enable path-filtered stats
When a path is specified on the querystring the commit statistics will
now be filtered by this path.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r--ui-stats.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/ui-stats.c b/ui-stats.c
index 9150840..3cc8d70 100644
--- a/ui-stats.c
+++ b/ui-stats.c
@@ -195,7 +195,8 @@ struct string_list collect_stats(struct cgit_context *ctx,
 	struct string_list authors;
 	struct rev_info rev;
 	struct commit *commit;
-	const char *argv[] = {NULL, ctx->qry.head, NULL, NULL};
+	const char *argv[] = {NULL, ctx->qry.head, NULL, NULL, NULL, NULL};
+	int argc = 3;
 	time_t now;
 	long i;
 	struct tm *tm;
@@ -208,13 +209,18 @@ 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) {
+		argv[3] = "--";
+		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.verbose_header = 1;
 	rev.show_root_diff = 0;
-	setup_revisions(3, argv, &rev, NULL);
+	setup_revisions(argc, argv, &rev, NULL);
 	prepare_revision_walk(&rev);
 	memset(&authors, 0, sizeof(authors));
 	while ((commit = get_revision(&rev)) != NULL) {
@@ -351,7 +357,13 @@ void cgit_show_stats(struct cgit_context *ctx)
 	top = ctx->qry.ofs;
 	if (!top)
 		top = 10;
-	htmlf("<h2>Commits per author per %s</h2>", period->name);
+	htmlf("<h2>Commits per author per %s", period->name);
+	if (ctx->qry.path) {
+		html(" (path '");
+		html_txt(ctx->qry.path);
+		html("')");
+	}
+	html("</h2>");
 
 	html("<form method='get' action='.' style='float: right; text-align: right;'>");
 	if (strcmp(ctx->qry.head, ctx->repo->defbranch))