lib/PublicInbox/Git.pm | 8 ++++++++ t/git.t | 8 ++++++++ diff --git a/lib/PublicInbox/Git.pm b/lib/PublicInbox/Git.pm index 0f92dd9a82f6e70bc5de58661fbfab0bce76bd47..c406c031bb9f648870d17471e573a74455f74b97 100644 --- a/lib/PublicInbox/Git.pm +++ b/lib/PublicInbox/Git.pm @@ -117,6 +117,14 @@ @cmd = ('git', "--git-dir=$self->{git_dir}", @cmd); popen_rd(\@cmd); } +sub qx { + my ($self, @cmd) = @_; + my $fh = $self->popen(@cmd); + return <$fh> if wantarray; + local $/; + <$fh> +} + sub cleanup { my ($self) = @_; _destroy($self, qw(in out pid)); diff --git a/t/git.t b/t/git.t index 0f3dbae3fec4ca768e2f93c147cd6e12e97dfd2c..d7b20d0deebf4567acd22d57a2c3521c1da3c249 100644 --- a/t/git.t +++ b/t/git.t @@ -129,6 +129,14 @@ open my $fh, '<', $big_data or die "open failed: $!\n"; local $/; is($all, <$fh>, 'entire read matches'); }; + + my $ref = $gcf->qx(qw(cat-file blob), $buf); + is($all, $ref, 'qx read giant single string'); + + my @ref = $gcf->qx(qw(cat-file blob), $buf); + is($all, join('', @ref), 'qx returned array when wanted'); + my $nl = scalar @ref; + ok($nl > 1, "qx returned array length of $nl"); } done_testing();