From b4dc93dc76fabf043b7679f8fcab91cdb1f418c6 Mon Sep 17 00:00:00 2001
From: Lars Hjemli
Date: Thu, 20 Aug 2009 17:42:14 +0200
Subject: cgitrc.5.txt: document repo.scan and cache-scanrc-ttl

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
---
 cgitrc.5.txt | 9 +++++++++
 1 file changed, 9 insertions(+)

(limited to 'cgitrc.5.txt')

diff --git a/cgitrc.5.txt b/cgitrc.5.txt
index 0d18290..68ae2ed 100644
--- a/cgitrc.5.txt
+++ b/cgitrc.5.txt
@@ -54,6 +54,10 @@ cache-root-ttl::
 	Number which specifies the time-to-live, in minutes, for the cached
 	version of the repository index page. Default value: "5".
 
+cache-scanrc-ttl::
+	Number which specifies the time-to-live, in minutes, for the result
+	of scanning a path for git repositories. Default value: "15".
+
 cache-size::
 	The maximum number of entries in the cgit cache. Default value: "0"
 	(i.e. caching is disabled).
@@ -199,6 +203,11 @@ repo.group::
 	A value for the current repository group, which all repositories
 	specified after this setting will inherit. Default value: none.
 
+repo.scan::
+	A path which will be scanned for repositories. If caching is enabled,
+	the result will be cached as a cgitrc include-file in the cache
+	directory. Default value: none. See also: cache-scanrc-ttl.
+
 robots::
 	Text used as content for the "robots" meta-tag. Default value:
 	"index, nofollow".
-- 
cgit v1.2.3-54-g00ecf


From 00466376922e2f7db02b3c335d46af5eb8991c49 Mon Sep 17 00:00:00 2001
From: Lars Hjemli
Date: Sun, 23 Aug 2009 19:35:56 +0200
Subject: Rename 'repo.scan' to 'scan-path'

The 'repo.' prefix will soon be reserved for repo-specific config
options.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
---
 cgit.c       | 10 +++++-----
 cgitrc.5.txt | 10 +++++-----
 2 files changed, 10 insertions(+), 10 deletions(-)

(limited to 'cgitrc.5.txt')

diff --git a/cgit.c b/cgit.c
index 594b950..6ece411 100644
--- a/cgit.c
+++ b/cgit.c
@@ -118,6 +118,11 @@ void config_cb(const char *name, const char *value)
 		ctx.cfg.max_repo_count = atoi(value);
 	else if (!strcmp(name, "max-commit-count"))
 		ctx.cfg.max_commit_count = atoi(value);
+	else if (!strcmp(name, "scan-path"))
+		if (!ctx.cfg.nocache && ctx.cfg.cache_size)
+			process_cached_repolist(value);
+		else
+			scan_tree(value);
 	else if (!strcmp(name, "source-filter"))
 		ctx.cfg.source_filter = new_filter(value, 1);
 	else if (!strcmp(name, "summary-log"))
@@ -140,11 +145,6 @@ void config_cb(const char *name, const char *value)
 		add_mimetype(name + 9, value);
 	else if (!strcmp(name, "repo.group"))
 		ctx.cfg.repo_group = xstrdup(value);
-	else if (!strcmp(name, "repo.scan"))
-		if (!ctx.cfg.nocache && ctx.cfg.cache_size)
-			process_cached_repolist(value);
-		else
-			scan_tree(value);
 	else if (!strcmp(name, "repo.url"))
 		ctx.repo = cgit_add_repo(value);
 	else if (!strcmp(name, "repo.name"))
diff --git a/cgitrc.5.txt b/cgitrc.5.txt
index 68ae2ed..2abbd41 100644
--- a/cgitrc.5.txt
+++ b/cgitrc.5.txt
@@ -203,11 +203,6 @@ repo.group::
 	A value for the current repository group, which all repositories
 	specified after this setting will inherit. Default value: none.
 
