diff options
| -rw-r--r-- | ui-shared.c | 37 | ||||
| -rw-r--r-- | ui-shared.h | 2 | ||||
| -rw-r--r-- | ui-summary.c | 58 | 
3 files changed, 51 insertions, 46 deletions
| diff --git a/ui-shared.c b/ui-shared.c index 6243d1b..4e317d0 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -727,6 +727,43 @@ void cgit_print_docend()  	html("</body>\n</html>\n");  } +static void add_clone_urls(void (*fn)(const char *), char *txt, char *suffix) +{ +	struct strbuf buf = STRBUF_INIT; +	char *h = txt, *t, c; + +	while (h && *h) { +		while (h && *h == ' ') +			h++; +		if (!*h) +			break; +		t = h; +		while (t && *t && *t != ' ') +			t++; +		c = *t; +		*t = 0; + +		if (suffix && *suffix) { +			strbuf_reset(&buf); +			strbuf_addf(&buf, "%s/%s", h, suffix); +			h = buf.buf; +		} +		fn(h); +		*t = c; +		h = t; +	} + +	strbuf_release(&buf); +} + +void cgit_add_clone_urls(void (*fn)(const char *)) +{ +	if (ctx.repo->clone_url) +		add_clone_urls(fn, expand_macros(ctx.repo->clone_url), NULL); +	else if (ctx.cfg.clone_prefix) +		add_clone_urls(fn, ctx.cfg.clone_prefix, ctx.repo->url); +} +  static int print_branch_option(const char *refname, const unsigned char *sha1,  			       int flags, void *cb_data)  { diff --git a/ui-shared.h b/ui-shared.h index fc9be3b..f8cf220 100644 --- a/ui-shared.h +++ b/ui-shared.h @@ -11,6 +11,8 @@ extern char *cgit_fileurl(const char *reponame, const char *pagename,  extern char *cgit_pageurl(const char *reponame, const char *pagename,  			  const char *query); +extern void cgit_add_clone_urls(void (*fn)(const char *)); +  extern void cgit_index_link(const char *name, const char *title,  			    const char *class, const char *pattern, const char *sort, int ofs);  extern void cgit_summary_link(const char *name, const char *title, diff --git a/ui-summary.c b/ui-summary.c index 3728c3e..70ea908 100644 --- a/ui-summary.c +++ b/ui-summary.c @@ -12,62 +12,30 @@  #include "ui-log.h"  #include "ui-refs.h"  #include "ui-blob.h" +#include "ui-shared.h"  #include <libgen.h> -static void print_url(char *base, char *suffix) +static int urls; + +static void print_url(const char *url)  {  	int columns = 3; -	struct strbuf basebuf = STRBUF_INIT;  	if (ctx.repo->enable_log_filecount)  		columns++;  	if (ctx.repo->enable_log_linecount)  		columns++; -	if (!base || !*base) -		return; -	if (suffix && *suffix) { -		strbuf_addf(&basebuf, "%s/%s", base, suffix); -		base = basebuf.buf; +	if (urls++ == 0) { +		htmlf("<tr class='nohover'><td colspan='%d'> </td></tr>", columns); +		htmlf("<tr><th class='left' colspan='%d'>Clone</th></tr>\n", columns);  	} +  	htmlf("<tr><td colspan='%d'><a href='", columns); -	html_url_path(base); +	html_url_path(url);  	html("'>"); -	html_txt(base); +	html_txt(url);  	html("</a></td></tr>\n"); -	strbuf_release(&basebuf); -} - -static void print_urls(char *txt, char *suffix) -{ -	char *h = txt, *t, c; -	int urls = 0; -	int columns = 3; - -	if (ctx.repo->enable_log_filecount) -		columns++; -	if (ctx.repo->enable_log_linecount) -		columns++; - - -	while (h && *h) { -		while (h && *h == ' ') -			h++; -		if (!*h) -			break; -		t = h; -		while (t && *t && *t != ' ') -			t++; -		c = *t; -		*t = 0; -		if (urls++ == 0) { -			htmlf("<tr class='nohover'><td colspan='%d'> </td></tr>", columns); -			htmlf("<tr><th class='left' colspan='%d'>Clone</th></tr>\n", columns); -		} -		print_url(h, suffix); -		*t = c; -		h = t; -	}  }  void cgit_print_summary() @@ -88,10 +56,8 @@ void cgit_print_summary()  		cgit_print_log(ctx.qry.head, 0, ctx.cfg.summary_log, NULL,  			       NULL, NULL, 0, 0, 0);  	} -	if (ctx.repo->clone_url) -		print_urls(expand_macros(ctx.repo->clone_url), NULL); -	else if (ctx.cfg.clone_prefix) -		print_urls(ctx.cfg.clone_prefix, ctx.repo->url); +	urls = 0; +	cgit_add_clone_urls(print_url);  	html("</table>");  } | 
