From mboxrd@z Thu Jan 1 00:00:00 1970 From: fnaim42 at gmail.com (=?UTF-8?q?Na=C3=AFm=20Favier?=) Date: Tue, 13 Aug 2019 19:22:21 +0200 Subject: [PATCH] Make default pages configurable Message-ID: <20190813172221.10482-1-fnaim42@gmail.com> This adds two configuration options, "default-page" and "default-page-repo", allowing to change the default page for the whole site and repositories, respectively. A few changes were required to make this work, namely: - the "index" tab on the home page and the "summary" tab on repo pages now explicitly point to their respective targets instead of pointing to the site/repo root; - trying to access the "about" page on a repository without one results in being redirected to the "summary" page explicitly. --- This patch was tested and seems to work well for all use cases i could think of. Let me know if i missed anything. cgit.c | 6 ++++++ cgit.h | 2 ++ cgitrc.5.txt | 9 +++++++++ cmd.c | 11 ++++------- ui-repolist.c | 2 +- ui-shared.c | 12 +++++++++--- ui-shared.h | 2 ++ 7 files changed, 33 insertions(+), 11 deletions(-) diff --git a/cgit.c b/cgit.c index 2910d4b..0967354 100644 --- a/cgit.c +++ b/cgit.c @@ -145,6 +145,10 @@ static void config_cb(const char *name, const char *value) ctx.cfg.logo = xstrdup(value); else if (!strcmp(name, "logo-link")) ctx.cfg.logo_link = xstrdup(value); + else if (!strcmp(name, "default-page")) + ctx.cfg.default_page = xstrdup(value); + else if (!strcmp(name, "default-page-repo")) + ctx.cfg.default_page_repo = xstrdup(value); else if (!strcmp(name, "module-link")) ctx.cfg.module_link = xstrdup(value); else if (!strcmp(name, "strict-export")) @@ -367,6 +371,8 @@ static void prepare_context(void) ctx.cfg.branch_sort = 0; ctx.cfg.commit_sort = 0; ctx.cfg.css = "/cgit.css"; + ctx.cfg.default_page = "repolist"; + ctx.cfg.default_page_repo = "summary"; ctx.cfg.logo = "/cgit.png"; ctx.cfg.favicon = "/favicon.ico"; ctx.cfg.local_time = 0; diff --git a/cgit.h b/cgit.h index 7ec46b4..b313814 100644 --- a/cgit.h +++ b/cgit.h @@ -196,6 +196,8 @@ struct cgit_config { char *clone_prefix; char *clone_url; char *css; + char *default_page; + char *default_page_repo; char *favicon; char *footer; char *head_include; diff --git a/cgitrc.5.txt b/cgitrc.5.txt index ba77826..77535eb 100644 --- a/cgitrc.5.txt +++ b/cgitrc.5.txt @@ -128,6 +128,15 @@ css:: Url which specifies the css document to include in all cgit pages. Default value: "/cgit.css". +default-page:: + Specifies the default home page. Possible values are "repolist" and + "about". Default value: "repolist". + +default-page-repo:: + Specifies the default page for repositories. Possible values are + "about", "summary", "refs", "log", "tree", "commit", "diff" and + "stats". Default value: "summary". + email-filter:: Specifies a command which will be invoked to format names and email address of committers, authors, and taggers, as represented in various diff --git a/cmd.c b/cmd.c index bf6d8f5..6a2a377 100644 --- a/cmd.c +++ b/cmd.c @@ -51,13 +51,10 @@ static void about_fn(void) 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); + char *redirect = fmtalloc("%s%s/summary/", + ctx.cfg.virtual_root, ctx.repo->url); cgit_redirect(redirect, false); - free(currenturl); free(redirect); } } else @@ -196,9 +193,9 @@ struct cgit_cmd *cgit_get_cmd(void) if (ctx.qry.page == NULL) { if (ctx.repo) - ctx.qry.page = "summary"; + ctx.qry.page = ctx.cfg.default_page_repo; else - ctx.qry.page = "repolist"; + ctx.qry.page = ctx.cfg.default_page; } for (i = 0; i < sizeof(cmds)/sizeof(*cmds); i++) diff --git a/ui-repolist.c b/ui-repolist.c index 7cf7638..a49f457 100644 --- a/ui-repolist.c +++ b/ui-repolist.c @@ -321,7 +321,7 @@ void cgit_print_repolist(void) } htmlf("