From: Eric Wong Date: Wed, 26 Jun 2019 06:36:27 +0000 (+0000) Subject: Merge remote-tracking branch 'origin/nntp-tls' X-Git-Tag: v1.2.0~156 X-Git-Url: http://www.git.stargrave.org/?p=public-inbox.git;a=commitdiff_plain;h=84d8920b92686e975929aebe845b6d4ea0a9ef0d;hp=c30b4427b340aeb242273a7b890fbd7e50132f51 Merge remote-tracking branch 'origin/nntp-tls' * origin/nntp-tls: (59 commits) ds: ->write must not clobber empty wbuf array Makefile: skip DSKQXS in global syntax check ds: reduce overhead of tempfile creation Revert "ci: require IO::KQueue on FreeBSD, for now" ds: reimplement IO::Poll support to look like epoll ds: split out IO::KQueue-specific code daemon: use FreeBSD accept filters on non-NNTP daemon: set TCP_DEFER_ACCEPT on everything but NNTP nntp: send greeting immediately for plain sockets ci: require IO::KQueue on FreeBSD, for now nntp: lazily allocate and stash rbuf ds: flush_write runs ->write callbacks even if closed nntp: simplify long response logic and fix nesting ds: always use EV_ADD with EV_SET nntp: reduce allocations for greeting ds: allow ->write callbacks to syswrite directly daemon: use SSL_MODE_RELEASE_BUFFERS t/nntpd-tls: slow client connection test nntp: call SSL_shutdown in normal cases ds|nntp: use CORE::close on socket ... --- diff --git a/lib/PublicInbox/Msgmap.pm b/lib/PublicInbox/Msgmap.pm index 0035c9e3..5a89b85a 100644 --- a/lib/PublicInbox/Msgmap.pm +++ b/lib/PublicInbox/Msgmap.pm @@ -126,9 +126,9 @@ sub mid_insert { my ($self, $mid) = @_; my $dbh = $self->{dbh}; my $sth = $dbh->prepare_cached(<<''); -INSERT OR IGNORE INTO msgmap (mid) VALUES (?) +INSERT INTO msgmap (mid) VALUES (?) - return if $sth->execute($mid) == 0; + return unless eval { $sth->execute($mid) }; my $num = $dbh->last_insert_id(undef, undef, 'msgmap', 'num'); $self->num_highwater($num) if defined($num); $num; diff --git a/lib/PublicInbox/SearchView.pm b/lib/PublicInbox/SearchView.pm index 6f07279b..a8b66dda 100644 --- a/lib/PublicInbox/SearchView.pm +++ b/lib/PublicInbox/SearchView.pm @@ -15,6 +15,7 @@ use PublicInbox::MIME; require PublicInbox::Git; require PublicInbox::SearchThread; our $LIM = 200; +my %rmap_inc; sub noop {} @@ -138,10 +139,27 @@ sub mset_summary { *noop; } +# shorten "/full/path/to/Foo/Bar.pm" to "Foo/Bar.pm" so error +# messages don't reveal FS layout info in case people use non-standard +# installation paths +sub path2inc ($) { + my $full = $_[0]; + if (my $short = $rmap_inc{$full}) { + return $short; + } elsif (!scalar(keys %rmap_inc) && -e $full) { + %rmap_inc = map {; "$INC{$_}" => $_ } keys %INC; + # fall back to basename as last resort + $rmap_inc{$full} // (split('/', $full))[-1]; + } else { + $full; + } +} + sub err_txt { my ($ctx, $err) = @_; my $u = $ctx->{-inbox}->base_url($ctx->{env}) . '_/text/help/'; $err =~ s/^\s*Exception:\s*//; # bad word to show users :P + $err =~ s!(\S+)!path2inc($1)!sge; $err = ascii_html($err); "\nBad query: $err\n" . qq{See $u for help on using search}; diff --git a/lib/PublicInbox/WwwListing.pm b/lib/PublicInbox/WwwListing.pm index e052bbff..1d4029f0 100644 --- a/lib/PublicInbox/WwwListing.pm +++ b/lib/PublicInbox/WwwListing.pm @@ -138,8 +138,8 @@ sub fingerprint ($) { $dig->hexdigest; } -sub manifest_add ($$;$) { - my ($manifest, $ibx, $epoch) = @_; +sub manifest_add ($$;$$) { + my ($manifest, $ibx, $epoch, $default_desc) = @_; my $url_path = "/$ibx->{name}"; my $git_dir = $ibx->{mainrepo}; if (defined $epoch) { @@ -155,6 +155,13 @@ sub manifest_add ($$;$) { $owner = undef if $owner eq ''; $desc = 'Unnamed repository' if $desc eq ''; + # templates/hooks--update.sample and git-multimail in git.git + # only match "Unnamed repository", not the full contents of + # templates/this--description in git.git + if ($desc =~ /\AUnnamed repository/) { + $desc = "$default_desc [epoch $epoch]" if defined($epoch); + } + my $reference; chomp(my $alt = try_cat("$git_dir/objects/info/alternates")); if ($alt) { @@ -191,8 +198,9 @@ sub js ($$) { my $manifest = { -abs2urlpath => {}, -mtime => 0 }; for my $ibx (@$list) { if (defined(my $max = $ibx->max_git_epoch)) { + my $desc = $ibx->description; for my $epoch (0..$max) { - manifest_add($manifest, $ibx, $epoch); + manifest_add($manifest, $ibx, $epoch, $desc); } } else { manifest_add($manifest, $ibx); diff --git a/t/msgmap.t b/t/msgmap.t index 4dddd0a8..20985ce8 100644 --- a/t/msgmap.t +++ b/t/msgmap.t @@ -30,6 +30,9 @@ $@ = undef; my $ret = $d->mid_insert('a@b'); is($ret, undef, 'duplicate mid_insert in undef result'); is($d->num_for('a@b'), $mid2num{'a@b'}, 'existing number not clobbered'); +my $next = (sort(keys %num2mid))[-1]; +is($d->mid_insert('ok@unique'), $next + 1, + 'got expected num after failing mid_insert'); foreach my $n (keys %num2mid) { is($d->mid_for($n), $num2mid{$n}, "num:$n maps correctly"); diff --git a/t/v2writable.t b/t/v2writable.t index 88df2d64..8f32fbe5 100644 --- a/t/v2writable.t +++ b/t/v2writable.t @@ -118,6 +118,8 @@ if ('ensure git configs are correct') { $mime->header_set('References', ''); ok($im->add($mime), 'message with multiple Message-ID'); $im->done; + my ($total, undef) = $ibx->over->recent; + is($ibx->mm->num_highwater, $total, 'got expected highwater value'); my $srch = $ibx->search; my $mset1 = $srch->reopen->query('m:abcde@1', { mset => 1 }); is($mset1->size, 1, 'message found by first MID'); diff --git a/t/www_listing.t b/t/www_listing.t index d82a4a4a..e5b797db 100644 --- a/t/www_listing.t +++ b/t/www_listing.t @@ -55,7 +55,12 @@ sub tiny_test { $res->{headers}->{'last-modified'}, 'modified field and Last-Modified header match'); - ok($manifest->{'/v2/git/0.git'}, 'v2 epoch appeared'); + ok(my $v2epoch0 = $manifest->{'/v2/git/0.git'}, 'v2 epoch 0 appeared'); + like($v2epoch0->{description}, qr/ \[epoch 0\]\z/, + 'epoch 0 in description'); + ok(my $v2epoch1 = $manifest->{'/v2/git/1.git'}, 'v2 epoch 1 appeared'); + like($v2epoch1->{description}, qr/ \[epoch 1\]\z/, + 'epoch 1 in description'); } my $pid;