Skip to content

Commit

Permalink
test-lib-functions: simplify packetize() stdin code
Browse files Browse the repository at this point in the history
The code path in packetize() for reading stdin needs to handle NUL
bytes, so we can't rely on shell variables. However, the current code
takes a whopping 4 processes and uses a temporary file. We can do this
much more simply and efficiently by using a single perl invocation (and
we already rely on perl in the matching depacketize() function).

We'll keep the non-stdin code path as it is, since that uses zero extra
processes.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
peff authored and gitster committed Mar 29, 2020
1 parent 4845b77 commit cacae43
Showing 1 changed file with 4 additions and 5 deletions.
9 changes: 4 additions & 5 deletions t/test-lib-functions.sh
Original file line number Diff line number Diff line change
Expand Up @@ -1373,11 +1373,10 @@ packetize() {
packet="$*"
printf '%04x%s' "$((4 + ${#packet}))" "$packet"
else
cat >packetize.tmp &&
len=$(wc -c <packetize.tmp) &&
printf '%04x' "$(($len + 4))" &&
cat packetize.tmp &&
rm -f packetize.tmp
perl -e '
my $packet = do { local $/; <STDIN> };
printf "%04x%s", 4 + length($packet), $packet;
'
fi
}

Expand Down

0 comments on commit cacae43

Please sign in to comment.