From: Eric Wong <e@80x24.org>
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/?a=commitdiff_plain;h=9686e462f9dee7cfa6cf153076e5bf66e4fda74a;p=public-inbox.git

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
 }