]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/Git.pm
update copyrights for 2018
[public-inbox.git] / lib / PublicInbox / Git.pm
index 473cdffa88d4c5d96230c308815fa0b74ea894dc..ea2b814e398b2a9bd944a0a82155b866cf43da53 100644 (file)
@@ -1,5 +1,5 @@
-# Copyright (C) 2014-2015 all contributors <meta@public-inbox.org>
-# License: GPLv2 or later (https://www.gnu.org/licenses/gpl-2.0.txt)
+# Copyright (C) 2014-2018 all contributors <meta@public-inbox.org>
+# License: GPLv2 or later <https://www.gnu.org/licenses/gpl-2.0.txt>
 #
 # 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,8 @@ sub popen {
 sub qx {
        my ($self, @cmd) = @_;
        my $fh = $self->popen(@cmd);
+       defined $fh or return;
+       local $/ = "\n";
        return <$fh> if wantarray;
        local $/;
        <$fh>