diff options
Diffstat (limited to 'Documentation/mknews.perl')
-rwxr-xr-x | Documentation/mknews.perl | 51 |
1 files changed, 30 insertions, 21 deletions
diff --git a/Documentation/mknews.perl b/Documentation/mknews.perl index d803ca77..001ad310 100755 --- a/Documentation/mknews.perl +++ b/Documentation/mknews.perl @@ -1,12 +1,13 @@ #!/usr/bin/perl -w -# Copyright (C) 2019-2020 all contributors <meta@public-inbox.org> +# Copyright (C) all contributors <meta@public-inbox.org> # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt> # Generates NEWS, NEWS.atom, and NEWS.html files using release emails # this uses unstable internal APIs of public-inbox, and this script # needs to be updated if they change. use strict; -use PublicInbox::MIME; +use PublicInbox::Eml; use PublicInbox::View; +use PublicInbox::Hval qw(fmt_ts); use PublicInbox::MsgTime qw(msg_datestamp); use PublicInbox::MID qw(mids mid_escape); END { $INC{'Plack/Util.pm'} and warn "$0 should not have loaded Plack::Util\n" } @@ -37,14 +38,19 @@ if ($dst eq 'NEWS') { my $ibx = My::MockObject->new( description => 'public-inbox releases', over => undef, - search => 1, # for WwwStream:_html_top + search => 1, # for WwwStream::html_top base_url => "$base_url/", ); $ibx->{-primary_address} = $addr; my $ctx = { - -inbox => $ibx, + ibx => $ibx, -upfx => "$base_url/", -hr => 1, + zfh => $out, + env => { + HTTP_HOST => 'public-inbox.org', + 'psgi.url_scheme' => 'https', + }, }; if ($dst eq 'NEWS.html') { html_start($out, $ctx); @@ -76,7 +82,7 @@ sub release2mime { my ($release, $mtime_ref) = @_; my $f = "$dir/$release.eml"; open(my $fh, '<', $f) or die "open($f): $!"; - my $mime = PublicInbox::MIME->new(do { local $/; <$fh> }); + my $mime = PublicInbox::Eml->new(\(do { local $/; <$fh> })); # Documentation/include.mk relies on mtimes of each .eml file # to trigger rebuild, so make sure we sync the mtime to the Date: # header in the .eml @@ -91,7 +97,7 @@ sub mime2txt { my $title = $mime->header('Subject'); $title =~ s/^\s*\[\w+\]\s*//g; # [ANNOUNCE] or [ANN] my $dtime = msg_datestamp($mime->header_obj); - $title .= ' - ' . PublicInbox::View::fmt_ts($dtime) . ' UTC'; + $title .= ' - ' . fmt_ts($dtime) . ' UTC'; print $out $title, "\n" or die; my $uline = '=' x length($title); print $out $uline, "\n\n" or die; @@ -102,24 +108,26 @@ sub mime2txt { } sub mime2html { - my ($out, $mime, $ctx) = @_; - my $smsg = bless { mime => $mime }, 'PublicInbox::SearchMsg'; - print $out PublicInbox::View::index_entry($smsg, $ctx, 1) or die; + my ($out, $eml, $ctx) = @_; + my $smsg = $ctx->{smsg} = bless {}, 'PublicInbox::Smsg'; + $smsg->populate($eml); + $ctx->{msgs} = [ 1 ]; # for <hr> in eml_entry + print $out PublicInbox::View::eml_entry($ctx, $eml) or die; } sub html_start { my ($out, $ctx) = @_; require PublicInbox::WwwStream; $ctx->{www} = My::MockObject->new(style => ''); - my $www_stream = PublicInbox::WwwStream->new($ctx); - print $out $www_stream->_html_top, '<pre>' or die; + my $www_stream = PublicInbox::WwwStream::init($ctx); + print $out $www_stream->html_top, '<pre>' or die; } sub html_end { - print $out <<EOF or die; - git clone $PublicInbox::WwwStream::CODE_URL -</pre></body></html> -EOF + for (@$PublicInbox::WwwStream::CODE_URL) { + print $out " git clone $_\n" or die; + } + print $out "</pre></body></html>\n" or die; } sub atom_start { @@ -127,10 +135,10 @@ sub atom_start { require PublicInbox::WwwAtomStream; # WwwAtomStream stats this dir for mtime my $astream = PublicInbox::WwwAtomStream->new($ctx); - delete $ctx->{emit_header}; - my $ibx = $ctx->{-inbox}; + delete $astream->{emit_header}; + my $ibx = $ctx->{ibx}; my $title = PublicInbox::WwwAtomStream::title_tag($ibx->description); - my $updated = PublicInbox::WwwAtomStream::feed_updated(gmtime($mtime)); + my $updated = PublicInbox::WwwAtomStream::feed_updated($mtime); print $out <<EOF or die; <?xml version="1.0" encoding="us-ascii"?> <feed @@ -146,9 +154,10 @@ EOF } sub mime2atom { - my ($out, $astream, $mime, $ctx) = @_; - my $smsg = bless { mime => $mime }, 'PublicInbox::SearchMsg'; - if (defined(my $str = $astream->feed_entry($smsg))) { + my ($out, $astream, $eml, $ctx) = @_; + my $smsg = bless {}, 'PublicInbox::Smsg'; + $smsg->populate($eml); + if (defined(my $str = $astream->feed_entry($smsg, $eml))) { print $out $str or die; } } |