diff options
| author | Lars Hjemli <hjemli@gmail.com> | 2011-06-15 10:04:13 +0200 | 
|---|---|---|
| committer | Lars Hjemli <hjemli@gmail.com> | 2011-06-15 10:40:13 +0200 | 
| commit | 6857bec50a52340fa6b85d626f49d45dd331ed0e (patch) | |
| tree | f746931d5173cab78d32ead3196186c97c5fd9b7 /ui-shared.c | |
| parent | Merge branch 'stable' (diff) | |
| download | cgit-6857bec50a52340fa6b85d626f49d45dd331ed0e.tar.gz cgit-6857bec50a52340fa6b85d626f49d45dd331ed0e.tar.bz2 cgit-6857bec50a52340fa6b85d626f49d45dd331ed0e.zip | |
ui-tree.c: add support for path-selected submodule links
The current 'repo.module-link' option is sufficient when all gitlinks
in a repository can be converted to commit links in a uniform way, but
not when different submodules/paths needs different settings.
This patch adds support for 'repo.module-link.<path>', which will be
used for linking to submodules at paths matching one such entry.
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Diffstat (limited to '')
| -rw-r--r-- | ui-shared.c | 56 | 
1 files changed, 56 insertions, 0 deletions
| diff --git a/ui-shared.c b/ui-shared.c index 5aa9119..b736fca 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -503,6 +503,62 @@ void cgit_object_link(struct object *obj)  	reporevlink(page, name, NULL, NULL, ctx.qry.head, fullrev, NULL);  } +struct string_list_item *lookup_path(struct string_list *list, +				     const char *path) +{ +	struct string_list_item *item; + +	while (path && path[0]) { +		if ((item = string_list_lookup(list, path))) +			return item; +		if (!(path = strchr(path, '/'))) +			break; +		path++; +	} +	return NULL; +} + +void cgit_submodule_link(const char *class, char *path, const char *rev) +{ +	struct string_list *list; +	struct string_list_item *item; +	char tail, *dir; +	size_t len; + +	tail = 0; +	list = &ctx.repo->submodules; +	item = lookup_path(list, path); +	if (!item) { +		len = strlen(path); +		tail = path[len - 1]; +		if (tail == '/') { +			path[len - 1] = 0; +			item = lookup_path(list, path); +		} +	} +	html("<a "); +	if (class) +		htmlf("class='%s' ", class); +	html("href='"); +	if (item) { +		html_attr(fmt(item->util, rev)); +	} else if (ctx.repo->module_link) { +		dir = strrchr(path, '/'); +		if (dir) +			dir++; +		else +			dir = path; +		html_attr(fmt(ctx.repo->module_link, dir, rev)); +	} else { +		html("#"); +	} +	html("'>"); +	html_txt(path); +	html("</a>"); +	if (item && tail) +		path[len - 1] = tail; +} +  void cgit_print_date(time_t secs, const char *format, int local_time)  {  	char buf[64]; | 
