about summary refs log tree commit homepage
path: root/lib/PublicInbox
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2022-11-23 04:09:58 +0000
committerEric Wong <e@80x24.org>2022-11-23 10:51:26 +0000
commit2bd8f48268ac24a4d3cac326a89099639ae1d170 (patch)
tree7825764eec9ddfb1af3ecb7f2c8af533c8b00083 /lib/PublicInbox
parent99acd1de608f99d90cca15737b71a68f21108d20 (diff)
downloadpublic-inbox-2bd8f48268ac24a4d3cac326a89099639ae1d170.tar.gz
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.
Diffstat (limited to 'lib/PublicInbox')
-rw-r--r--lib/PublicInbox/Config.pm16
-rw-r--r--lib/PublicInbox/LeiCurl.pm2
2 files changed, 12 insertions, 6 deletions
diff --git a/lib/PublicInbox/Config.pm b/lib/PublicInbox/Config.pm
index 6a51226e..5620bd0e 100644
--- a/lib/PublicInbox/Config.pm
+++ b/lib/PublicInbox/Config.pm
@@ -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;
 }
 
diff --git a/lib/PublicInbox/LeiCurl.pm b/lib/PublicInbox/LeiCurl.pm
index f5e95956..48c66ee9 100644
--- a/lib/PublicInbox/LeiCurl.pm
+++ b/lib/PublicInbox/LeiCurl.pm
@@ -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);