-repo.scan::
-	A path which will be scanned for repositories. If caching is enabled,
-	the result will be cached as a cgitrc include-file in the cache
-	directory. Default value: none. See also: cache-scanrc-ttl.
-
 robots::
 	Text used as content for the "robots" meta-tag. Default value:
 	"index, nofollow".
@@ -225,6 +220,11 @@ root-title::
 	Text printed as heading on the repository index page. Default value:
 	"Git Repository Browser".
 
+scan-path::
+	A path which will be scanned for repositories. If caching is enabled,
+	the result will be cached as a cgitrc include-file in the cache
+	directory. Default value: none. See also: cache-scanrc-ttl.
+
 snapshots::
 	Text which specifies the default set of snapshot formats generated by
 	cgit. The value is a space-separated list of zero or more of the
-- 
cgit v1.2.3-54-g00ecf


From e7af002d5c405c82652f739d08ced3908d1f57e7 Mon Sep 17 00:00:00 2001
From: Lars Hjemli
Date: Sun, 23 Aug 2009 22:58:39 +0200
Subject: Introduce 'section' as canonical spelling for 'repo.group'

The 'repo.' prefix should be reserved for repo-specific options, but
the option 'repo.group' must still be honored to stay backwards
compatible.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
---
 cgit.c        |  4 ++--
 cgit.css      |  2 +-
 cgit.h        |  4 ++--
 cgitrc.5.txt  |  9 +++++++--
 shared.c      |  2 +-
 ui-repolist.c | 18 +++++++++---------
 6 files changed, 22 insertions(+), 17 deletions(-)

(limited to 'cgitrc.5.txt')

diff --git a/cgit.c b/cgit.c
index a792fe4..013a0fe 100644
--- a/cgit.c
+++ b/cgit.c
@@ -143,8 +143,8 @@ void config_cb(const char *name, const char *value)
 		ctx.cfg.local_time = atoi(value);
 	else if (!prefixcmp(name, "mimetype."))
 		add_mimetype(name + 9, value);
-	else if (!strcmp(name, "repo.group"))
-		ctx.cfg.repo_group = xstrdup(value);
+	else if (!strcmp(name, "section") || !strcmp(name, "repo.group"))
+		ctx.cfg.section = xstrdup(value);
 	else if (!strcmp(name, "repo.url"))
 		ctx.repo = cgit_add_repo(value);
 	else if (!strcmp(name, "repo.name"))
diff --git a/cgit.css b/cgit.css
index e3b32e7..3c65114 100644
--- a/cgit.css
+++ b/cgit.css
@@ -429,7 +429,7 @@ table.diff td div.del {
 	text-align: right;
 }
 
