about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2015-12-31 21:16:39 +0000
committerEric Wong <e@80x24.org>2016-04-05 18:58:27 +0000
commite82a365d610f4939767c219fd3d642915cd1826c (patch)
tree8f76588b6f5eb3b19e6cc0e7c42c738ac00ba7d2
parent4d3ea41416450e69c157f11e2e9057bc764c1e96 (diff)
downloadpublic-inbox-e82a365d610f4939767c219fd3d642915cd1826c.tar.gz
This lets us one-line git commands easily like ``, but without
having to remember --git-dir or escape arguments.
-rw-r--r--lib/PublicInbox/Git.pm8
-rw-r--r--t/git.t8
2 files changed, 16 insertions, 0 deletions
diff --git a/lib/PublicInbox/Git.pm b/lib/PublicInbox/Git.pm
index a7e50925..ac556426 100644
--- a/lib/PublicInbox/Git.pm
+++ b/lib/PublicInbox/Git.pm
@@ -131,6 +131,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 0f3dbae3..d7b20d0d 100644
--- 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();