From: Eric Wong Date: Mon, 28 Nov 2022 05:31:39 +0000 (+0000) Subject: lei_mirror: hoist out dump_manifest sub X-Git-Url: http://www.git.stargrave.org/?p=public-inbox.git;a=commitdiff_plain;h=9686e462f9dee7cfa6cf153076e5bf66e4fda74a lei_mirror: hoist out dump_manifest sub We can reuse it in PublicInbox::Fetch, too. --- diff --git a/lib/PublicInbox/Fetch.pm b/lib/PublicInbox/Fetch.pm index 3b6aa389..06ed775f 100644 --- a/lib/PublicInbox/Fetch.pm +++ b/lib/PublicInbox/Fetch.pm @@ -12,8 +12,6 @@ use PublicInbox::LEI; use PublicInbox::LeiCurl; use PublicInbox::LeiMirror; use File::Temp (); -use PublicInbox::Config; -use IO::Compress::Gzip qw(gzip $GzipError); sub new { bless {}, __PACKAGE__ } @@ -233,13 +231,7 @@ EOM } for my $i (@new_epoch) { $mg->epoch_cfg_set($i) } if ($ft) { - if ($mculled) { - my $json = PublicInbox::Config->json->encode($m1); - my $fn = $ft->filename; - my $mtime = (stat($fn))[9]; - gzip(\$json => $fn) or die "gzip: $GzipError"; - utime($mtime, $mtime, $fn) or die "utime(..., $fn): $!"; - } + PublicInbox::LeiMirror::dump_manifest($m1 => $ft) if $mculled; PublicInbox::LeiMirror::ft_rename($ft, $mf, 0666); } $lei->child_error($xit << 8) if $fp2 && $xit; diff --git a/lib/PublicInbox/LeiMirror.pm b/lib/PublicInbox/LeiMirror.pm index b0e6fa53..0df37724 100644 --- a/lib/PublicInbox/LeiMirror.pm +++ b/lib/PublicInbox/LeiMirror.pm @@ -595,6 +595,20 @@ EOM reap_live() while keys(%$LIVE); } +sub dump_manifest ($$) { + my ($m, $ft) = @_; + # write the smaller manifest if epochs were skipped so + # users won't have to delete manifest if they +w an + # epoch they no longer want to skip + my $json = PublicInbox::Config->json->encode($m); + my $mtime = (stat($ft))[9]; + seek($ft, SEEK_SET, 0) or die "seek($ft): $!"; + truncate($ft, 0) or die "truncate($ft): $!"; + gzip(\$json => $ft) or die "gzip($ft): $GzipError"; + $ft->flush or die "flush($ft): $!"; + utime($mtime, $mtime, "$ft") or die "utime(..., $ft): $!"; +} + # FIXME: this gets confused by single inbox instance w/ global manifest.js.gz sub try_manifest { my ($self) = @_; @@ -675,18 +689,7 @@ EOM return if $self->{lei}->{child_error} || $self->{dry_run}; # set by clone_v2_prep/-I/--exclude - if (delete $self->{-culled_manifest}) { - # write the smaller manifest if epochs were skipped so - # users won't have to delete manifest if they +w an - # epoch they no longer want to skip - my $json = PublicInbox::Config->json->encode($m); - my $mtime = (stat($ft))[9]; - seek($ft, SEEK_SET, 0) or die "seek($ft): $!"; - truncate($ft, 0) or die "truncate($ft): $!"; - gzip(\$json => $ft) or die "gzip($ft): $GzipError"; - $ft->flush or die "flush($ft): $!"; - utime($mtime, $mtime, "$ft") or die "utime(..., $ft): $!"; - } + dump_manifest($m => $ft) if delete $self->{-culled_manifest}; ft_rename($ft, "$self->{dst}/manifest.js.gz", 0666); open my $x, '>', "$self->{dst}/mirror.done"; # for _wq_done_wait }