]> git.ipfire.org Git - thirdparty/public-inbox.git/commitdiff
lei_mirror: do not fetch to read-only directories
authorEric Wong <e@80x24.org>
Mon, 13 Mar 2023 12:00:22 +0000 (12:00 +0000)
committerEric Wong <e@80x24.org>
Mon, 13 Mar 2023 12:45:56 +0000 (12:45 +0000)
As with public-inbox-fetch, we shouldn't waste time fetching
into read-only directories, since --epoch= will make unwanted
epoch directories read-only placeholders.

lib/PublicInbox/LeiMirror.pm

index 967a6422dbea0f6a416223414966009332204509..3ec8170fea09a143c5a881dba2a8cacca875c1fc 100644 (file)
@@ -593,8 +593,15 @@ sub clone_v1 {
                die "$uri is a v1 inbox, --epoch is not supported\n";
        $self->{-torsocks} //= $curl->torsocks($lei, $uri) or return;
        my $dst = $self->{cur_dst} // $self->{dst};
-       my $fini = PublicInbox::OnDestroy->new($$, \&v1_done, $self);
        my $resume = -d $dst;
+       if ($resume) { # respect read-only cloned w/ --epoch=
+               my @st = stat(_); # for root
+               if (!-w _ || !($st[2] & 0222)) {
+                       warn "# skipping $dst, not writable\n";
+                       return;
+               }
+       }
+       my $fini = PublicInbox::OnDestroy->new($$, \&v1_done, $self);
        if (my $fgrp = forkgroup_prep($self, $uri)) {
                $fgrp->{-fini} = $fini;
                if ($resume) {