]> Sergey Matveev's repositories - public-inbox.git/commitdiff
lei_curl: use http.proxy config from git if available
authorEric Wong <e@80x24.org>
Wed, 23 Nov 2022 04:09:58 +0000 (04:09 +0000)
committerEric Wong <e@80x24.org>
Wed, 23 Nov 2022 10:51:26 +0000 (10:51 +0000)
Since HTTP(S) URLs hit by lei or public-inbox-{clone,fetch} are
expected to be git endpoints anyways, fall back to using
http.proxy from git configs to save the user from having to
maintain the same configuration for different things.

lib/PublicInbox/Config.pm
lib/PublicInbox/LeiCurl.pm

index 6a51226e7d11777e64e420312404a698fac838a5..5620bd0e6b6ce7a0f53f5959023c64ae6841b31f 100644 (file)
@@ -533,7 +533,7 @@ sub _fill_ei ($$) {
 }
 
 sub urlmatch {
-       my ($self, $key, $url) = @_;
+       my ($self, $key, $url, $try_git) = @_;
        state $urlmatch_broken; # requires git 1.8.5
        return if $urlmatch_broken;
        my $file = $self->{'-f'} // default_file();
@@ -542,13 +542,19 @@ sub urlmatch {
        my $fh = popen_rd($cmd);
        local $/ = "\0";
        my $val = <$fh>;
-       if (close($fh)) {
-               chomp($val);
-       } else {
-               $urlmatch_broken = 1 if (($? >> 8) != 1);
+       if (!close($fh)) {
                undef $val;
+               if (($? >> 8) != 1) {
+                       $urlmatch_broken = 1;
+               } elsif ($try_git) { # n.b. this takes cwd into account
+                       $cmd = [qw(git config -z --get-urlmatch), $key, $url];
+                       $fh = popen_rd($cmd);
+                       $val = <$fh>;
+                       close($fh) or undef($val);
+               }
        }
        $? = 0; # don't influence lei exit status
+       chomp $val if defined $val;
        $val;
 }
 
index f5e959563fd9fbeb4c99e00820fccffd2c52320a..48c66ee9c0a93564b76e4a66580d5bc8b9da6ae9 100644 (file)
@@ -76,7 +76,7 @@ sub for_uri {
        my $pfx = torsocks($self, $lei, $uri) or return; # error
        if ($uri->scheme =~ /\Ahttps?\z/i) {
                my $cfg = $lei->_lei_cfg;
-               my $p = $cfg ? $cfg->urlmatch('http.Proxy', $$uri) : undef;
+               my $p = $cfg ? $cfg->urlmatch('http.Proxy', $$uri, 1) : undef;
                push(@opt, '--proxy', $p) if defined($p);
        }
        bless [ @$pfx, @$self, @opt, $uri->as_string ], ref($self);