]> git.cameronkatri.com Git - cgit.git/commitdiff
Add support for repo.commit-filter and repo.source-filter
authorLars Hjemli <hjemli@gmail.com>
Sun, 9 Aug 2009 11:22:00 +0000 (13:22 +0200)
committerLars Hjemli <hjemli@gmail.com>
Sun, 9 Aug 2009 11:22:00 +0000 (13:22 +0200)
These options can be used to override the default commit- and source-
filter settings per repository.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
cgit.c
cgit.h
cgitrc.5.txt
shared.c
ui-commit.c
ui-tree.c

diff --git a/cgit.c b/cgit.c
index 2cda554ad1efe9b72a8c4063465f55734569e938..fd341b83a48e543e00d36f8e160921a492150208 100644 (file)
--- 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 438301d54b6ccf130b14e5bbe832a04bbaf7a910..f10ba054bc1a7b0d0e728e10983490347a9d9713 100644 (file)
--- 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;
index 2efd6aa639ccfadf52b83f9427fecc43b94ece36..ffb3e0f4bf6d2abc5fefe5192c07cb7bf31688e3 100644 (file)
@@ -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.
index 288cfa22b4888ee8b773188089d2ecc496714f94..783604beba81510f4e155c6de8edced39c8ac3df 100644 (file)
--- 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;
 }
 
index ee0e139e3d9d554210054c7f4e8dedecd38ffc6c..5815b585509d4459bbd4a2b516ac1250a6d609a1 100644 (file)
@@ -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)
index 816e1213336fe18f010e47570bebd80207fb20b1..caf6a9e979bea7d9994e8137f25e0563358abea9 100644 (file)
--- 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;
        }