[PATCH v3 17/17] render: adapt for providing extra filter args for plain
John Keeping
john at keeping.me.uk
Tue Jun 19 23:56:16 CEST 2018
On Tue, Jun 19, 2018 at 05:02:52PM +0800, Andy Green wrote:
> This changes the render filter exec part to provide a second
> and third argument, which are used by md2html to fix up the url
> path for "plain" for the repo, eg, "/cgit/plain/" and
> "?h=mybranch", as required by the modifications to md2html in
> the previous patches.
>
> The combination means cgit becomes able to serve assets using
> markdown urls starting from the repo root dir, without mentioning
> any virtual url part specific to a cgit or other web rendering
> instance, while respecting the version context.
>
> Eg, continuing the example of the arguments being
> "/cgit/plain/" and "?h=mybranch" from above, if the markdown has
>
> ![overview](./doc-assets/overview.png)
>
> the img src will be fixed up to
>
> "/cgit/plain/doc-assets/overview.png?h=mybranch"
>
> If the same document is viewed from a different rev in cgit, the
> processed markdown url will change to match the cgit context, even
> though the markdown relative URL is the same for all versions.
>
> Signed-off-by: Andy Green <andy at warmcat.com>
Reviewed-by: John Keeping <john at keeping.me.uk>
> ---
> filter.c | 5 ++++-
> ui-tree.c | 11 +++++++++--
> 2 files changed, 13 insertions(+), 3 deletions(-)
>
> diff --git a/filter.c b/filter.c
> index 4ae4aaa..7c1f188 100644
> --- a/filter.c
> +++ b/filter.c
> @@ -424,6 +424,10 @@ struct cgit_filter *cgit_new_filter(const char *cmd, filter_type filtertype)
> argument_count = 12;
> break;
>
> + case RENDER:
> + argument_count = 3;
> + break;
> +
> case EMAIL:
> argument_count = 2;
> break;
> @@ -434,7 +438,6 @@ struct cgit_filter *cgit_new_filter(const char *cmd, filter_type filtertype)
>
> case SOURCE:
> case ABOUT:
> - case RENDER:
> argument_count = 1;
> break;
>
> diff --git a/ui-tree.c b/ui-tree.c
> index 6ffd4dd..2e94755 100644
> --- a/ui-tree.c
> +++ b/ui-tree.c
> @@ -102,16 +102,23 @@ static void print_buffer(const char *basename, char *buf, unsigned long size)
> }
>
> static void render_buffer(struct cgit_filter *render, const char *name,
> - char *buf, unsigned long size)
> + char *buf, unsigned long size)
> {
> char *filter_arg = xstrdup(name);
> + struct strbuf sb_pre = STRBUF_INIT, sb_post = STRBUF_INIT;
> +
> + cgit_repo_create_url(&sb_pre, &sb_post, "plain", ctx.qry.head, NULL);
> +
> + fprintf(stderr, "'%s' '%s'\n", sb_pre.buf, sb_post.buf);
>
> html("<div class='blob'>");
> - cgit_open_filter(render, filter_arg);
> + cgit_open_filter(render, filter_arg, sb_pre.buf, sb_post.buf);
> html_raw(buf, size);
> cgit_close_filter(render);
> html("</div>");
>
> + strbuf_release(&sb_pre);
> + strbuf_release(&sb_post);
> free(filter_arg);
> }
>
>
> _______________________________________________
> CGit mailing list
> CGit at lists.zx2c4.com
> https://lists.zx2c4.com/mailman/listinfo/cgit
More information about the CGit
mailing list