]> granicus.if.org Git - cgit/commitdiff
Add include-parameter to config files
authorLars Hjemli <hjemli@gmail.com>
Mon, 14 May 2007 21:40:33 +0000 (23:40 +0200)
committerLars Hjemli <hjemli@gmail.com>
Mon, 14 May 2007 21:40:33 +0000 (23:40 +0200)
This parameter can be used to include another config-file, like
a standalone repository listing.

Suggested in a patch by Kristian Høgsberg <krh@bitplanet.net>

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
cgitrc
parsing.c
shared.c

diff --git a/cgitrc b/cgitrc
index 019781eaab2c036eee13440365ac85ed807801c2..e7e731c9611ea41d48e38587b8fe14d4a2084e5d 100644 (file)
--- a/cgitrc
+++ b/cgitrc
 #cache-root=/var/cache/cgit
 
 
+## Include another config-file
+#include=/var/cgit/repolist
+
 ##
-## Time-To-Live settings: specifies how long (in minutes) different pages 
+## Time-To-Live settings: specifies how long (in minutes) different pages
 ## should be cached (0 for instant expiration, -1 for immortal pages)
 ##
 
@@ -74,7 +77,7 @@
 ## ttl for repo summary page
 #cache-repo-ttl=5
 
-## ttl for other dynamic pages 
+## ttl for other dynamic pages
 #cache-dynamic-ttl=5
 
 ## ttl for static pages (addressed by SHA-1)
index 332d61c50b47329347fc463f4159f8cbca4fc401..8e15e5aea9f32a0421c35ec0af944046c624d2ea 100644 (file)
--- a/parsing.c
+++ b/parsing.c
@@ -64,19 +64,21 @@ int read_config_line(FILE *f, char *line, const char **value, int bufsize)
 
 int cgit_read_config(const char *filename, configfn fn)
 {
-       int ret = 0, len;
+       static int nesting;
+       int len;
        char line[256];
        const char *value;
-       FILE *f = fopen(filename, "r");
+       FILE *f;
 
-       if (!f)
+       /* cancel the reading of yet another configfile after 16 invocations */
+       if (nesting++ > 16)
+               return -1;
+       if (!(f = fopen(filename, "r")))
                return -1;
-
        while((len = read_config_line(f, line, &value, sizeof(line))) > 0)
                (*fn)(line, value);
-
        fclose(f);
-       return ret;
+       return 0;
 }
 
 char *convert_query_hexchar(char *txt)
index ffecac888a76ea870df4811741d19cb61c1d662e..072bb6db4c6d0aa9d346f8f62a2aa5a47158ba3f 100644 (file)
--- a/shared.c
+++ b/shared.c
@@ -137,6 +137,8 @@ void cgit_global_config_cb(const char *name, const char *value)
                cgit_repo->snapshots = atoi(value);
        else if (cgit_repo && !strcmp(name, "repo.module-link"))
                cgit_repo->module_link= xstrdup(value);
+       else if (!strcmp(name, "include"))
+               cgit_read_config(value, cgit_global_config_cb);
 }
 
 void cgit_repo_config_cb(const char *name, const char *value)