-table.list td.repogroup {
+table.list td.reposection {
 	font-style: italic;
 	color: #888;
 }
diff --git a/cgit.h b/cgit.h
index 5659580..fc7c7d5 100644
--- a/cgit.h
+++ b/cgit.h
@@ -65,9 +65,9 @@ struct cgit_repo {
 	char *desc;
 	char *owner;
 	char *defbranch;
-	char *group;
 	char *module_link;
 	char *readme;
+	char *section;
 	char *clone_url;
 	int snapshots;
 	int enable_log_filecount;
@@ -156,12 +156,12 @@ struct cgit_config {
 	char *logo;
 	char *logo_link;
 	char *module_link;
-	char *repo_group;
 	char *robots;
 	char *root_title;
 	char *root_desc;
 	char *root_readme;
 	char *script_name;
+	char *section;
 	char *virtual_root;
 	int cache_size;
 	int cache_dynamic_ttl;
diff --git a/cgitrc.5.txt b/cgitrc.5.txt
index 2abbd41..4d009f9 100644
--- a/cgitrc.5.txt
+++ b/cgitrc.5.txt
@@ -200,8 +200,8 @@ renamelimit::
 	  `man git-diff`). Default value: "-1".
 
 repo.group::
-	A value for the current repository group, which all repositories
-	specified after this setting will inherit. Default value: none.
+	Legacy alias for 'section' which will be deprecated starting with
+	cgit-1.0.
 
 robots::
 	Text used as content for the "robots" meta-tag. Default value:
@@ -225,6 +225,11 @@ scan-path::
 	the result will be cached as a cgitrc include-file in the cache
 	directory. Default value: none. See also: cache-scanrc-ttl.
 
+section:
+	The name of the current repository section - all repositories defined
+	after this option will inherit the current section name. Default value:
+	none.
+
 snapshots::
 	Text which specifies the default set of snapshot formats generated by
 	cgit. The value is a space-separated list of zero or more of the
diff --git a/shared.c b/shared.c
index 4cb9573..9475581 100644
--- a/shared.c
+++ b/shared.c
@@ -53,7 +53,7 @@ struct cgit_repo *cgit_add_repo(const char *url)
 	ret->path = NULL;
 	ret->desc = "[no description]";
 	ret->owner = NULL;
-	ret->group = ctx.cfg.repo_group;
+	ret->section = ctx.cfg.section;
 	ret->defbranch = "master";
 	ret->snapshots = ctx.cfg.snapshots;
 	ret->enable_log_filecount = ctx.cfg.enable_log_filecount;
diff --git a/ui-repolist.c b/ui-repolist.c
index 7c7aa9b..4dea3b3 100644
--- a/ui-repolist.c
+++ b/ui-repolist.c
@@ -203,7 +203,7 @@ int sort_repolist(char *field)
 void cgit_print_repolist()
 {
 	int i, columns = 4, hits = 0, header = 0;
-	char *last_group = NULL;
+	char *last_section = NULL;
 	int sorted = 0;
 
 	if (ctx.cfg.enable_index_links)
@@ -233,18 +233,18 @@ void cgit_print_repolist()
 		if (!header++)
 			print_header(columns);
 		if (!sorted &&
-		    ((last_group == NULL && ctx.repo->group != NULL) ||
-		    (last_group != NULL && ctx.repo->group == NULL) ||
-		    (last_group != NULL && ctx.repo->group != NULL &&
-		     strcmp(ctx.repo->group, last_group)))) {
-			htmlf("<tr class='nohover'><td colspan='%d' class='repogroup'>",
+		    ((last_section == NULL && ctx.repo->section != NULL) ||
+		    (last_section != NULL && ctx.repo->section == NULL) ||
+		    (last_section != NULL && ctx.repo->section != NULL &&
+		     strcmp(ctx.repo->section, last_section)))) {
+			htmlf("<tr class='nohover'><td colspan='%d' class='reposection'>",
 			      columns);
-			html_txt(ctx.repo->group);
+			html_txt(ctx.repo->section);
 			html("</td></tr>");
-			last_group = ctx.repo->group;
+			last_section = ctx.repo->section;
 		}
 		htmlf("<tr><td class='%s'>",
-		      !sorted && ctx.repo->group ? "sublevel-repo" : "toplevel-repo");
+		      !sorted && ctx.repo->section ? "sublevel-repo" : "toplevel-repo");
 		cgit_summary_link(ctx.repo->name, ctx.repo->name, NULL, NULL);
 		html("</td><td>");
 		html_link_open(cgit_repourl(ctx.repo->url), NULL, NULL);
-- 
cgit v1.2.3-54-g00ecf


From 39398545787179bc8075d64a443f9da3845c4f67 Mon Sep 17 00:00:00 2001
From: Lars Hjemli
Date: Sun, 23 Aug 2009 23:00:28 +0200
Subject: Add config option 'repo.section'

This option can be used to specify the section name for the current
repository.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
---
 cgit.c       | 2 ++
 cgitrc.5.txt | 3 +++
 2 files changed, 5 insertions(+)

(limited to 'cgitrc.5.txt')

diff --git a/cgit.c b/cgit.c
index 013a0fe..7264b8e 100644
--- a/cgit.c
+++ b/cgit.c
@@ -169,6 +169,8 @@ void config_cb(const char *name, const char *value)
 		ctx.repo->max_stats = cgit_find_stats_period(value, NULL);
 	else if (ctx.repo && !strcmp(name, "repo.module-link"))
 		ctx.repo->module_link= xstrdup(value);
+	else if (ctx.repo && !strcmp(name, "repo.section"))
+		ctx.repo->section = xstrdup(value);
 	else if (ctx.repo && !strcmp(name, "repo.about-filter"))
 		ctx.repo->about_filter = new_filter(value, 0);
 	else if (ctx.repo && !strcmp(name, "repo.commit-filter"))
diff --git a/cgitrc.5.txt b/cgitrc.5.txt
index 4d009f9..e99c9f7 100644
--- a/cgitrc.5.txt
+++ b/cgitrc.5.txt
@@ -315,6 +315,9 @@ repo.snapshots::
 	A mask of allowed snapshot-formats for this repo, restricted by the
 	"snapshots" global setting. Default value: <snapshots>.
 
+repo.section::
+	Override the current section for this repository. Default value: none.
+
 repo.source-filter::
 	Override the default source-filter. Default value: <source-filter>.
 
-- 
cgit v1.2.3-54-g00ecf


From 74061ed5f03e72796450aa3b8ca1cf6ced5d59e2 Mon Sep 17 00:00:00 2001
From: Lars Hjemli
Date: Mon, 24 Aug 2009 00:04:58 +0200
Subject: Add support for repo-local cgitrc file

When recursively scanning a directory tree looking for git repositories,
cgit will now parse cgitrc files found within such repositories.

The repo-specific config files can include any repo-specific options
except 'repo.url' and 'repo.path'. Also, in such config files the 'repo.'
prefix can not be used, i.e. the valid options then becomes:
* name
* clone-url
* desc
* ower
* defbranch
* snapshots
* enable-log-filecount
* enable-log-linecount
* max-stats
* module-link
* section
* about-filter
* commit-filter
* source-filter
* readme

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
---
 cgit.c       |  8 ++++----
 cgit.h       |  3 +++
 cgitrc.5.txt |  9 +++++++++
 scan-tree.c  | 30 ++++++++++++++++++++++--------
 scan-tree.h  |  2 +-
 5 files changed, 39 insertions(+), 13 deletions(-)

(limited to 'cgitrc.5.txt')

diff --git a/cgit.c b/cgit.c
index 90ae124..e281aa9 100644
--- a/cgit.c
+++ b/cgit.c
@@ -168,7 +168,7 @@ void config_cb(const char *name, const char *value)
 		if (!ctx.cfg.nocache && ctx.cfg.cache_size)
 			process_cached_repolist(value);
 		else
-			scan_tree(value);
+			scan_tree(value, repo_config);
 	else if (!strcmp(name, "source-filter"))
 		ctx.cfg.source_filter = new_filter(value, 1);
 	else if (!strcmp(name, "summary-log"))
@@ -476,7 +476,7 @@ static int generate_cached_repolist(const char *path, const char *cached_rc)
 		return errno;
 	}
 	idx = cgit_repolist.count;
-	scan_tree(path);
+	scan_tree(path, repo_config);
 	print_repolist(f, &cgit_repolist, idx);
 	if (rename(locked_rc, cached_rc))
 		fprintf(stderr, "[cgit] Error renaming %s to %s: %s (%d)\n",
@@ -500,7 +500,7 @@ static void process_cached_repolist(const char *path)
 		 * invoke scan_tree manually.
 		 */
 		if (generate_cached_repolist(path, cached_rc))
-			scan_tree(path);
+			scan_tree(path, repo_config);
 		return;
 	}
 
@@ -559,7 +559,7 @@ static void cgit_parse_args(int argc, const char **argv)
 		if (!strncmp(argv[i], "--scan-tree=", 12) ||
 		    !strncmp(argv[i], "--scan-path=", 12)) {
 			scan++;
-			scan_tree(argv[i] + 12);
+			scan_tree(argv[i] + 12, repo_config);
 		}
 	}
 	if (scan) {
diff --git a/cgit.h b/cgit.h
index fc7c7d5..3359be9 100644
--- a/cgit.h
+++ b/cgit.h
@@ -79,6 +79,9 @@ struct cgit_repo {
 	struct cgit_filter *source_filter;
 };
 
+typedef void (*repo_config_fn)(struct cgit_repo *repo, const char *name,
+	      const char *value);
+
 struct cgit_repolist {
 	int length;
 	int count;
diff --git a/cgitrc.5.txt b/cgitrc.5.txt
index e99c9f7..df494aa 100644
--- a/cgitrc.5.txt
+++ b/cgitrc.5.txt
@@ -326,6 +326,15 @@ repo.url::
 	setting specified for each repo. Default value: none.
 
 
+REPOSITORY-SPECIFIC CGITRC FILE
+-------------------------------
+When the option 'scan-path' is used to auto-discover git repositories, cgit
+will try to parse the file 'cgitrc' within any found repository. Such a repo-
+specific config file may contain any of the repo-specific options described
+above, except 'repo.url' and 'repo.path'. Also, in a repo-specific config
+file, the 'repo.' prefix is dropped from the config option names.
+
+
 EXAMPLE CGITRC FILE
 -------------------
 
diff --git a/scan-tree.c b/scan-tree.c
index 67f4550..dbca797 100644
--- a/scan-tree.c
+++ b/scan-tree.c
@@ -1,4 +1,5 @@
 #include "cgit.h"
+#include "configfile.h"
 #include "html.h"
 
 #define MAX_PATH 4096
@@ -35,9 +36,16 @@ static int is_git_dir(const char *path)
 	return 1;
 }
 
-static void add_repo(const char *base, const char *path)
+struct cgit_repo *repo;
+repo_config_fn config_fn;
+
+static void repo_config(const char *name, const char *value)
+{
+	config_fn(repo, name, value);
+}
+
+static void add_repo(const char *base, const char *path, repo_config_fn fn)
 {
-	struct cgit_repo *repo;
 	struct stat st;
 	struct passwd *pwd;
 	char *p;
@@ -76,9 +84,15 @@ static void add_repo(const char *base, const char *path)
 	p = fmt("%s/README.html", path);
 	if (!stat(p, &st))
 		repo->readme = "README.html";
+
+	p = fmt("%s/cgitrc", path);
+	if (!stat(p, &st)) {
+		config_fn = fn;
+		parse_configfile(xstrdup(p), &repo_config);
+	}
 }
 
-static void scan_path(const char *base, const char *path)
+static void scan_path(const char *base, const char *path, repo_config_fn fn)
 {
 	DIR *dir;
 	struct dirent *ent;
@@ -86,11 +100,11 @@ static void scan_path(const char *base, const char *path)
 	struct stat st;
 
 	if (is_git_dir(path)) {
-		add_repo(base, path);
+		add_repo(base, path, fn);
 		return;
 	}
 	if (is_git_dir(fmt("%s/.git", path))) {
-		add_repo(base, fmt("%s/.git", path));
+		add_repo(base, fmt("%s/.git", path), fn);
 		return;
 	}
 	dir = opendir(path);
@@ -120,13 +134,13 @@ static void scan_path(const char *base, const char *path)
 			continue;
 		}
 		if (S_ISDIR(st.st_mode))
-			scan_path(base, buf);
+			scan_path(base, buf, fn);
 		free(buf);
 	}
 	closedir(dir);
 }
 
