From: Eric Wong Date: Mon, 13 Mar 2023 12:00:22 +0000 (+0000) Subject: lei_mirror: do not fetch to read-only directories X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=13c4334908d30c92e3c6954c21f47f2125e0a0ee;p=thirdparty%2Fpublic-inbox.git lei_mirror: do not fetch to read-only directories 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. --- diff --git a/lib/PublicInbox/LeiMirror.pm b/lib/PublicInbox/LeiMirror.pm index 967a6422d..3ec8170fe 100644 --- a/lib/PublicInbox/LeiMirror.pm +++ b/lib/PublicInbox/LeiMirror.pm @@ -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) {