summary refs log tree commit diff
diff options
context:
space:
mode:
authorLars Hjemli <hjemli@gmail.com>2009-08-09 13:22:00 +0200
committerLars Hjemli <hjemli@gmail.com>2009-08-09 13:22:00 +0200
commite976df27952ca1e450c1c3d420532ac9f5e3036b (patch)
tree2634538f3144c935d1579315d4de289e6c890f19
parentf35db1cd2b75aac6952aa07713e44ca01fd89727 (diff)
Add support for repo.commit-filter and repo.source-filter
These options can be used to override the default commit- and source-
filter settings per repository.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r--cgit.c4
-rw-r--r--cgit.h20
-rw-r--r--cgitrc.5.txt6
-rw-r--r--shared.c2
-rw-r--r--ui-commit.c16
-rw-r--r--ui-tree.c8
6 files changed, 35 insertions, 21 deletions
diff --git a/cgit.c b/cgit.c
index 2cda554..fd341b8 100644
--- a/cgit.c
+++ b/cgit.c
@@ -146,6 +146,10 @@ 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.commit-filter"))
+		ctx.repo->commit_filter = new_filter(value, 0);
+	else if (ctx.repo && !strcmp(name, "repo.source-filter"))
+		ctx.repo->source_filter = new_filter(value, 1);
 	else if (ctx.repo && !strcmp(name, "repo.readme") && value != NULL) {
 		if (*value == '/')
 			ctx.repo->readme = xstrdup(value);
diff --git a/cgit.h b/cgit.h
index 438301d..f10ba05 100644
--- a/cgit.h
+++ b/cgit.h
@@ -48,6 +48,15 @@ typedef void (*configfn)(const char *name, const char *value);
 typedef void (*filepair_fn)(struct diff_filepair *pair);
 typedef void (*linediff_fn)(char *line, int len);
 
+struct cgit_filter {
+	char *cmd;
+	char **argv;
+	int old_stdout;
+	int pipe_fh[2];
+	int pid;
+	int exitstatus;
+};
+
 struct cgit_repo {
 	char *url;
 	char *name;
@@ -64,6 +73,8 @@ struct cgit_repo {
 	int enable_log_linecount;
 	int max_stats;
 	time_t mtime;
+	struct cgit_filter *commit_filter;
+	struct cgit_filter *source_filter;
 };
 
 struct cgit_repolist {
@@ -129,15 +140,6 @@ struct cgit_query {
 	int showmsg;
 };
 
-struct cgit_filter {
-	char *cmd;
-	char **argv;
-	int old_stdout;
-	int pipe_fh[2];
-	int pid;
-	int exitstatus;
-};
-
 struct cgit_config {
 	char *agefile;
 	char *cache_root;
diff --git a/cgitrc.5.txt b/cgitrc.5.txt
index 2efd6aa..ffb3e0f 100644
--- a/cgitrc.5.txt
+++ b/cgitrc.5.txt
@@ -238,6 +238,9 @@ 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>.
+
 repo.defbranch::
 	The name of the default branch for this repository. If no such branch
 	exists in the repository, the first branch name (when sorted) is used
@@ -278,6 +281,9 @@ repo.snapshots::
 	A mask of allowed snapshot-formats for this repo, restricted by the
 	"snapshots" global setting. Default value: <snapshots>.
 
+repo.source-filter::
+	Override the default source-filter. Default value: <source-filter>.
+
 repo.url::
 	The relative url used to access the repository. This must be the first
 	setting specified for each repo. Default value: none.
diff --git a/shared.c b/shared.c
index 288cfa2..783604b 100644
--- a/shared.c
+++ b/shared.c
@@ -62,6 +62,8 @@ struct cgit_repo *cgit_add_repo(const char *url)
 	ret->module_link = ctx.cfg.module_link;
 	ret->readme = NULL;
 	ret->mtime = -1;
+	ret->commit_filter = ctx.cfg.commit_filter;
+	ret->source_filter = ctx.cfg.source_filter;
 	return ret;
 }
 
diff --git a/ui-commit.c b/ui-commit.c
index ee0e139..5815b58 100644
--- a/ui-commit.c
+++ b/ui-commit.c
@@ -89,19 +89,19 @@ void cgit_print_commit(char *hex)
 	}
 	html("</table>\n");
 	html("<div class='commit-subject'>");
-	if (ctx.cfg.commit_filter)
-		cgit_open_filter(ctx.cfg.commit_filter);
+	if (ctx.repo->commit_filter)
+		cgit_open_filter(ctx.repo->commit_filter);
 	html_txt(info->subject);
-	if (ctx.cfg.commit_filter)
-		cgit_close_filter(ctx.cfg.commit_filter);
+	if (ctx.repo->commit_filter)
+		cgit_close_filter(ctx.repo->commit_filter);
 	show_commit_decorations(commit);
 	html("</div>");
 	html("<div class='commit-msg'>");
-	if (ctx.cfg.commit_filter)
-		cgit_open_filter(ctx.cfg.commit_filter);
+	if (ctx.repo->commit_filter)
+		cgit_open_filter(ctx.repo->commit_filter);
 	html_txt(info->msg);
-	if (ctx.cfg.commit_filter)
-		cgit_close_filter(ctx.cfg.commit_filter);
+	if (ctx.repo->commit_filter)
+		cgit_close_filter(ctx.repo->commit_filter);
 	html("</div>");
 	if (parents < 3) {
 		if (parents)
diff --git a/ui-tree.c b/ui-tree.c
index 816e121..caf6a9e 100644
--- a/ui-tree.c
+++ b/ui-tree.c
@@ -22,12 +22,12 @@ static void print_text_buffer(const char *name, char *buf, unsigned long size)
 		"<a class='no' id='n%1$d' name='n%1$d' href='#n%1$d'>%1$d</a>\n";
 
 	html("<table summary='blob content' class='blob'>\n");
-	if (ctx.cfg.source_filter) {
+	if (ctx.repo->source_filter) {
 		html("<tr><td class='lines'><pre><code>");
-		ctx.cfg.source_filter->argv[1] = xstrdup(name);
-		cgit_open_filter(ctx.cfg.source_filter);
+		ctx.repo->source_filter->argv[1] = xstrdup(name);
+		cgit_open_filter(ctx.repo->source_filter);
 		write(STDOUT_FILENO, buf, size);
-		cgit_close_filter(ctx.cfg.source_filter);
+		cgit_close_filter(ctx.repo->source_filter);
 		html("</code></pre></td></tr></table>\n");
 		return;
 	}