}
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();
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;
}
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);