]> Sergey Matveev's repositories - public-inbox.git/commitdiff
lei_mirror: use curl -z/--timecond if manifest exists
authorEric Wong <e@80x24.org>
Mon, 28 Nov 2022 05:32:25 +0000 (05:32 +0000)
committerEric Wong <e@80x24.org>
Mon, 28 Nov 2022 23:38:59 +0000 (23:38 +0000)
This lets us save cycles and avoid scanning + comparing manifest
contents by relying on the Last-Modified HTTP response header.

lib/PublicInbox/LeiMirror.pm

index b30cc519b99de1dae1a294ff056ca946df3f3fad..cc5ea1d2a5c0bbbe576ce624e66dbf85e8be1169 100644 (file)
@@ -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 $@;