X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=Documentation%2Fmknews.perl;h=1bd704e68247afe18b6b85b76f4d4cd7bc52d284;hb=52a02a813a46940530183ede4d4cc7028290cd8f;hp=3efabdb592426799a23777a2eb3fe64f0c6699dd;hpb=599166a3072a1f165ca54121a9dbb24ce2585c2f;p=public-inbox.git diff --git a/Documentation/mknews.perl b/Documentation/mknews.perl index 3efabdb5..1bd704e6 100755 --- a/Documentation/mknews.perl +++ b/Documentation/mknews.perl @@ -1,11 +1,11 @@ #!/usr/bin/perl -w -# Copyright (C) 2019 all contributors +# Copyright (C) 2019-2020 all contributors # License: AGPL-3.0+ # 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::MsgTime qw(msg_datestamp); use PublicInbox::MID qw(mids mid_escape); @@ -21,8 +21,8 @@ my $atom_url = 'https://public-inbox.org/NEWS.atom'; my $addr = 'meta@public-inbox.org'; my $latest = shift(@releases) or die 'no releases?'; -my $mime_latest = release2mime($latest); -my $mtime = msg_datestamp($mime_latest->header_obj); +my $mtime; +my $mime_latest = release2mime($latest, \$mtime); my $tmp = "$dst+"; my $out; if ($dst eq 'NEWS') { @@ -73,9 +73,17 @@ rename($tmp, $dst) or die; exit 0; sub release2mime { - my $f = "$dir/$_[0].eml"; + my ($release, $mtime_ref) = @_; + my $f = "$dir/$release.eml"; open(my $fh, '<', $f) or die "open($f): $!"; - 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 + my $mtime = msg_datestamp($mime->header_obj); + utime($mtime, $mtime, $fh) or warn "futimes $f: $!"; + $$mtime_ref = $mtime if $mtime_ref; + $mime; } sub mime2txt { @@ -94,16 +102,17 @@ 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 = bless {}, 'PublicInbox::Smsg'; + $smsg->populate($eml); + print $out PublicInbox::View::eml_entry($ctx, $smsg, $eml, 1) or die; } sub html_start { my ($out, $ctx) = @_; require PublicInbox::WwwStream; $ctx->{www} = My::MockObject->new(style => ''); - my $www_stream = PublicInbox::WwwStream->new($ctx); + my $www_stream = PublicInbox::WwwStream::init($ctx); print $out $www_stream->_html_top, '
' or die;
 }
 
@@ -119,10 +128,10 @@ sub atom_start {
 	require PublicInbox::WwwAtomStream;
 	# WwwAtomStream stats this dir for mtime
 	my $astream = PublicInbox::WwwAtomStream->new($ctx);
-	delete $ctx->{emit_header};
+	delete $astream->{emit_header};
 	my $ibx = $ctx->{-inbox};
 	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 <
  $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;
 	}
 }