From dbed2ecdf824d154f7d69a624013a02e6e0966be Mon Sep 17 00:00:00 2001 From: Saya Andy Date: Thu, 30 Jul 2026 12:24:02 +0700 Subject: ui-shared: don't list branches when there is no repository print_header() fills the branch switcher from the main ref store whenever ctx.repo is set. For a request which prints a page before prepare_repo_cmd() has cleared ctx.repo -- an unknown page name for a repository whose repo.path is broken, for instance -- the ref store has never been initialized, and get_main_ref_store() aborts after the response has already begun: BUG: refs.c:2301: reference backend is unknown get_main_ref_store print_header at ui-shared.c:1057 cgit_print_error_page(fmt="Invalid request") Add cgit_have_repository() to say whether the repository for this request was opened, and skip the switcher when it was not. Signed-off-by: Saya Andy --- shared.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'shared.c') diff --git a/shared.c b/shared.c index a39394d..e79c3da 100644 --- a/shared.c +++ b/shared.c @@ -13,6 +13,18 @@ struct cgit_repolist cgit_repolist; struct cgit_context ctx; +/* Returns true when the git repository belonging to this request was opened + * successfully. Some requests print a page for a repository which could not + * be opened, e.g. because repo.path is wrong, and the object database and + * ref stores must not be touched in that case: they would abort with + * "reference backend is unknown" or dereference the not yet known hash + * algorithm. + */ +int cgit_have_repository(void) +{ + return startup_info->have_repository; +} + int chk_zero(int result, char *msg) { if (result != 0) -- cgit v1.3.1+13