author | Lars Hjemli <hjemli@gmail.com> | 2006-12-11 15:48:03 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2006-12-11 15:49:18 (UTC) |
commit | 74620f12e4f7e91cb0a0b4ca731e07272d1b65f6 (patch) (side-by-side diff) | |
tree | 2e4db980535682c0a606d425b2937126d4b2c09b | |
parent | 5a106eb09b9b5e189b96cc736046a92b054f6c7f (diff) | |
download | cgit-74620f12e4f7e91cb0a0b4ca731e07272d1b65f6.zip cgit-74620f12e4f7e91cb0a0b4ca731e07272d1b65f6.tar.gz cgit-74620f12e4f7e91cb0a0b4ca731e07272d1b65f6.tar.bz2 |
Move functions for repolist output into ui-repolist.c
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-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
@@ -1,20 +1,20 @@ CGIT_VERSION = 0.1-pre INSTALL_BIN = /var/www/htdocs/cgit.cgi 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 all: cgit install: all install cgit $(INSTALL_BIN) install cgit.css $(INSTALL_CSS) rm -rf $(CACHE_ROOT)/* cgit: cgit.c cgit.h git.h $(OBJECTS) $(CC) $(CFLAGS) -DCGIT_VERSION='"$(CGIT_VERSION)"' cgit.c -o cgit \ @@ -75,44 +75,24 @@ void cgit_querystring_cb(const char *name, const char *value) cgit_query_repo = xstrdup(value); else if (!strcmp(name, "p")) cgit_query_page = xstrdup(value); else if (!strcmp(name, "h")) { cgit_query_head = xstrdup(value); cgit_query_has_symref = 1; } else if (!strcmp(name, "id")) { cgit_query_sha1 = xstrdup(value); 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) { struct commit *commit; char buf[256], *url; commit = lookup_commit(sha1); if (commit && !parse_commit(commit)){ html("<tr><td>"); url = cgit_pageurl(cgit_query_repo, "log", fmt("h=%s", refname)); html_link_open(url, NULL, NULL); @@ -125,73 +105,24 @@ static int cgit_print_branch_cb(const char *refname, const unsigned char *sha1, html_txt(buf); html("</td></tr>\n"); } else { html("<tr><td>"); html_txt(buf); html("</td><td>"); 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() { html("<table class='list'>"); html("<tr><th>Branch name</th><th>Head commit</th></tr>\n"); for_each_branch_ref(cgit_print_branch_cb, NULL); html("</table>"); } static int get_one_line(char *txt) { char *t; @@ -56,19 +56,27 @@ extern void html_attr(char *txt); extern void html_link_open(char *url, char *title, char *class); extern void html_link_close(void); extern int cgit_read_config(const char *filename, configfn fn); extern int cgit_parse_query(char *txt, configfn fn); extern void cache_prepare(struct cacheitem *item); extern int cache_lock(struct cacheitem *item); 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 --- a/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 @@ -30,24 +30,45 @@ static int ttl_seconds(int ttl) if (ttl<0) return 60 * 60 * 24 * 365; else return ttl * 60; } void cgit_print_error(char *msg) { html("<div class='error'>"); 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"); htmlf("Last-Modified: %s\n", http_date(item->st.st_mtime)); htmlf("Expires: %s\n", http_date(item->st.st_mtime + ttl_seconds(item->ttl))); html("\n"); html(cgit_doctype); html("<html>\n"); html("<head>\n"); html("<title>"); html_txt(title); |