cgit

commit 5ec6e02bd1cc0c05b7cfd0d53371e7d176daec39

Author: Lars Hjemli <hjemli@gmail.com>

Add include-parameter to config files

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 | 7 +++++--
 parsing.c | 14 ++++++++------
 shared.c | 2 ++


diff --git a/cgitrc b/cgitrc
index 019781eaab2c036eee13440365ac85ed807801c2..e7e731c9611ea41d48e38587b8fe14d4a2084e5d 100644
--- a/cgitrc
+++ b/cgitrc
@@ -63,8 +63,11 @@ ## Root of cached output
 #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)




diff --git a/parsing.c b/parsing.c
index 332d61c50b47329347fc463f4159f8cbca4fc401..8e15e5aea9f32a0421c35ec0af944046c624d2ea 100644
--- a/parsing.c
+++ b/parsing.c
@@ -64,19 +64,21 @@ }
 
 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)




diff --git a/shared.c b/shared.c
index ffecac888a76ea870df4811741d19cb61c1d662e..072bb6db4c6d0aa9d346f8f62a2aa5a47158ba3f 100644
--- a/shared.c
+++ b/shared.c
@@ -137,6 +137,8 @@ 	else if (cgit_repo && !strcmp(name, "repo.snapshots"))
 		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)