mirror of
https://git.zx2c4.com/cgit
synced 2024-11-26 02:18:42 +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);
|
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
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.
|
||||||
|
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->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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
16
ui-commit.c
16
ui-commit.c
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user