]> Sergey Matveev's repositories - public-inbox.git/commitdiff
git: add support for qx wrapper
authorEric Wong <e@80x24.org>
Thu, 31 Dec 2015 21:16:39 +0000 (21:16 +0000)
committerEric Wong <e@80x24.org>
Mon, 11 Apr 2016 04:57:53 +0000 (04:57 +0000)
This lets us one-line git commands easily like ``, but without
having to remember --git-dir or escape arguments.

lib/PublicInbox/Git.pm
t/git.t

index 0f92dd9a82f6e70bc5de58661fbfab0bce76bd47..c406c031bb9f648870d17471e573a74455f74b97 100644 (file)
@@ -117,6 +117,14 @@ sub popen {
        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 (file)
--- a/t/git.t
+++ b/t/git.t
@@ -129,6 +129,14 @@ if (1) {
                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();