diff options
author | Eric Wong <e@80x24.org> | 2021-10-12 11:47:05 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2021-10-12 21:46:38 +0000 |
commit | 97510d7a92b4e44318d1917a54c70d536bbf46f2 (patch) | |
tree | 5e04f732927b920221822a9afca55c3e99a090d7 /lib | |
parent | 9f02576da775abf208f5a03c03b6f7abd72596d0 (diff) | |
download | public-inbox-97510d7a92b4e44318d1917a54c70d536bbf46f2.tar.gz |
www: _/text/config/raw Last-Modified: is mm->created_at
This allows IMAP mirrors to keep UIDVALIDITY synchronized (and "LIST ACTIVE.TIMES" in NNTP). "lei add-external --mirror" will automatically set it, as will the combination of public-inbox-clone + public-inbox-index. This avoids the need for extra endpoints or config entries, at least...
Diffstat (limited to 'lib')
-rw-r--r-- | lib/PublicInbox/LeiMirror.pm | 13 | ||||
-rw-r--r-- | lib/PublicInbox/Msgmap.pm | 9 | ||||
-rw-r--r-- | lib/PublicInbox/WwwText.pm | 3 |
3 files changed, 18 insertions, 7 deletions
diff --git a/lib/PublicInbox/LeiMirror.pm b/lib/PublicInbox/LeiMirror.pm index 5cfa6fea..4be8f70a 100644 --- a/lib/PublicInbox/LeiMirror.pm +++ b/lib/PublicInbox/LeiMirror.pm @@ -96,15 +96,15 @@ sub _get_txt { # non-fatal my $path = $uri->path; chop($path) eq '/' or die "BUG: $uri not canonicalized"; $uri->path("$path/$endpoint"); - my $cmd = $self->{curl}->for_uri($lei, $uri, '--compressed'); - my $ce = "$self->{dst}/$file"; - my $ft = File::Temp->new(TEMPLATE => "$file-XXXX", - UNLINK => 1, DIR => $self->{dst}); - my $opt = { 0 => $lei->{0}, 1 => $ft, 2 => $lei->{2} }; + my $ft = File::Temp->new(TEMPLATE => "$file-XXXX", DIR => $self->{dst}); + my $f = $ft->filename; + my $opt = { 0 => $lei->{0}, 1 => $lei->{1}, 2 => $lei->{2} }; + my $cmd = $self->{curl}->for_uri($lei, $uri, + qw(--compressed -R -o), $f); my $cerr = run_reap($lei, $cmd, $opt); return "$uri missing" if ($cerr >> 8) == 22; return "# @$cmd failed (non-fatal)" if $cerr; - my $f = $ft->filename; + my $ce = "$self->{dst}/$file"; rename($f, $ce) or return "rename($f, $ce): $! (non-fatal)"; $ft->unlink_on_destroy(0); undef; # success @@ -122,6 +122,7 @@ sub _try_config { my $err = _get_txt($self, qw(_/text/config/raw inbox.config.example)); return $self->{lei}->err($err) if $err; my $f = "$self->{dst}/inbox.config.example"; + chmod((stat($f))[2] & 0444, $f) or die "chmod(a-w, $f): $!"; my $cfg = PublicInbox::Config->git_config_dump($f, $self->{lei}->{2}); my $ibx = $self->{ibx} = {}; for my $sec (grep(/\Apublicinbox\./, @{$cfg->{-section_order}})) { diff --git a/lib/PublicInbox/Msgmap.pm b/lib/PublicInbox/Msgmap.pm index 94a0cbeb..e71f16f8 100644 --- a/lib/PublicInbox/Msgmap.pm +++ b/lib/PublicInbox/Msgmap.pm @@ -32,8 +32,15 @@ sub new_file { if ($rw) { $dbh->begin_work; create_tables($dbh); - $self->created_at(time) unless $self->created_at; + unless ($self->created_at) { + my $t; + if (blessed($ibx) && + -f "$ibx->{inboxdir}/inbox.config.example") { + $t = (stat(_))[9]; # mtime set by "curl -R" + } + $self->created_at($t // time); + } $self->num_highwater(max($self)); $dbh->commit; } diff --git a/lib/PublicInbox/WwwText.pm b/lib/PublicInbox/WwwText.pm index bb9a0a0f..8b929f74 100644 --- a/lib/PublicInbox/WwwText.pm +++ b/lib/PublicInbox/WwwText.pm @@ -8,6 +8,7 @@ use v5.10.1; use PublicInbox::Linkify; use PublicInbox::WwwStream; use PublicInbox::Hval qw(ascii_html prurl); +use HTTP::Date qw(time2str); use URI::Escape qw(uri_escape_utf8); use PublicInbox::GzipFilter qw(gzf_maybe); our $QP_URL = 'https://xapian.org/docs/queryparser.html'; @@ -171,6 +172,8 @@ sub inbox_config ($$$) { my ($ctx, $hdr, $txt) = @_; my $ibx = $ctx->{ibx}; push @$hdr, 'Content-Disposition', 'inline; filename=inbox.config'; + my $t = eval { $ibx->mm->created_at }; + push(@$hdr, 'Last-Modified', time2str($t)) if $t; my $name = dq_escape($ibx->{name}); my $inboxdir = '/path/to/top-level-inbox'; my $base_url = $ibx->base_url($ctx->{env}); |