ui-summary: Pass filename to about-filter

This gives the about-filter API the same semantics as source-filter,
where the filter receives the filename so it can decide what to do next
with it.

While we're at it, plug a memory leak.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
Jason A. Donenfeld 2013-05-25 14:50:19 +02:00
父節點 3cb5d86dc6
當前提交 c0dfaf1c28
共有 4 個檔案被更改,包括 22 行新增8 行删除

2
cgit.c
查看文件

@ -37,10 +37,10 @@ static struct cgit_filter *new_filter(const char *cmd, filter_type filtertype)
switch (filtertype) { switch (filtertype) {
case SOURCE: case SOURCE:
case ABOUT:
extra_args = 1; extra_args = 1;
break; break;
case ABOUT:
case COMMIT: case COMMIT:
default: default:
extra_args = 0; extra_args = 0;

查看文件

@ -542,9 +542,11 @@ config files, e.g. "repo.desc" becomes "desc".
FILTER API FILTER API
---------- ----------
about filter:: about filter::
This filter is given no arguments. The about text that is to be This filter is given a single parameter: the filename of the source
filtered is available on standard input and the filtered text is file to filter. The filter can use the filename to determine (for
expected on standard output. example) the type of syntax to follow when formatting the readme file.
The about text that is to be filtered is available on standard input
and the filtered text is expected on standard output.
commit filter:: commit filter::
This filter is given no arguments. The commit message text that is to This filter is given no arguments. The commit message text that is to

查看文件

@ -332,9 +332,13 @@ void cgit_print_site_readme()
{ {
if (!ctx.cfg.root_readme) if (!ctx.cfg.root_readme)
return; return;
if (ctx.cfg.about_filter) if (ctx.cfg.about_filter) {
ctx.cfg.about_filter->argv[1] = ctx.cfg.root_readme;
cgit_open_filter(ctx.cfg.about_filter); cgit_open_filter(ctx.cfg.about_filter);
}
html_include(ctx.cfg.root_readme); html_include(ctx.cfg.root_readme);
if (ctx.cfg.about_filter) if (ctx.cfg.about_filter) {
cgit_close_filter(ctx.cfg.about_filter); cgit_close_filter(ctx.cfg.about_filter);
ctx.cfg.about_filter->argv[1] = NULL;
}
} }

查看文件

@ -98,6 +98,7 @@ void cgit_print_summary()
void cgit_print_repo_readme(char *path) void cgit_print_repo_readme(char *path)
{ {
char *slash, *tmp, *colon, *ref; char *slash, *tmp, *colon, *ref;
int free_filename = 0;
if (!ctx.repo->readme || !(*ctx.repo->readme)) if (!ctx.repo->readme || !(*ctx.repo->readme))
return; return;
@ -134,6 +135,7 @@ void cgit_print_repo_readme(char *path)
return; return;
slash = colon; slash = colon;
} }
free_filename = 1;
tmp = xmalloc(slash - ctx.repo->readme + 1 + strlen(path) + 1); tmp = xmalloc(slash - ctx.repo->readme + 1 + strlen(path) + 1);
strncpy(tmp, ctx.repo->readme, slash - ctx.repo->readme + 1); strncpy(tmp, ctx.repo->readme, slash - ctx.repo->readme + 1);
strcpy(tmp + (slash - ctx.repo->readme + 1), path); strcpy(tmp + (slash - ctx.repo->readme + 1), path);
@ -144,13 +146,19 @@ void cgit_print_repo_readme(char *path)
* filesystem, while applying the about-filter. * filesystem, while applying the about-filter.
*/ */
html("<div id='summary'>"); html("<div id='summary'>");
if (ctx.repo->about_filter) if (ctx.repo->about_filter) {
ctx.repo->about_filter->argv[1] = tmp;
cgit_open_filter(ctx.repo->about_filter); cgit_open_filter(ctx.repo->about_filter);
}
if (ref) if (ref)
cgit_print_file(tmp, ref); cgit_print_file(tmp, ref);
else else
html_include(tmp); html_include(tmp);
if (ctx.repo->about_filter) if (ctx.repo->about_filter) {
cgit_close_filter(ctx.repo->about_filter); cgit_close_filter(ctx.repo->about_filter);
ctx.repo->about_filter->argv[1] = NULL;
}
html("</div>"); html("</div>");
if (free_filename)
free(tmp);
} }