[RFC] ui-repolist: Allow sections to be collapsible

John Keeping john at keeping.me.uk
Sun Aug 7 21:57:47 CEST 2016


On Sun, Aug 07, 2016 at 02:33:41PM -0500, Andy Doan wrote:
> This is a rough work-in-progress, but I wanted to get our take on whether
> or not you'd be interested in this type of functionality:
> 
> The index page can be difficult to navigate for really large git
> servers. This change allows a configuration like:
> 
>  section-collapse=people
>  section-collapse=tests
> 
> And an index page would only display the "people" and "test" section
> headers entries (not their repos) with a hyperlink that can be used to
> drill down into each section.

My initial thought is that the name is wrong, when I saw the summary I
assumed it would be about adding script to allow sections to be
dynamically expanded/collapsed.  I can't immediately think of a better
name, though.

I also wonder why this takes a list of sections rather than a global
boolean that applies to all sections.  That may be because I tend to use
section-from-path though.

Overall, the implementation seems remarkably simple (and the change to
make section titles into links should probably be a separate patch) and
I think it would be reasonable to do something like this.  But I do
wonder if a global boolean would make more sense given the range of ways
it is possible to configure sections.  Do you have a use case that
requires only some sections to have their contents hidden in the main
index?

> Signed-off-by: Andy Doan <andy.doan at linaro.org>
> ---
>  cgit.c        | 2 ++
>  cgit.h        | 1 +
>  cgitrc.5.txt  | 5 +++++
>  ui-repolist.c | 4 +++-
>  4 files changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/cgit.c b/cgit.c
> index 9427c4a..abecc64 100644
> --- a/cgit.c
> +++ b/cgit.c
> @@ -238,6 +238,8 @@ static void config_cb(const char *name, const char *value)
>  			scan_tree(expand_macros(value), repo_config);
>  	else if (!strcmp(name, "scan-hidden-path"))
>  		ctx.cfg.scan_hidden_path = atoi(value);
> +	else if (!strcmp(name, "section-collapse"))
> +		string_list_insert(&ctx.cfg.section_collapse, xstrdup(value));
>  	else if (!strcmp(name, "section-from-path"))
>  		ctx.cfg.section_from_path = atoi(value);
>  	else if (!strcmp(name, "repository-sort"))
> diff --git a/cgit.h b/cgit.h
> index 325432b..5c654be 100644
> --- a/cgit.h
> +++ b/cgit.h
> @@ -251,6 +251,7 @@ struct cgit_config {
>  	int renamelimit;
>  	int remove_suffix;
>  	int scan_hidden_path;
> +	struct string_list section_collapse;
>  	int section_from_path;
>  	int snapshots;
>  	int section_sort;
> diff --git a/cgitrc.5.txt b/cgitrc.5.txt
> index 9fcf445..2762657 100644
> --- a/cgitrc.5.txt
> +++ b/cgitrc.5.txt
> @@ -404,6 +404,11 @@ section::
>  	after this option will inherit the current section name. Default value:
>  	none.
> 
> +section-collapse::
> +	Name of a section to "collapse" and not display on the index page.
> +	Multiple config entries can be specified and each one will be
> +	collapsed.
> +
>  section-sort::
>  	Flag which, when set to "1", will sort the sections on the repository
>  	listing by name. Set this flag to "0" if the order in the cgitrc file should
> diff --git a/ui-repolist.c b/ui-repolist.c
> index 30915df..330f749 100644
> --- a/ui-repolist.c
> +++ b/ui-repolist.c
> @@ -322,10 +322,12 @@ void cgit_print_repolist(void)
>  		     strcmp(section, last_section)))) {
>  			htmlf("<tr class='nohover'><td colspan='%d' class='reposection'>",
>  			      columns);
> -			html_txt(section);
> +			htmlf("<a href='%s'>%s</a>", section, section);
>  			html("</td></tr>");
>  			last_section = section;
>  		}
> +		if (section && string_list_has_string(&ctx.cfg.section_collapse, section))
> +			continue;
>  		htmlf("<tr><td class='%s'>",
>  		      !sorted && section ? "sublevel-repo" : "toplevel-repo");
>  		cgit_summary_link(ctx.repo->name, ctx.repo->name, NULL, NULL);
> --
> 2.7.4
> 
> _______________________________________________
> CGit mailing list
> CGit at lists.zx2c4.com
> http://lists.zx2c4.com/mailman/listinfo/cgit


More information about the CGit mailing list