]> Sergey Matveev's repositories - public-inbox.git/blobdiff - Documentation/mknews.perl
treewide: run update-copyrights from gnulib for 2019
[public-inbox.git] / Documentation / mknews.perl
index 5ede36964287ce2cfb673f54f54ccf36cfcd298a..d803ca7753b1b716dc7cb05003194e419220eba8 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/perl -w
-# Copyright (C) 2019 all contributors <meta@public-inbox.org>
+# Copyright (C) 2019-2020 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
@@ -7,9 +7,9 @@
 use strict;
 use PublicInbox::MIME;
 use PublicInbox::View;
-use Plack::Util;
 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" }
 my $dst = shift @ARGV or die "Usage: $0 <NEWS|NEWS.atom|NEWS.html>";
 
 # newest to oldest
@@ -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') {
@@ -34,11 +34,11 @@ if ($dst eq 'NEWS') {
        }
 } elsif ($dst eq 'NEWS.atom' || $dst eq 'NEWS.html') {
        open $out, '>', $tmp or die;
-       my $ibx = Plack::Util::inline_object(
-               description => sub { 'public-inbox releases' },
-               over => sub { undef },
-               search => sub { 1 }, # for WwwStream:_html_top
-               base_url => sub { "$base_url/" },
+       my $ibx = My::MockObject->new(
+               description => 'public-inbox releases',
+               over => undef,
+               search => 1, # for WwwStream:_html_top
+               base_url => "$base_url/",
        );
        $ibx->{-primary_address} = $addr;
        my $ctx = {
@@ -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::MIME->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 {
@@ -102,7 +110,7 @@ sub mime2html {
 sub html_start {
        my ($out, $ctx) = @_;
        require PublicInbox::WwwStream;
-       $ctx->{www} = Plack::Util::inline_object(style => sub { '' });
+       $ctx->{www} = My::MockObject->new(style => '');
        my $www_stream = PublicInbox::WwwStream->new($ctx);
        print $out $www_stream->_html_top, '<pre>' or die;
 }
@@ -144,3 +152,19 @@ sub mime2atom  {
                print $out $str or die;
        }
 }
+package My::MockObject;
+use strict;
+our $AUTOLOAD;
+
+sub new {
+       my ($class, %values) = @_;
+       bless \%values, $class;
+}
+
+sub AUTOLOAD {
+       my ($self) = @_;
+       my $attr = (split(/::/, $AUTOLOAD))[-1];
+       $self->{$attr};
+}
+
+1;