From 6cd8fe54810e6f6659894df66f2a11ec96bb5114 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 30 Apr 2014 01:03:30 +0000 Subject: cgi: remove dependency on IPC::Run in CGI 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. --- lib/PublicInbox/Config.pm | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'lib') 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; } -- cgit v1.2.3-24-ge0c7