X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FGit.pm;h=ea2b814e398b2a9bd944a0a82155b866cf43da53;hb=3d41aa23f35501ca92aab8aa42980fa73f7fa74f;hp=bc0e5064d7ca5da0e69febb7076d3639baa2c79b;hpb=3f779258173530ca88f31e1dc5332f951d2c44cd;p=public-inbox.git
diff --git a/lib/PublicInbox/Git.pm b/lib/PublicInbox/Git.pm
index bc0e5064..ea2b814e 100644
--- a/lib/PublicInbox/Git.pm
+++ b/lib/PublicInbox/Git.pm
@@ -1,5 +1,5 @@
-# Copyright (C) 2014-2015 all contributors
-# License: GPLv2 or later (https://www.gnu.org/licenses/gpl-2.0.txt)
+# Copyright (C) 2014-2018 all contributors
+# License: GPLv2 or later
#
# Used to read files from a git repository without excessive forking.
# Used in our web interfaces as well as our -nntpd server.
@@ -28,7 +28,9 @@ sub _bidi_pipe {
my @cmd = ('git', "--git-dir=$self->{git_dir}", qw(cat-file), $batch);
my $redir = { 0 => fileno($out_r), 1 => fileno($in_w) };
- $self->{$pid} = spawn(\@cmd, undef, $redir);
+ my $p = spawn(\@cmd, undef, $redir);
+ defined $p or fail($self, "spawn failed: $!");
+ $self->{$pid} = $p;
$out_w->autoflush(1);
$self->{$out} = $out_w;
$self->{$in} = $in_r;
@@ -37,7 +39,7 @@ sub _bidi_pipe {
sub cat_file {
my ($self, $obj, $ref) = @_;
- $self->_bidi_pipe(qw(--batch in out pid));
+ batch_prepare($self);
$self->{out}->print($obj, "\n") or fail($self, "write error: $!");
my $in = $self->{in};
@@ -87,6 +89,8 @@ sub cat_file {
$rv;
}
+sub batch_prepare ($) { _bidi_pipe($_[0], qw(--batch in out pid)) }
+
sub check {
my ($self, $obj) = @_;
$self->_bidi_pipe(qw(--batch-check in_c out_c pid_c));
@@ -122,6 +126,7 @@ sub popen {
sub qx {
my ($self, @cmd) = @_;
my $fh = $self->popen(@cmd);
+ defined $fh or return;
local $/ = "\n";
return <$fh> if wantarray;
local $/;