about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2022-11-28 05:32:25 +0000
committerEric Wong <e@80x24.org>2022-11-28 23:38:59 +0000
commitb3b025134c71d00fa26435aec1d2cb8c196103ac (patch)
treeda24d661e01588182cb4a17720d46728737c5ab0
parentf6f581b57915e0bc07361d8a03da863b4117f910 (diff)
downloadpublic-inbox-b3b025134c71d00fa26435aec1d2cb8c196103ac.tar.gz
This lets us save cycles and avoid scanning + comparing manifest
contents by relying on the Last-Modified HTTP response header.
-rw-r--r--lib/PublicInbox/LeiMirror.pm5
1 files changed, 5 insertions, 0 deletions
diff --git a/lib/PublicInbox/LeiMirror.pm b/lib/PublicInbox/LeiMirror.pm
index b30cc519..cc5ea1d2 100644
--- a/lib/PublicInbox/LeiMirror.pm
+++ b/lib/PublicInbox/LeiMirror.pm
@@ -995,6 +995,7 @@ sub try_manifest {
         }
         my $ft = File::Temp->new(TEMPLATE => '.manifest-XXXX', %opt);
         my $cmd = $curl->for_uri($lei, $uri, qw(-f -R -o), $ft->filename);
+        push(@$cmd, '-z', $manifest) if -f $manifest;
         my $mf_url = "$uri";
         %opt = map { $_ => $lei->{$_} } (0..2);
         my $cerr = run_reap($lei, $cmd, \%opt);
@@ -1002,6 +1003,10 @@ sub try_manifest {
                 return try_scrape($self) if ($cerr >> 8) == 22; # 404 missing
                 return $lei->child_error($cerr, "@$cmd failed");
         }
+
+        # bail out if curl -z/--timecond hit 304 Not Modified, $ft will be empty
+        return $lei->qerr("# $manifest unchanged") if -f $manifest && !-s $ft;
+
         my $m = eval { decode_manifest($ft, $ft, $uri) };
         if ($@) {
                 warn $@;