-void scan_tree(const char *path)
+void scan_tree(const char *path, repo_config_fn fn)
 {
-	scan_path(path, path);
+	scan_path(path, path, fn);
 }
diff --git a/scan-tree.h b/scan-tree.h
index b103b16..11539f4 100644
--- a/scan-tree.h
+++ b/scan-tree.h
@@ -1,3 +1,3 @@
 
 
-extern void scan_tree(const char *path);
+extern void scan_tree(const char *path, repo_config_fn fn);
-- 
cgit v1.2.3-54-g00ecf


From 007df98d2114fac4e9134cd7bc7e2960d0d730b4 Mon Sep 17 00:00:00 2001
From: Lars Hjemli
Date: Mon, 24 Aug 2009 07:51:48 +0200
Subject: cgitrc.5.txt: fix markup errors

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
---
 cgitrc.5.txt | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

(limited to 'cgitrc.5.txt')

diff --git a/cgitrc.5.txt b/cgitrc.5.txt
index df494aa..46df291 100644
--- a/cgitrc.5.txt
+++ b/cgitrc.5.txt
@@ -200,8 +200,8 @@ renamelimit::
 	  `man git-diff`). Default value: "-1".
 
 repo.group::
-	Legacy alias for 'section' which will be deprecated starting with
-	cgit-1.0.
+	Legacy alias for "section". This option is deprecated and will not be
+	supported in cgit-1.0.
 
 robots::
 	Text used as content for the "robots" meta-tag. Default value:
