diff options
author | Eric Wong <e@80x24.org> | 2014-04-30 01:03:30 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2014-04-30 01:07:35 +0000 |
commit | 6cd8fe54810e6f6659894df66f2a11ec96bb5114 (patch) | |
tree | 3b9937c4387c8894099aa3ab3a919e1cf0dcafe3 /lib | |
parent | 05d1dac95a93902b5f2877d01c77f02c6455eb85 (diff) | |
download | public-inbox-6cd8fe54810e6f6659894df66f2a11ec96bb5114.tar.gz |
We may not have PATH available on some servers (e.g. webrick) and must rely on the hardcoded system PATH. My installation of IPC::Run does not seem to work without PATH set in the env, however normal Perl "open" calls work fine.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/PublicInbox/Config.pm | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/lib/PublicInbox/Config.pm b/lib/PublicInbox/Config.pm index 364e6091..364f82cd 100644 --- a/lib/PublicInbox/Config.pm +++ b/lib/PublicInbox/Config.pm @@ -4,7 +4,6 @@ package PublicInbox::Config; use strict; use warnings; use File::Path::Expand qw/expand_filename/; -use IPC::Run; # returns key-value pairs of config directives in a hash # if keys may be multi-value, the value is an array ref containing all values @@ -13,10 +12,13 @@ sub new { my ($in, $out); $file = default_file() unless defined($file); - IPC::Run::run([qw/git config --file/, $file, '-l'], \$in, \$out); - $? == 0 or die "git config --file $file -l failed: $?\n"; + my @cmd = (qw/git config/, "--file=$file", '-l'); + my $cmd = join(' ', @cmd); + my $pid = open(my $fh, '-|', @cmd); + defined $pid or die "$cmd failed: $!\n"; my %rv; - foreach my $line (split(/\n/, $out)) { + foreach my $line (<$fh>) { + chomp $line; my ($k, $v) = split(/=/, $line, 2); my $cur = $rv{$k}; @@ -30,6 +32,8 @@ sub new { $rv{$k} = $v; } } + close $fh or die "failed to close ($cmd) pipe: $!\n"; + $? and warn "$$ $cmd exited with: ($pid) $?\n"; bless \%rv, $class; } |