[PATCH v3 12/17] ui-tree: render any matching README file in tree view
Andy Green
andy at warmcat.com
Wed Jun 20 02:00:45 CEST 2018
On 06/20/2018 05:49 AM, John Keeping wrote:
> On Tue, Jun 19, 2018 at 05:02:27PM +0800, Andy Green wrote:
>> While listing the items in tree view, we collect a list
>> of any filenames that match any tree-readme entries from the
>> config file.
>>
>> After the tree view has been shown, we iterate through any
>> collected readme files rendering them inline.
>
> There's only one now, the commit message isn't quite accurate any more!
Right... the name changed as well... I updated it.
-Andy
>> Signed-off-by: Andy Green <andy at warmcat.com>
>> Reviewed-by: John Keeping <john at keeping.me.uk>
>> ---
>> ui-tree.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
>> 1 file changed, 52 insertions(+), 1 deletion(-)
>>
>> diff --git a/ui-tree.c b/ui-tree.c
>> index 1ccbb22..6ffd4dd 100644
>> --- a/ui-tree.c
>> +++ b/ui-tree.c
>> @@ -1,6 +1,6 @@
>> /* ui-tree.c: functions for tree output
>> *
>> - * Copyright (C) 2006-2017 cgit Development Team <cgit at lists.zx2c4.com>
>> + * Copyright (C) 2006-2018 cgit Development Team <cgit at lists.zx2c4.com>
>> *
>> * Licensed under GNU General Public License v2
>> * (see COPYING for full license text)
>> @@ -12,8 +12,10 @@
>> #include "ui-shared.h"
>>
>> struct walk_tree_context {
>> + struct object_id inline_oid;
>> char *curr_rev;
>> char *match_path;
>> + char *inline_filename;
>> int state;
>> bool use_render;
>> };
>> @@ -325,11 +327,19 @@ static int ls_item(const struct object_id *oid, struct strbuf *base,
>> &fullpath);
>> } else {
>> char *ext = strrchr(name, '.');
>> +
>> strbuf_addstr(&class, "ls-blob");
>> if (ext)
>> strbuf_addf(&class, " %s", ext + 1);
>> +
>> cgit_tree_link(name, NULL, class.buf, ctx.qry.head,
>> walk_tree_ctx->curr_rev, fullpath.buf);
>> +
>> + if (!walk_tree_ctx->inline_filename &&
>> + string_list_has_string(&ctx.repo->inline_readme, name)) {
>> + walk_tree_ctx->inline_filename = xstrdup(pathname);
>> + oidcpy(&walk_tree_ctx->inline_oid, oid);
>> + }
>> }
>> htmlf("</td><td class='ls-size'>%li</td>", size);
>>
>> @@ -367,7 +377,46 @@ static void ls_head(void)
>>
>> static void ls_tail(struct walk_tree_context *walk_tree_ctx)
>> {
>> + struct cgit_filter *render;
>> + enum object_type type;
>> + char *buf, *mimetype;
>> + unsigned long size;
>> +
>> html("</table>\n");
>> +
>> + if (!walk_tree_ctx->inline_filename)
>> + goto done;
>> +
>> + type = oid_object_info(the_repository, &walk_tree_ctx->inline_oid, &size);
>> + if (type == OBJ_BAD)
>> + goto done;
>> +
>> + buf = read_object_file(&walk_tree_ctx->inline_oid, &type, &size);
>> + if (!buf)
>> + goto done;
>> +
>> + /* create a vertical gap between tree nav / inline */
>> + html("<table class=\"tabs\"><tr><td></td></tr></table>");
>> +
>> + render = get_render_for_filename(walk_tree_ctx->inline_filename);
>> + mimetype = render ? NULL : get_mimetype_for_filename(
>> + walk_tree_ctx->inline_filename);
>> +
>> + htmlf("<h2>%s</h2>", walk_tree_ctx->inline_filename);
>> + html("<div class=blob> </div>\n");
>> +
>> + if (render)
>> + render_buffer(render, walk_tree_ctx->inline_filename,
>> + buf, size);
>> + else if (mimetype)
>> + include_file(walk_tree_ctx->inline_filename, mimetype);
>> + else
>> + print_buffer(walk_tree_ctx->inline_filename, buf, size);
>> +
>> + free(mimetype);
>> + free(buf);
>> +
>> +done:
>> cgit_print_layout_end();
>> }
>>
>> @@ -478,4 +527,6 @@ void cgit_print_tree(const char *rev, char *path, bool use_render)
>>
>> cleanup:
>> free(walk_tree_ctx.curr_rev);
>> + if (walk_tree_ctx.inline_filename)
>> + free(walk_tree_ctx.inline_filename);
>> }
>>
>> _______________________________________________
>> CGit mailing list
>> CGit at lists.zx2c4.com
>> https://lists.zx2c4.com/mailman/listinfo/cgit
More information about the CGit
mailing list