From 8de22f654c725999b6a2ce39edfbb78806452e1a Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Sat, 21 Dec 2019 18:41:45 +0000 Subject: feat(third_party/cgit): Generate monorepo compatible URLs Generates URLs that do not include the repository name. On git.tazj.in, only one repository (depot) is served - hence URLs generated by cgit need not include the name. --- third_party/cgit/cmd.c | 24 +----------------------- third_party/cgit/ui-shared.c | 29 +++++++++-------------------- 2 files changed, 10 insertions(+), 43 deletions(-) (limited to 'third_party') diff --git a/third_party/cgit/cmd.c b/third_party/cgit/cmd.c index bf6d8f516f..0fd0a01bc8 100644 --- a/third_party/cgit/cmd.c +++ b/third_party/cgit/cmd.c @@ -39,29 +39,7 @@ static void atom_fn(void) static void about_fn(void) { - if (ctx.repo) { - size_t path_info_len = ctx.env.path_info ? strlen(ctx.env.path_info) : 0; - if (!ctx.qry.path && - ctx.qry.url[strlen(ctx.qry.url) - 1] != '/' && - (!path_info_len || ctx.env.path_info[path_info_len - 1] != '/')) { - char *currenturl = cgit_currenturl(); - char *redirect = fmtalloc("%s/", currenturl); - cgit_redirect(redirect, true); - free(currenturl); - free(redirect); - } else if (ctx.repo->readme.nr) - cgit_print_repo_readme(ctx.qry.path); - else if (ctx.repo->homepage) - cgit_redirect(ctx.repo->homepage, false); - else { - char *currenturl = cgit_currenturl(); - char *redirect = fmtalloc("%s../", currenturl); - cgit_redirect(redirect, false); - free(currenturl); - free(redirect); - } - } else - cgit_print_site_readme(); + cgit_print_repo_readme(ctx.qry.path); } static void blame_fn(void) diff --git a/third_party/cgit/ui-shared.c b/third_party/cgit/ui-shared.c index d2358f2928..0b9307f55d 100644 --- a/third_party/cgit/ui-shared.c +++ b/third_party/cgit/ui-shared.c @@ -128,29 +128,23 @@ const char *cgit_loginurl(void) char *cgit_repourl(const char *reponame) { - if (ctx.cfg.virtual_root) - return fmtalloc("%s%s/", ctx.cfg.virtual_root, reponame); - else - return fmtalloc("?r=%s", reponame); + // my cgit instance *only* serves the depot, hence that's the only value ever + // needed. + return fmtalloc("/"); } char *cgit_fileurl(const char *reponame, const char *pagename, const char *filename, const char *query) { struct strbuf sb = STRBUF_INIT; - char *delim; - if (ctx.cfg.virtual_root) { - strbuf_addf(&sb, "%s%s/%s/%s", ctx.cfg.virtual_root, reponame, - pagename, (filename ? filename:"")); - delim = "?"; - } else { - strbuf_addf(&sb, "?url=%s/%s/%s", reponame, pagename, - (filename ? filename : "")); - delim = "&"; + strbuf_addf(&sb, "%s%s/%s", ctx.cfg.virtual_root, + pagename, (filename ? filename:"")); + + if (query) { + strbuf_addf(&sb, "%s%s", "?", query); } - if (query) - strbuf_addf(&sb, "%s%s", delim, query); + return strbuf_detach(&sb, NULL); } @@ -278,9 +272,6 @@ static char *repolink(const char *title, const char *class, const char *page, html(" href='"); if (ctx.cfg.virtual_root) { html_url_path(ctx.cfg.virtual_root); - html_url_path(ctx.repo->url); - if (ctx.repo->url[strlen(ctx.repo->url) - 1] != '/') - html("/"); if (page) { html_url_path(page); html("/"); @@ -992,8 +983,6 @@ static void print_header(void) html(""); if (ctx.repo) { - cgit_index_link("index", NULL, NULL, NULL, NULL, 0, 1); - html(" : "); cgit_summary_link(ctx.repo->name, ctx.repo->name, NULL, NULL); if (ctx.env.authenticated) { html(""); -- cgit 1.4.1