diff options
| author | Lars Hjemli <hjemli@gmail.com> | 2006-12-11 16:48:03 +0100 | 
|---|---|---|
| committer | Lars Hjemli <hjemli@gmail.com> | 2006-12-11 16:49:18 +0100 | 
| commit | 74620f12e4f7e91cb0a0b4ca731e07272d1b65f6 (patch) | |
| tree | 2e4db980535682c0a606d425b2937126d4b2c09b | |
| parent | 5a106eb09b9b5e189b96cc736046a92b054f6c7f (diff) | |
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
| @@ -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"); | 
