[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