/* 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, 0); 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 nowrap'>"); html("<tr>" "<th class='left'>Name</th>" "<th class='left'>Description</th>" "<th class='left'>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(); }