about summary refs log tree commit homepage
path: root/lib
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2022-11-28 05:31:39 +0000
committerEric Wong <e@80x24.org>2022-11-28 23:38:56 +0000
commit9686e462f9dee7cfa6cf153076e5bf66e4fda74a (patch)
treeb05a342cea8f0ea86e954f7ec8715485fc3dd958 /lib
parente6208a4d8c67e9eccd72d17b85aed7d5a4ad8e31 (diff)
downloadpublic-inbox-9686e462f9dee7cfa6cf153076e5bf66e4fda74a.tar.gz
We can reuse it in PublicInbox::Fetch, too.
Diffstat (limited to 'lib')
-rw-r--r--lib/PublicInbox/Fetch.pm10
-rw-r--r--lib/PublicInbox/LeiMirror.pm27
2 files changed, 16 insertions, 21 deletions
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
 }