@@ -225,7 +225,7 @@ scan-path::
 	the result will be cached as a cgitrc include-file in the cache
 	directory. Default value: none. See also: cache-scanrc-ttl.
 
-section:
+section::
 	The name of the current repository section - all repositories defined
 	after this option will inherit the current section name. Default value:
 	none.
@@ -316,7 +316,8 @@ repo.snapshots::
 	"snapshots" global setting. Default value: <snapshots>.
 
 repo.section::
-	Override the current section for this repository. Default value: none.
+	Override the current section name for this repository. Default value:
+	none.
 
 repo.source-filter::
 	Override the default source-filter. Default value: <source-filter>.
@@ -328,11 +329,11 @@ repo.url::
 
 REPOSITORY-SPECIFIC CGITRC FILE
 -------------------------------
-When the option 'scan-path' is used to auto-discover git repositories, cgit
-will try to parse the file 'cgitrc' within any found repository. Such a repo-
-specific config file may contain any of the repo-specific options described
-above, except 'repo.url' and 'repo.path'. Also, in a repo-specific config
-file, the 'repo.' prefix is dropped from the config option names.
+When the option "scan-path" is used to auto-discover git repositories, cgit
+will try to parse the file "cgitrc" within any found repository. Such a
+repo-specific config file may contain any of the repo-specific options
+described above, except "repo.url" and "repo.path". Also, in a repo-specific
+config file, the "repo." prefix is dropped from the config option names.
 
 
 EXAMPLE CGITRC FILE
