We are going to have to produce plain links in the next patch. But depending on config, the links are not simple.
Reproduce the logic in repolink() to generate correctly- formatted links in a strbuf, without urlencoding, in a reusable helper cgit_repo_create_url(). Signed-off-by: Andy Green <a...@warmcat.com> --- ui-shared.c | 32 ++++++++++++++++++++++++++++++++ ui-shared.h | 3 +++ 2 files changed, 35 insertions(+) diff --git a/ui-shared.c b/ui-shared.c index 21bbded..c9a34fb 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -221,6 +221,38 @@ void cgit_index_link(const char *name, const char *title, const char *class, site_link(NULL, name, title, class, pattern, sort, ofs, always_root); } +const char *cgit_repo_create_url(struct strbuf *sb, struct strbuf *sb_post, + const char *page, const char *head, + const char *path) +{ + const char *delim = "?"; + + if (ctx.cfg.virtual_root) { + strbuf_addf(sb, "%s%s", ctx.cfg.virtual_root, ctx.repo->url); + } else { + strbuf_addstr(sb, ctx.cfg.script_name); + sb = sb_post; + strbuf_addf(sb, "?url=%s", ctx.repo->url); + delim = "&"; + } + + if (ctx.repo->url[strlen(ctx.repo->url) - 1] != '/') + strbuf_addch(sb, '/'); + + if (page) { + strbuf_addf(sb, "%s/", page); + if (path) + strbuf_addstr(sb, path); + } + + if (head && ctx.repo->defbranch && strcmp(head, ctx.repo->defbranch)) { + strbuf_addf(sb_post, "%sh=%s", delim, head); + delim = "&"; + } + + return delim; +} + static char *repolink(const char *title, const char *class, const char *page, const char *head, const char *path) { diff --git a/ui-shared.h b/ui-shared.h index c105b3b..e78b5fd 100644 --- a/ui-shared.h +++ b/ui-shared.h @@ -59,6 +59,9 @@ extern void cgit_object_link(struct object *obj); extern void cgit_submodule_link(const char *class, char *path, const char *rev); +extern const char *cgit_repo_create_url(struct strbuf *sb, struct strbuf *sb_post, + const char *page, const char *head, + const char *path); extern void cgit_print_layout_start(void); extern void cgit_print_layout_end(void); _______________________________________________ CGit mailing list CGit@lists.zx2c4.com https://lists.zx2c4.com/mailman/listinfo/cgit