From d88fd934bf7b1a9270c278e747f76aaa05bc04e1 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 12 Apr 2023 00:12:58 +0000 Subject: git: cat_async_step: reduce batch-command info checks 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. --- lib/PublicInbox/Git.pm | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'lib/PublicInbox/Git.pm') 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 { -- cgit v1.2.3-24-ge0c7