-- 
cgit v1.2.3-54-g00ecf


From 2273c2c821bfc77d492d7e97ae38f162d7fc91aa Mon Sep 17 00:00:00 2001
From: Lars Hjemli
Date: Mon, 24 Aug 2009 08:53:21 +0200
Subject: Add config option 'enable-filter-overrides'

This option must be enabled if repo-specific cgitrc files should be
allowed to override any of the 'filter' options.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
---
 cgit.c       | 15 +++++++++------
 cgit.h       |  1 +
 cgitrc.5.txt | 21 ++++++++++++++++-----
 3 files changed, 26 insertions(+), 11 deletions(-)

(limited to 'cgitrc.5.txt')

diff --git a/cgit.c b/cgit.c
index 167b5dd..f1ea03c 100644
--- a/cgit.c
+++ b/cgit.c
@@ -66,17 +66,18 @@ void repo_config(struct cgit_repo *repo, const char *name, const char *value)
 		repo->module_link= xstrdup(value);
 	else if (!strcmp(name, "section"))
 		repo->section = xstrdup(value);
-	else if (!strcmp(name, "about-filter"))
-		repo->about_filter = new_filter(value, 0);
-	else if (!strcmp(name, "commit-filter"))
-		repo->commit_filter = new_filter(value, 0);
-	else if (!strcmp(name, "source-filter"))
-		repo->source_filter = new_filter(value, 1);
 	else if (!strcmp(name, "readme") && value != NULL) {
 		if (*value == '/')
 			ctx.repo->readme = xstrdup(value);
 		else
 			ctx.repo->readme = xstrdup(fmt("%s/%s", ctx.repo->path, value));
+	} else if (ctx.cfg.enable_filter_overrides) {
+		if (!strcmp(name, "about-filter"))
+			repo->about_filter = new_filter(value, 0);
+		else if (!strcmp(name, "commit-filter"))
+			repo->commit_filter = new_filter(value, 0);
+		else if (!strcmp(name, "source-filter"))
+			repo->source_filter = new_filter(value, 1);
 	}
 }
 
