about summary refs log tree commit homepage
path: root/lib/PublicInbox/Git.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2023-04-12 00:12:58 +0000
committerEric Wong <e@80x24.org>2023-04-12 02:26:10 +0000
commitd88fd934bf7b1a9270c278e747f76aaa05bc04e1 (patch)
treeb6c4864234edf8b1ab90cf9ac5dcb666a8e7e03f /lib/PublicInbox/Git.pm
parent4b1a8231d4bae0931d533b8b8ac8baa56d207d96 (diff)
downloadpublic-inbox-d88fd934bf7b1a9270c278e747f76aaa05bc04e1.tar.gz
This improves readability for me.  Instead of checking for `info '
requests of `--batch-command' in multiple places of every
common branch, do it once per-call and stash its result.

We'll also avoid storing `$bc' for now since the only other
check is in a cold path.
Diffstat (limited to 'lib/PublicInbox/Git.pm')
-rw-r--r--lib/PublicInbox/Git.pm13
1 files changed, 6 insertions, 7 deletions
diff --git a/lib/PublicInbox/Git.pm b/lib/PublicInbox/Git.pm
index f153237b..cc337e5d 100644
--- a/lib/PublicInbox/Git.pm
+++ b/lib/PublicInbox/Git.pm
@@ -262,20 +262,19 @@ sub cat_async_step ($$) {
         my $head = my_readline($self->{in}, $rbuf);
         my $cmd = ref($req) ? $$req : $req;
         # ->fail may be called via Gcf2Client.pm
-        my $bc = $self->{-bc};
+        my $info = $self->{-bc} && substr($cmd, 0, 5) eq 'info ';
         if ($head =~ /^([0-9a-f]{40,}) (\S+) ([0-9]+)$/) {
                 ($oid, $type, $size) = ($1, $2, $3 + 0);
-                unless ($bc && $cmd =~ /\Ainfo /) { # --batch-command
+                unless ($info) { # --batch-command
                         $bref = my_read($self->{in}, $rbuf, $size + 1) or
                                 $self->fail(defined($bref) ?
                                                 'read EOF' : "read: $!");
                         chop($$bref) eq "\n" or
                                         $self->fail('LF missing after blob');
                 }
-        } elsif ($bc && $cmd =~ /\Ainfo / &&
-                        $head =~ / (missing|ambiguous)\n/) {
+        } elsif ($info && $head =~ / (missing|ambiguous)\n/) {
                 $type = $1;
-                $oid = substr($cmd, 5);
+                $oid = substr($cmd, 5); # remove 'info '
         } elsif ($head =~ s/ missing\n//s) {
                 $oid = $head;
                 # ref($req) indicates it's already been retried
@@ -286,7 +285,7 @@ sub cat_async_step ($$) {
                 $type = 'missing';
                 if ($oid eq '') {
                         $oid = $cmd;
-                        $oid =~ s/\A(?:contents|info) // if $bc;
+                        $oid =~ s/\A(?:contents|info) // if $self->{-bc};
                 }
         } else {
                 my $err = $! ? " ($!)" : '';
@@ -294,7 +293,7 @@ sub cat_async_step ($$) {
         }
         $self->{rbuf} = $rbuf if $$rbuf ne '';
         splice(@$inflight, 0, 3); # don't retry $cb on ->fail
-        if ($bc && $cmd =~ /\Ainfo /) {
+        if ($info) {
                 eval { $cb->($oid, $type, $size, $arg, $self) };
                 async_err($self, $req, $oid, $@, 'check') if $@;
         } else {