]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/Git.pm
www: give tor2web some exposure, too
[public-inbox.git] / lib / PublicInbox / Git.pm
index 473cdffa88d4c5d96230c308815fa0b74ea894dc..59c274702174f9e165ba30f99b4ed0136b04f67f 100644 (file)
@@ -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>