aboutsummaryrefslogtreecommitdiff
path: root/cgit.c
diff refs
from: back
to: back
| flip
diff options
context:
space:
mode:
Diffstat (limited to 'cgit.c')
-rw-r--r--cgit.c69
1 files changed, 69 insertions, 0 deletions
diff --git a/cgit.c b/cgit.c
index b3ff512..5438fa1 100644
--- a/cgit.c
+++ b/cgit.c
@@ -84,6 +84,26 @@ void cgit_querystring_cb(const char *name, const char *value)
}
}
+char *cgit_repourl(const char *reponame)
+{
+ if (cgit_virtual_root) {
+ return fmt("%s/%s/", cgit_virtual_root, reponame);
+ } else {
+ return fmt("?r=%s", reponame);
+ }
+}
+
+char *cgit_pageurl(const char *reponame, const char *pagename,
+ const char *query)
+{
+ if (cgit_virtual_root) {
+ return fmt("%s/%s/%s/?%s", cgit_virtual_root, reponame,
+ pagename, query);
+ } else {
+ return fmt("?r=%s&p=%s&%s", reponame, pagename, query);
+ }
+}
+
static int cgit_print_branch_cb(const char *refname, const unsigned char *sha1,
int flags, void *cb_data)
{
@@ -114,6 +134,55 @@ static int cgit_print_branch_cb(const char *refname, const unsigned char *sha1,
return 0;
}
+static void cgit_print_repolist(struct cacheitem *item)
+{
+ DIR *d;
+ struct dirent *de;
+ struct stat st;
+ char *name;
+
+ chdir(cgit_root);
+ cgit_print_docstart(cgit_root_title, item);
+ cgit_print_pageheader(cgit_root_title);
+
+ if (!(d = opendir("."))) {
+ cgit_print_error(fmt("Unable to scan repository directory: %s",
+ strerror(errno)));
+ cgit_print_docend();
+ return;
+ }
+
+ html("<h2>Repositories</h2>\n");
+ html("<table class='list'>");
+ html("<tr><th>Name</th><th>Description</th><th>Owner</th></tr>\n");
+ while ((de = readdir(d)) != NULL) {
+ if (de->d_name[0] == '.')
+ continue;
+ if (stat(de->d_name, &st) < 0)
+ continue;
+ if (!S_ISDIR(st.st_mode))
+ continue;
+
+ cgit_repo_name = cgit_repo_desc = cgit_repo_owner = NULL;
+ name = fmt("%s/info/cgit", de->d_name);
+ if (cgit_read_config(name, cgit_repo_config_cb))
+ continue;
+
+ html("<tr><td>");
+ html_link_open(cgit_repourl(de->d_name), NULL, NULL);
+ html_txt(cgit_repo_name);
+ html_link_close();
+ html("</td><td>");
+ html_txt(cgit_repo_desc);
+ html("</td><td>");
+ html_txt(cgit_repo_owner);
+ html("</td></tr>\n");
+ }
+ closedir(d);
+ html("</table>");
+ cgit_print_docend();
+}
+
static void cgit_print_branches()
{
html("<table class='list'>");