about summary refs log tree commit diff
path: root/ui-shared.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--ui-shared.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/ui-shared.c b/ui-shared.c
index 95dfeb4..4f28512 100644
--- a/ui-shared.c
+++ b/ui-shared.c
@@ -369,6 +369,12 @@ void cgit_patch_link(char *name, char *title, char *class, char *head,
 	reporevlink("patch", name, title, class, head, rev, NULL);
 }
 
+void cgit_stats_link(char *name, char *title, char *class, char *head,
+		     char *path)
+{
+	reporevlink("stats", name, title, class, head, NULL, path);
+}
+
 void cgit_object_link(struct object *obj)
 {
 	char *page, *shortrev, *fullrev, *name;
@@ -557,7 +563,7 @@ int print_archive_ref(const char *refname, const unsigned char *sha1,
 	return 0;
 }
 
-void add_hidden_formfields(int incl_head, int incl_search, char *page)
+void cgit_add_hidden_formfields(int incl_head, int incl_search, char *page)
 {
 	char *url;
 
@@ -587,15 +593,20 @@ void add_hidden_formfields(int incl_head, int incl_search, char *page)
 	}
 }
 
+const char *fallback_cmd = "repolist";
+
 char *hc(struct cgit_cmd *cmd, const char *page)
 {
-	return (strcmp(cmd->name, page) ? NULL : "active");
+	return (strcmp(cmd ? cmd->name : fallback_cmd, page) ? NULL : "active");
 }
 
 void cgit_print_pageheader(struct cgit_context *ctx)
 {
 	struct cgit_cmd *cmd = cgit_get_cmd(ctx);
 
+	if (!cmd && ctx->repo)
+		fallback_cmd = "summary";
+
 	html("<table id='header'>\n");
 	html("<tr>\n");
 	html("<td class='logo' rowspan='2'><a href='");
@@ -614,7 +625,7 @@ void cgit_print_pageheader(struct cgit_context *ctx)
 		cgit_summary_link(ctx->repo->name, ctx->repo->name, NULL, NULL);
 		html("</td><td class='form'>");
 		html("<form method='get' action=''>\n");
-		add_hidden_formfields(0, 1, ctx->qry.page);
+		cgit_add_hidden_formfields(0, 1, ctx->qry.page);
 		html("<select name='h' onchange='this.form.submit();'>\n");
 		for_each_branch_ref(print_branch_option, ctx->qry.head);
 		html("</select> ");
@@ -651,6 +662,9 @@ void cgit_print_pageheader(struct cgit_context *ctx)
 				 ctx->qry.head, ctx->qry.sha1);
 		cgit_diff_link("diff", NULL, hc(cmd, "diff"), ctx->qry.head,
 			       ctx->qry.sha1, ctx->qry.sha2, NULL);
+		if (ctx->repo->max_stats)
+			cgit_stats_link("stats", NULL, hc(cmd, "stats"),
+					ctx->qry.head, NULL);
 		if (ctx->repo->readme)
 			reporevlink("about", "about", NULL,
 				    hc(cmd, "about"), ctx->qry.head, NULL,
@@ -661,7 +675,7 @@ void cgit_print_pageheader(struct cgit_context *ctx)
 			html_url_path(cgit_fileurl(ctx->qry.repo, "log",
 						   ctx->qry.path, NULL));
 		html("'>\n");
-		add_hidden_formfields(1, 0, "log");
+		cgit_add_hidden_formfields(1, 0, "log");
 		html("<select name='qt'>\n");
 		html_option("grep", "log msg", ctx->qry.grep);
 		html_option("author", "author", ctx->qry.grep);