summaryrefslogtreecommitdiffabout
authorLars Hjemli <hjemli@gmail.com>2009-08-09 11:22:00 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2009-08-09 11:22:00 (UTC)
commite976df27952ca1e450c1c3d420532ac9f5e3036b (patch) (side-by-side diff)
tree2634538f3144c935d1579315d4de289e6c890f19
parentf35db1cd2b75aac6952aa07713e44ca01fd89727 (diff)
downloadcgit-e976df27952ca1e450c1c3d420532ac9f5e3036b.zip
cgit-e976df27952ca1e450c1c3d420532ac9f5e3036b.tar.gz
cgit-e976df27952ca1e450c1c3d420532ac9f5e3036b.tar.bz2
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>
Diffstat (more/less context) (ignore whitespace changes)
-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
@@ -147,4 +147,8 @@ void config_cb(const char *name, const char *value)
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 == '/')
diff --git a/cgit.h b/cgit.h
index 438301d..f10ba05 100644
--- a/cgit.h
+++ b/cgit.h
@@ -49,4 +49,13 @@ 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;
@@ -65,4 +74,6 @@ struct cgit_repo {
int max_stats;
time_t mtime;
+ struct cgit_filter *commit_filter;
+ struct cgit_filter *source_filter;
};
@@ -130,13 +141,4 @@ struct cgit_query {
};
-struct cgit_filter {
- char *cmd;
- char **argv;
- int old_stdout;
- int pipe_fh[2];
- int pid;
- int exitstatus;
-};
-
struct cgit_config {
char *agefile;
diff --git a/cgitrc.5.txt b/cgitrc.5.txt
index 2efd6aa..ffb3e0f 100644
--- a/cgitrc.5.txt
+++ b/cgitrc.5.txt
@@ -239,4 +239,7 @@ repo.clone-url::
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
@@ -279,4 +282,7 @@ repo.snapshots::
"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
diff --git a/shared.c b/shared.c
index 288cfa2..783604b 100644
--- a/shared.c
+++ b/shared.c
@@ -63,4 +63,6 @@ struct cgit_repo *cgit_add_repo(const char *url)
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
@@ -90,17 +90,17 @@ 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) {
diff --git a/ui-tree.c b/ui-tree.c
index 816e121..caf6a9e 100644
--- a/ui-tree.c
+++ b/ui-tree.c
@@ -23,10 +23,10 @@ static void print_text_buffer(const char *name, char *buf, unsigned long size)
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;