";
# newest to oldest
@@ -21,12 +21,12 @@ 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') {
- open $out, '>', $tmp or die;
+ open $out, '>:encoding(utf8)', $tmp or die;
mime2txt($out, $mime_latest);
for my $v (@releases) {
print $out "\n" or die;
@@ -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,14 +73,22 @@ 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 {
my ($out, $mime) = @_;
- my $title = $mime->header_str('Subject');
+ 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';
@@ -95,14 +103,14 @@ sub mime2txt {
sub mime2html {
my ($out, $mime, $ctx) = @_;
- my $smsg = bless { mime => $mime }, 'PublicInbox::SearchMsg';
+ my $smsg = bless { mime => $mime }, 'PublicInbox::Smsg';
print $out PublicInbox::View::index_entry($smsg, $ctx, 1) or die;
}
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, '' or die;
}
@@ -139,8 +147,24 @@ EOF
sub mime2atom {
my ($out, $astream, $mime, $ctx) = @_;
- my $smsg = bless { mime => $mime }, 'PublicInbox::SearchMsg';
+ my $smsg = bless { mime => $mime }, 'PublicInbox::Smsg';
if (defined(my $str = $astream->feed_entry($smsg))) {
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;