X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FFetch.pm;h=5261cad198552883ce162ea0fa3b84e908939da1;hb=23af251dd607c4e75ab1e68063f2c885c48cc035;hp=5ada1f49e4dc28ba39e2c0278208869575e4456a;hpb=55c8753c483d697fa0574b45ae77dec40509bb7f;p=public-inbox.git diff --git a/lib/PublicInbox/Fetch.pm b/lib/PublicInbox/Fetch.pm index 5ada1f49..5261cad1 100644 --- a/lib/PublicInbox/Fetch.pm +++ b/lib/PublicInbox/Fetch.pm @@ -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; }