diff options
author | Lars Hjemli <hjemli@gmail.com> | 2007-02-03 15:02:55 +0100 |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2007-02-04 21:47:46 +0100 |
commit | ce1c7336e5b3e3ebe8f8c9029c405aedec98c208 (patch) | |
tree | b51a59a9552b32519cf694c0f5dc68c5a739069c /ui-repolist.c | |
parent | ebd7b0fbc378e9beca0b275c5cd9150c930bde56 (diff) | |
download | cgit-pink-ce1c7336e5b3e3ebe8f8c9029c405aedec98c208.tar.gz cgit-pink-ce1c7336e5b3e3ebe8f8c9029c405aedec98c208.zip |
Read repo-info from /etc/cgitrc
This makes cgit read all repo-info from the configfile, instead of scanning for possible git-dirs below a common root path. This is primarily done to get better security (separate physical path from logical repo-name). In /etc/cgitrc each repo is registered with the following keys: repo.url repo.name repo.path repo.desc repo.owner Note: *Required keys are repo.url and repo.path, all others are optional *Each occurrence of repo.url starts a new repository registration *Default value for repo.name is taken from repo.url *The value of repo.url cannot contain characters with special meaning for urls (i.e. one of /?%&), while repo.name can contain anything. Example: repo.url=cgit-pub repo.name=cgit/public repo.path=/pub/git/cgit repo.desc=My public cgit repo repo.owner=Lars Hjemli repo.url=cgit-priv repo.name=cgit/private repo.path=/home/larsh/src/cgit/.git repo.desc=My private cgit repo repo.owner=Lars Hjemli Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Diffstat (limited to 'ui-repolist.c')
-rw-r--r-- | ui-repolist.c | 39 |
1 files changed, 8 insertions, 31 deletions
diff --git a/ui-repolist.c b/ui-repolist.c index bd4af59..011ec95 100644 --- a/ui-repolist.c +++ b/ui-repolist.c @@ -10,54 +10,31 @@ void cgit_print_repolist(struct cacheitem *item) { - DIR *d; - struct dirent *de; - struct stat st; - char *name; + struct repoinfo *repo; + int i; - 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 class='nohover'>" "<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; + for (i=0; i<cgit_repolist.count; i++) { + repo = &cgit_repolist.repos[i]; html("<tr><td>"); - html_link_open(cgit_repourl(de->d_name), NULL, NULL); - html_txt(cgit_repo_name); + html_link_open(cgit_repourl(repo->url), NULL, NULL); + html_txt(repo->name); html_link_close(); html("</td><td>"); - html_txt(cgit_repo_desc); + html_txt(repo->desc); html("</td><td>"); - html_txt(cgit_repo_owner); + html_txt(repo->owner); html("</td></tr>\n"); } - closedir(d); html("</table>"); cgit_print_docend(); } - - |