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);
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);

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 (*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;

View 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.

View File

@ -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;
}

View 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)

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";
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;
}