]> git.ipfire.org Git - thirdparty/git.git/commitdiff
test-lib-functions: simplify packetize() stdin code
authorJeff King <peff@peff.net>
Sun, 29 Mar 2020 15:02:26 +0000 (11:02 -0400)
committerJunio C Hamano <gitster@pobox.com>
Sun, 29 Mar 2020 15:49:47 +0000 (08:49 -0700)
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>
t/test-lib-functions.sh

index 216918a58cef43b8a785e0467a28748be2ab7bae..88b7dbd69a7b7d771b29df191ac3fe09c08486a4 100644 (file)
@@ -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
 }