]> granicus.if.org Git - cgit/commitdiff
ui-summary: Pass filename to about-filter
authorJason A. Donenfeld <Jason@zx2c4.com>
Sat, 25 May 2013 12:50:19 +0000 (14:50 +0200)
committerJason A. Donenfeld <Jason@zx2c4.com>
Sat, 25 May 2013 18:33:28 +0000 (20:33 +0200)
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>
cgit.c
cgitrc.5.txt
ui-repolist.c
ui-summary.c

diff --git a/cgit.c b/cgit.c
index 29e075dfae160e26e9f6b68fdf71a9e71a3a20e2..04682be06d8dd60dcecfbe5c89c4beeab1312880 100644 (file)
--- a/cgit.c
+++ b/cgit.c
@@ -37,10 +37,10 @@ static struct cgit_filter *new_filter(const char *cmd, filter_type filtertype)
 
        switch (filtertype) {
                case SOURCE:
+               case ABOUT:
                        extra_args = 1;
                        break;
 
-               case ABOUT:
                case COMMIT:
                default:
                        extra_args = 0;
index 8a0a9c952a269a60773884ab99c158bea3ea21eb..ea0bbe74487ef83154b51c9127e3baa893bb14ed 100644 (file)
@@ -542,9 +542,11 @@ config files, e.g. "repo.desc" becomes "desc".
 FILTER API
 ----------
 about filter::
-       This filter is given no arguments. The about text that is to be
-       filtered is available on standard input and the filtered text is
-       expected on standard output.
+       This filter is given a single parameter: the filename of the source
+       file to filter. The filter can use the filename to determine (for
+       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::
        This filter is given no arguments. The commit message text that is to
index 47ca997883923222c4797ed1c20b59348abe2058..2ab6e9e41cca24fa9a2e3ad17682090cfc592e20 100644 (file)
@@ -332,9 +332,13 @@ void cgit_print_site_readme()
 {
        if (!ctx.cfg.root_readme)
                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);
+       }
        html_include(ctx.cfg.root_readme);
-       if (ctx.cfg.about_filter)
+       if (ctx.cfg.about_filter) {
                cgit_close_filter(ctx.cfg.about_filter);
+               ctx.cfg.about_filter->argv[1] = NULL;
+       }
 }
index abf914ea7b9bef132613045e925f6528b75fea2d..ffad4f29e03e1e9d01bd8c0670b1ca74da83646c 100644 (file)
@@ -98,6 +98,7 @@ void cgit_print_summary()
 void cgit_print_repo_readme(char *path)
 {
        char *slash, *tmp, *colon, *ref;
+       int free_filename = 0;
 
        if (!ctx.repo->readme || !(*ctx.repo->readme))
                return;
@@ -134,6 +135,7 @@ void cgit_print_repo_readme(char *path)
                                return;
                        slash = colon;
                }
+               free_filename = 1;
                tmp = xmalloc(slash - ctx.repo->readme + 1 + strlen(path) + 1);
                strncpy(tmp, ctx.repo->readme, slash - ctx.repo->readme + 1);
                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.
         */
        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);
+       }
        if (ref)
                cgit_print_file(tmp, ref);
        else
                html_include(tmp);
-       if (ctx.repo->about_filter)
+       if (ctx.repo->about_filter) {
                cgit_close_filter(ctx.repo->about_filter);
+               ctx.repo->about_filter->argv[1] = NULL;
+       }
        html("</div>");
+       if (free_filename)
+               free(tmp);
 }