From f6646e5a6da29da979d6954feba9d85556bc6936 Mon Sep 17 00:00:00 2001 From: Vincent Ambo <tazjin@google.com> Date: Sat, 21 Dec 2019 18:41:45 +0000 Subject: [PATCH 1/3] feat: 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. --- cmd.c | 24 +----------------------- ui-shared.c | 29 +++++++++-------------------- 2 files changed, 10 insertions(+), 43 deletions(-) diff --git a/cmd.c b/cmd.c index 63f0ae5..b37b79d 100644 --- a/cmd.c +++ b/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/ui-shared.c b/ui-shared.c index 739505a..c7c3754 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -95,29 +95,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); } @@ -245,9 +239,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("/"); @@ -957,8 +948,6 @@ static void print_header(void) html("<td class='main'>"); 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("</td><td class='form'>"); -- 2.24.1.735.g03f4e72817-goog