]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/Fetch.pm
imap+nntp: share COMPRESS implementation
[public-inbox.git] / lib / PublicInbox / Fetch.pm
index 5ada1f49e4dc28ba39e2c0278208869575e4456a..5261cad198552883ce162ea0fa3b84e908939da1 100644 (file)
@@ -31,13 +31,17 @@ sub fetch_args ($$) {
 }
 
 sub remote_url ($$) {
-       my ($lei, $dir) = @_; # TODO: support non-"origin"?
-       my $cmd = [ qw(git config remote.origin.url) ];
-       my $fh = popen_rd($cmd, undef, { -C => $dir, 2 => $lei->{2} });
-       my $url = <$fh>;
-       close $fh or return;
-       $url =~ s!/*\n!!s;
-       $url;
+       my ($lei, $dir) = @_;
+       my $rn = $lei->{opt}->{'try-remote'} // [ 'origin', '_grokmirror' ];
+       for my $r (@$rn) {
+               my $cmd = [ qw(git config), "remote.$r.url" ];
+               my $fh = popen_rd($cmd, undef, { -C => $dir, 2 => $lei->{2} });
+               my $url = <$fh>;
+               close $fh or next;
+               $url =~ s!/*\n!!s;
+               return $url;
+       }
+       undef
 }
 
 sub do_manifest ($$$) {
@@ -52,7 +56,7 @@ sub do_manifest ($$$) {
                $m0 = eval {
                        PublicInbox::LeiMirror::decode_manifest($fh, $mf, $mf)
                };
-               $lei->err($@) if $@;
+               warn($@) if $@;
        }
        my ($bn) = ($fn =~ m!/([^/]+)\z!);
        my $curl_cmd = $lei->{curl}->for_uri($lei, $muri, qw(-R -o), $bn);
@@ -110,7 +114,7 @@ sub do_fetch { # main entry point
        my ($ibx_uri, @git_dir, @epochs, $mg, @new_epoch, $skip);
        if ($ibx_ver == 1) {
                my $url = remote_url($lei, $dir) //
-                       die "E: $dir missing remote.origin.url\n";
+                       die "E: $dir missing remote.*.url\n";
                $ibx_uri = URI->new($url);
        } else { # v2:
                require PublicInbox::MultiGit;
@@ -128,7 +132,7 @@ sub do_fetch { # main entry point
                                $git_url = $url;
                                $epoch = $nr;
                        } else {
-                               warn "W: $edir missing remote.origin.url\n";
+                               warn "W: $edir missing remote.*.url\n";
                                my $pid = spawn([qw(git config -l)], undef,
                                        { 1 => $lei->{2}, 2 => $lei->{2} });
                                waitpid($pid, 0);
@@ -214,13 +218,12 @@ EOM
        }
        for my $i (@new_epoch) { $mg->epoch_cfg_set($i) }
        if ($ft) {
-               my $fn = $ft->filename;
                if ($mculled) {
                        my $json = PublicInbox::Config->json->encode($m1);
+                       my $fn = $ft->filename;
                        gzip(\$json => $fn) or die "gzip: $GzipError";
                }
-               rename($fn, $mf) or die "E: rename($fn, $mf): $!\n";
-               $ft->unlink_on_destroy(0);
+               PublicInbox::LeiMirror::ft_rename($ft, $mf, 0666);
        }
        $lei->child_error($xit << 8) if $fp2 && $xit;
 }