From: Eric Wong Date: Fri, 27 Aug 2021 12:08:45 +0000 (+0000) Subject: www_listing: fix odd "locate inbox" cases X-Git-Tag: v1.7.0~481 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=733a7405f5a9d24782093876f178c6eb954dc17c;p=public-inbox.git www_listing: fix odd "locate inbox" cases Searching inboxes with an empty query no longer gives 500 errors due to Xapian. Also, improve the error message when no inboxes match, since saying no inboxes exist yet is wrong. --- diff --git a/lib/PublicInbox/WwwListing.pm b/lib/PublicInbox/WwwListing.pm index eabda98a..1bb5fbd0 100644 --- a/lib/PublicInbox/WwwListing.pm +++ b/lib/PublicInbox/WwwListing.pm @@ -96,7 +96,8 @@ sub add_misc_ibx { # MiscSearch->retry_reopen callback delete $ctx->{-list}; # reset if retried my $pi_cfg = $ctx->{www}->{pi_cfg}; - if (defined(my $user_query = $q->{'q'})) { + my $user_query = $q->{'q'} // ''; + if ($user_query =~ /\S/) { $qs = "( $qs ) AND ( $user_query )"; } else { # special case for ALL $ctx->ibx_entry($pi_cfg->ALL // die('BUG: ->ALL expected'), {}); @@ -218,6 +219,10 @@ sub psgi_triple { $gzf->zmore('
');
 		$gzf->zmore(join("\n", @$list));
 		$gzf->zmore(mset_footer($ctx, $mset)) if $mset;
+	} elsif (my $mset = delete $ctx->{-mset}) {
+		$gzf->zmore(mset_nav_top($ctx, $mset));
+		$gzf->zmore('
no matching inboxes');
+		$gzf->zmore(mset_footer($ctx, $mset));
 	} else {
 		$gzf->zmore('
no inboxes, yet');
 	}
diff --git a/t/extindex-psgi.t b/t/extindex-psgi.t
index 31b04acd..4e26962e 100644
--- a/t/extindex-psgi.t
+++ b/t/extindex-psgi.t
@@ -59,8 +59,14 @@ my $client = sub {
 	is($res->code, 200, 'all.mbox.gz');
 
 	$res = $cb->(GET('/'));
-	my $html = $res->content;
-	like($html, qr!\Qhttp://bogus.example.com/all\E!, 'html shows /all');
+	like($res->content, qr!\Qhttp://bogus.example.com/all\E!,
+		'/all listed');
+	$res = $cb->(GET('/?q='));
+	is($res->code, 200, 'no query means all inboxes');
+	$res = $cb->(GET('/?q=nonexistent'));
+	is($res->code, 404, 'no inboxes matched');
+	unlike($res->content, qr!no inboxes, yet!,
+		'we have inboxes, just no matches');
 };
 test_psgi(sub { $www->call(@_) }, $client);
 %$env = (%$env, TMPDIR => $tmpdir, PI_CONFIG => $pi_config);