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>
This commit is contained in:
Lars Hjemli 2009-08-09 13:22:00 +02:00
parent f35db1cd2b
commit e976df2795
6 changed files with 35 additions and 21 deletions

4
cgit.c
View File

@ -146,6 +146,10 @@ void config_cb(const char *name, const char *value)
ctx.repo->max_stats = cgit_find_stats_period(value, NULL); ctx.repo->max_stats = cgit_find_stats_period(value, NULL);
else if (ctx.repo && !strcmp(name, "repo.module-link")) else if (ctx.repo && !strcmp(name, "repo.module-link"))
ctx.repo->module_link= xstrdup(value); 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) { else if (ctx.repo && !strcmp(name, "repo.readme") && value != NULL) {
if (*value == '/') if (*value == '/')
ctx.repo->readme = xstrdup(value); ctx.repo->readme = xstrdup(value);

20
cgit.h
View File

@ -48,6 +48,15 @@ typedef void (*configfn)(const char *name, const char *value);
typedef void (*filepair_fn)(struct diff_filepair *pair); typedef void (*filepair_fn)(struct diff_filepair *pair);
typedef void (*linediff_fn)(char *line, int len); 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 { struct cgit_repo {
char *url; char *url;
char *name; char *name;
@ -64,6 +73,8 @@ struct cgit_repo {
int enable_log_linecount; int enable_log_linecount;
int max_stats; int max_stats;
time_t mtime; time_t mtime;
struct cgit_filter *commit_filter;
struct cgit_filter *source_filter;
}; };
struct cgit_repolist { struct cgit_repolist {
@ -129,15 +140,6 @@ struct cgit_query {
int showmsg; int showmsg;
}; };
struct cgit_filter {
char *cmd;
char **argv;
int old_stdout;
int pipe_fh[2];
int pid;
int exitstatus;
};
struct cgit_config { struct cgit_config {
char *agefile; char *agefile;
char *cache_root; char *cache_root;

View File

@ -238,6 +238,9 @@ repo.clone-url::
A list of space-separated urls which can be used to clone this repo. A list of space-separated urls which can be used to clone this repo.
Default value: none. Default value: none.
repo.commit-filter::
Override the default commit-filter. Default value: <commit-filter>.
repo.defbranch:: repo.defbranch::
The name of the default branch for this repository. If no such branch 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 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 A mask of allowed snapshot-formats for this repo, restricted by the
"snapshots" global setting. Default value: <snapshots>. "snapshots" global setting. Default value: <snapshots>.
repo.source-filter::
Override the default source-filter. Default value: <source-filter>.
repo.url:: repo.url::
The relative url used to access the repository. This must be the first The relative url used to access the repository. This must be the first
setting specified for each repo. Default value: none. setting specified for each repo. Default value: none.

View File

@ -62,6 +62,8 @@ struct cgit_repo *cgit_add_repo(const char *url)
ret->module_link = ctx.cfg.module_link; ret->module_link = ctx.cfg.module_link;
ret->readme = NULL; ret->readme = NULL;
ret->mtime = -1; ret->mtime = -1;
ret->commit_filter = ctx.cfg.commit_filter;
ret->source_filter = ctx.cfg.source_filter;
return ret; return ret;
} }

View File

@ -89,19 +89,19 @@ void cgit_print_commit(char *hex)
} }
html("</table>\n"); html("</table>\n");
html("<div class='commit-subject'>"); html("<div class='commit-subject'>");
if (ctx.cfg.commit_filter) if (ctx.repo->commit_filter)
cgit_open_filter(ctx.cfg.commit_filter); cgit_open_filter(ctx.repo->commit_filter);
html_txt(info->subject); html_txt(info->subject);
if (ctx.cfg.commit_filter) if (ctx.repo->commit_filter)
cgit_close_filter(ctx.cfg.commit_filter); cgit_close_filter(ctx.repo->commit_filter);
show_commit_decorations(commit); show_commit_decorations(commit);
html("</div>"); html("</div>");
html("<div class='commit-msg'>"); html("<div class='commit-msg'>");
if (ctx.cfg.commit_filter) if (ctx.repo->commit_filter)
cgit_open_filter(ctx.cfg.commit_filter); cgit_open_filter(ctx.repo->commit_filter);
html_txt(info->msg); html_txt(info->msg);
if (ctx.cfg.commit_filter) if (ctx.repo->commit_filter)
cgit_close_filter(ctx.cfg.commit_filter); cgit_close_filter(ctx.repo->commit_filter);
html("</div>"); html("</div>");
if (parents < 3) { if (parents < 3) {
if (parents) if (parents)

View File

@ -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"; "<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"); 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>"); html("<tr><td class='lines'><pre><code>");
ctx.cfg.source_filter->argv[1] = xstrdup(name); ctx.repo->source_filter->argv[1] = xstrdup(name);
cgit_open_filter(ctx.cfg.source_filter); cgit_open_filter(ctx.repo->source_filter);
write(STDOUT_FILENO, buf, size); 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"); html("</code></pre></td></tr></table>\n");
return; return;
} }