diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | cgit.c | 69 | ||||
-rw-r--r-- | cgit.h | 8 | ||||
-rw-r--r-- | ui-repolist.c | 60 | ||||
-rw-r--r-- | ui-shared.c | 21 |
5 files changed, 90 insertions, 70 deletions
@@ -5,7 +5,7 @@ INSTALL_CSS = /var/www/htdocs/cgit.css CACHE_ROOT = /var/cache/cgit EXTLIBS = ../git/libgit.a ../git/xdiff/lib.a -lz -lcrypto -OBJECTS = parsing.o html.o cache.o ui-shared.o +OBJECTS = parsing.o html.o cache.o ui-shared.o ui-repolist.o CFLAGS += -Wall @@ -84,26 +84,6 @@ 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) { @@ -134,55 +114,6 @@ 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'>"); @@ -65,10 +65,18 @@ extern int cache_unlock(struct cacheitem *item); extern int cache_exist(struct cacheitem *item); extern int cache_expired(struct cacheitem *item); +extern char *cgit_repourl(const char *reponame); +extern char *cgit_pageurl(const char *reponame, const char *pagename, + const char *query); + extern void cgit_print_error(char *msg); extern void cgit_print_docstart(char *title, struct cacheitem *item); extern void cgit_print_docend(); extern void cgit_print_pageheader(char *title); +extern void cgit_print_repolist(struct cacheitem *item); + + +extern void cgit_repo_config_cb(const char *name, const char *value); #endif /* CGIT_H */ diff --git a/ui-repolist.c b/ui-repolist.c new file mode 100644 index 0000000..1fe7059 --- /dev/null +++ b/ui-repolist.c @@ -0,0 +1,60 @@ +/* ui-repolist.c: functions for generating the repolist page + * + * Copyright (C) 2006 Lars Hjemli + * + * Licensed under GNU General Public License v2 + * (see COPYING for full license text) + */ + +#include "cgit.h" + +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(); +} + + diff --git a/ui-shared.c b/ui-shared.c index e795043..cb8a8df 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -39,6 +39,27 @@ void cgit_print_error(char *msg) html_txt(msg); html("</div>\n"); } + +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); + } +} + void cgit_print_docstart(char *title, struct cacheitem *item) { html("Content-Type: text/html; charset=utf-8\n"); |