Extract clone URL printing to ui-shared.c

This will allow us to reuse the same logic to add clone URL <link/>
elements to the header of all repo-specific pages in order to support
the rel-vcs microformat.

Signed-off-by: John Keeping <john@keeping.me.uk>
This commit is contained in:
John Keeping 2014-08-01 22:14:17 +01:00 committed by Jason A. Donenfeld
parent 485b09925c
commit bbfa006e6e
3 changed files with 51 additions and 46 deletions

View file

@ -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)
{