mirror of
https://git.zx2c4.com/cgit
synced 2024-11-08 09:38:41 +00:00
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:
parent
f35db1cd2b
commit
e976df2795
4
cgit.c
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);
|
||||
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
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 (*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;
|
||||
|
@ -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.
|
||||
|
2
shared.c
2
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;
|
||||
}
|
||||
|
||||
|
16
ui-commit.c
16
ui-commit.c
@ -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)
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user