Author: Lars Hjemli <hjemli@gmail.com>
Move functions for repolist output into ui-repolist.c Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Makefile | 2 cgit.c | 69 ----------------------------------------------------- cgit.h | 8 ++++++ ui-repolist.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++ ui-shared.c | 21 ++++++++++++++++
diff --git a/Makefile b/Makefile index a4291f7e144fb7fc2d62b228c608786c981e9242..81ebb1860a93254689d24f16c378e7c0bc1d8677 100644 --- a/Makefile +++ b/Makefile @@ -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 diff --git a/cgit.c b/cgit.c index 5438fa1d58e4a9ea90d0a6dc2493d7a08e304251..b3ff51293c84f890be0f646e4b4936a0e75b2fab 100644 --- a/cgit.c +++ b/cgit.c @@ -84,26 +84,6 @@ cgit_query_has_sha1 = 1; } } -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) { @@ -132,55 +112,6 @@ htmlf("*** bad ref %s", sha1_to_hex(sha1)); html("</td></tr>\n"); } 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() diff --git a/cgit.h b/cgit.h index e64fbd7ee5156d807ed320c8add12af810b5b494..bf5bd8d6837bb812b0bd1254d186a937dd9bce8a 100644 --- a/cgit.h +++ b/cgit.h @@ -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 0000000000000000000000000000000000000000..1fe70590452dc997d6c60fe7a62fcb374cc12156 --- /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 e795043595a4d9a4a403eb3ee8db37d5b2d405a6..cb8a8dffadde3bf43f81186496b65210e7aaadf3 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -39,6 +39,27 @@ html(""); 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");