cgit

commit 63816ec59748c622623f20e653a7bed87f4f05a4

Author: Lars Hjemli <hjemli@gmail.com>

ui-repolist.c: sort by section name, repo name as default

When no sorting is requested by the client, cgit will now sort by
section name followed by repo name. This allows repos to be registered/
discovered independently of their display order.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>

 ui-repolist.c | 15 +++++++++++++++


diff --git a/ui-repolist.c b/ui-repolist.c
index 4dea3b37a4a9317af7a75ad425ce32bfeee6ddd5..d56654d72a0f076681d0d3d4f2e617c40a4974e0 100644
--- a/ui-repolist.c
+++ b/ui-repolist.c
@@ -136,6 +136,18 @@ 		return 1;
 	return 0;
 }
 
+static int sort_section(const void *a, const void *b)
+{
+	const struct cgit_repo *r1 = a;
+	const struct cgit_repo *r2 = b;
+	int result;
+
+	result = cmp(r1->section, r2->section);
+	if (!result)
+		result = cmp(r1->name, r2->name);
+	return result;
+}
+
 static int sort_name(const void *a, const void *b)
 {
 	const struct cgit_repo *r1 = a;
@@ -178,6 +190,7 @@ 	int (*fn)(const void *a, const void *b);
 };
 
 struct sortcolumn sortcolumn[] = {
+	{"section", sort_section},
 	{"name", sort_name},
 	{"desc", sort_desc},
 	{"owner", sort_owner},
@@ -219,6 +232,8 @@ 		html_include(ctx.cfg.index_header);
 
 	if(ctx.qry.sort)
 		sorted = sort_repolist(ctx.qry.sort);
+	else
+		sort_repolist("section");
 
 	html("<table summary='repository list' class='list nowrap'>");
 	for (i=0; i<cgit_repolist.count; i++) {