the repository which powers this website
Teach cgit how to group repositories by category
The new parameter 'repo.group' is used to set the repository group for the following repositores. Whenever this parameter changes value, a subheading is generated in the index page (printing the current value of repo.group). Signed-off-by: Lars Hjemli <[email protected]>
Lars Hjemli 2007-05-19
parent 08cc2e5 · commit 5877c49
-rw-r--r--cgit.css5
-rw-r--r--cgit.h2
-rw-r--r--shared.c4
-rw-r--r--ui-repolist.c10
4 files changed, 21 insertions, 0 deletions
diff --git a/cgit.css b/cgit.css
index 6c7f9c35..88a0a1dd 100644
--- a/cgit.css
+++ b/cgit.css
@@ -353,3 +353,8 @@ table.diff td div.del {
.right {
text-align: right;
}
+
+table.list td.repogroup {
+ padding-top: 1em;
+ font-weight: bold;
+}
diff --git a/cgit.h b/cgit.h
index f3d783e5..8a69a1fe 100644
--- a/cgit.h
+++ b/cgit.h
@@ -36,6 +36,7 @@ struct repoinfo {
char *desc;
char *owner;
char *defbranch;
+ char *group;
char *module_link;
int snapshots;
int enable_log_filecount;
@@ -80,6 +81,7 @@ extern char *cgit_module_link;
extern char *cgit_virtual_root;
extern char *cgit_script_name;
extern char *cgit_cache_root;
+extern char *cgit_repo_group;
extern int cgit_nocache;
extern int cgit_snapshots;
diff --git a/shared.c b/shared.c
index 53cd9b0a..4ddba618 100644
--- a/shared.c
+++ b/shared.c
@@ -19,6 +19,7 @@ char *cgit_module_link = "./?repo=%s&page=commit&id=%s";
char *cgit_virtual_root = NULL;
char *cgit_script_name = CGIT_SCRIPT_NAME;
char *cgit_cache_root = "/var/cache/cgit";
+char *cgit_repo_group = NULL;
int cgit_nocache = 0;
int cgit_snapshots = 0;
@@ -85,6 +86,7 @@ struct repoinfo *add_repo(const char *url)
ret->path = NULL;
ret->desc = NULL;
ret->owner = NULL;
+ ret->group = cgit_repo_group;
ret->defbranch = "master";
ret->snapshots = cgit_snapshots;
ret->enable_log_filecount = cgit_enable_log_filecount;
@@ -131,6 +133,8 @@ void cgit_global_config_cb(const char *name, const char *value)
cgit_max_repodesc_len = atoi(value);
else if (!strcmp(name, "max-commit-count"))
cgit_max_commit_count = atoi(value);
+ else if (!strcmp(name, "repo.group"))
+ cgit_repo_group = xstrdup(value);
else if (!strcmp(name, "repo.url"))
cgit_repo = add_repo(value);
else if (!strcmp(name, "repo.name"))
diff --git a/ui-repolist.c b/ui-repolist.c
index d7311e4d..a884c206 100644
--- a/ui-repolist.c
+++ b/ui-repolist.c
@@ -12,6 +12,7 @@ void cgit_print_repolist(struct cacheitem *item)
{
struct repoinfo *repo;
int i;
+ char *last_group = NULL;
cgit_print_docstart(cgit_root_title, item);
cgit_print_pageheader(cgit_root_title, 0);
@@ -25,6 +26,15 @@ void cgit_print_repolist(struct cacheitem *item)
for (i=0; i<cgit_repolist.count; i++) {
repo = &cgit_repolist.repos[i];
+ if ((last_group == NULL && repo->group != NULL) ||
+ (last_group != NULL && repo->group == NULL) ||
+ (last_group != NULL && repo->group!= NULL &&
+ strcmp(repo->group, last_group))) {
+ html("<tr><td colspan='4' class='repogroup'>");
+ html_txt(repo->group);
+ html("</td></tr>");
+ last_group = repo->group;
+ }
html("<tr><td>");
html_link_open(cgit_repourl(repo->url), NULL, NULL);
html_txt(repo->name);