@@ -128,6 +129,8 @@ void config_cb(const char *name, const char *value)
 		ctx.cfg.noheader = atoi(value);
 	else if (!strcmp(name, "snapshots"))
 		ctx.cfg.snapshots = cgit_parse_snapshots_mask(value);
+	else if (!strcmp(name, "enable-filter-overrides"))
+		ctx.cfg.enable_filter_overrides = atoi(value);
 	else if (!strcmp(name, "enable-index-links"))
 		ctx.cfg.enable_index_links = atoi(value);
 	else if (!strcmp(name, "enable-log-filecount"))
diff --git a/cgit.h b/cgit.h
index 3359be9..ef109aa 100644
--- a/cgit.h
+++ b/cgit.h
@@ -174,6 +174,7 @@ struct cgit_config {
 	int cache_scanrc_ttl;
 	int cache_static_ttl;
 	int embedded;
+	int enable_filter_overrides;
 	int enable_index_links;
 	int enable_log_filecount;
 	int enable_log_linecount;
diff --git a/cgitrc.5.txt b/cgitrc.5.txt
index 46df291..617b7c3 100644
--- a/cgitrc.5.txt
+++ b/cgitrc.5.txt
@@ -88,6 +88,10 @@ embedded::
 	suitable for embedding in other html pages. Default value: none. See
 	also: "noheader".
 	
+enable-filter-overrides::
+	Flag which, when set to "1", allows all filter settings to be
+	overridden in repository-specific cgitrc files. Default value: none.
+
 enable-index-links::
 	Flag which, when set to "1", will make cgit generate extra links for
 	each repo in the repository index (specifically, to the "summary",
@@ -266,14 +270,16 @@ virtual-root::
 REPOSITORY SETTINGS
 -------------------
 repo.about-filter::
-	Override the default about-filter. Default value: <about-filter>.
+	Override the default about-filter. Default value: none. See also:
+	"enable-filter-overrides".
 
 repo.clone-url::
 	A list of space-separated urls which can be used to clone this repo.
 	Default value: none.
 
 repo.commit-filter::
-	Override the default commit-filter. Default value: <commit-filter>.
+	Override the default commit-filter. Default value: none. See also:
+	"enable-filter-overrides".
 
 repo.defbranch::
 	The name of the default branch for this repository. If no such branch
@@ -320,7 +326,8 @@ repo.section::
 	none.
 
 repo.source-filter::
-	Override the default source-filter. Default value: <source-filter>.
+	Override the default source-filter. Default value: none. See also:
+	"enable-filter-overrides".
 
 repo.url::
 	The relative url used to access the repository. This must be the first
@@ -332,8 +339,12 @@ REPOSITORY-SPECIFIC CGITRC FILE
 When the option "scan-path" is used to auto-discover git repositories, cgit
 will try to parse the file "cgitrc" within any found repository. Such a
 repo-specific config file may contain any of the repo-specific options
-described above, except "repo.url" and "repo.path". Also, in a repo-specific
-config file, the "repo." prefix is dropped from the config option names.
+described above, except "repo.url" and "repo.path". Additionally, the "filter"
+options are only acknowledged in repo-specific config files when
+"enable-filter-overrides" is set to "1".
+
+Note: the "repo." prefix is dropped from the option names in repo-specific
+config files, e.g. "repo.desc" becomes "desc".
 
 
 EXAMPLE CGITRC FILE
-- 
cgit v1.2.3-54-g00ecf