diff options
author | Peter Colberg | 2015-12-08 12:53:09 -0500 |
---|---|---|
committer | Jason A. Donenfeld | 2016-01-13 17:19:34 +0100 |
commit | 9abe4a26a92b91170cb9c5dab830b40fb1e0327f (patch) | |
tree | e4f2d5301f9bc4a3bc09ae30b6ff23dd210ed981 /ui-repolist.c | |
parent | a4014d0dbfcab1de7293179966c9b7fcfcc7b925 (diff) | |
download | cgit-9abe4a26a92b91170cb9c5dab830b40fb1e0327f.tar.gz cgit-9abe4a26a92b91170cb9c5dab830b40fb1e0327f.tar.bz2 cgit-9abe4a26a92b91170cb9c5dab830b40fb1e0327f.zip |
ui-repolist: return HTTP 404 if no repositories found
Return HTTP status code 404 Not found when querying a non-existent
repository, which signals to search engines that a repository no
longer exists. Further, some webservers such as nginx permit
logging requests to different files depending on the HTTP code.
Signed-off-by: Peter Colberg <peter@colberg.org>
Diffstat (limited to 'ui-repolist.c')
-rw-r--r-- | ui-repolist.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/ui-repolist.c b/ui-repolist.c index 4912fa5..6010a39 100644 --- a/ui-repolist.c +++ b/ui-repolist.c | |||
@@ -115,6 +115,17 @@ static int is_visible(struct cgit_repo *repo) | |||
115 | return 1; | 115 | return 1; |
116 | } | 116 | } |
117 | 117 | ||
118 | static int any_repos_visible(void) | ||
119 | { | ||
120 | int i; | ||
121 | |||
122 | for (i = 0; i < cgit_repolist.count; i++) { | ||
123 | if (is_visible(&cgit_repolist.repos[i])) | ||
124 | return 1; | ||
125 | } | ||
126 | return 0; | ||
127 | } | ||
128 | |||
118 | static void print_sort_header(const char *title, const char *sort) | 129 | static void print_sort_header(const char *title, const char *sort) |
119 | { | 130 | { |
120 | char *currenturl = cgit_currenturl(); | 131 | char *currenturl = cgit_currenturl(); |
@@ -266,6 +277,11 @@ void cgit_print_repolist(void) | |||
266 | char *section; | 277 | char *section; |
267 | int sorted = 0; | 278 | int sorted = 0; |
268 | 279 | ||
280 | if (!any_repos_visible()) { | ||
281 | cgit_print_error_page(404, "Not found", "No repositories found"); | ||
282 | return; | ||
283 | } | ||
284 | |||
269 | if (ctx.cfg.enable_index_links) | 285 | if (ctx.cfg.enable_index_links) |
270 | ++columns; | 286 | ++columns; |
271 | if (ctx.cfg.enable_index_owner) | 287 | if (ctx.cfg.enable_index_owner) |
@@ -347,9 +363,7 @@ void cgit_print_repolist(void) | |||
347 | html("</tr>\n"); | 363 | html("</tr>\n"); |
348 | } | 364 | } |
349 | html("</table>"); | 365 | html("</table>"); |
350 | if (!hits) | 366 | if (hits > ctx.cfg.max_repo_count) |
351 | cgit_print_error("No repositories found"); | ||
352 | else if (hits > ctx.cfg.max_repo_count) | ||
353 | print_pager(hits, ctx.cfg.max_repo_count, ctx.qry.search, ctx.qry.sort); | 367 | print_pager(hits, ctx.cfg.max_repo_count, ctx.qry.search, ctx.qry.sort); |
354 | cgit_print_docend(); | 368 | cgit_print_docend(); |
355 | } | 369 | } |