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>
这个提交包含在:
Lars Hjemli
2009-08-09 13:22:00 +02:00
父节点 f35db1cd2b
当前提交 e976df2795
共有 6 个文件被更改,包括 35 次插入21 次删除

4
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); 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
查看文件

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

查看文件

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

查看文件

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

查看文件

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

查看文件

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