]> git.ipfire.org Git - thirdparty/git.git/commitdiff
t1006: prefer shell loop to awk for packed object sizes
authorRené Scharfe <l.s.r@web.de>
Wed, 3 Jan 2024 09:01:52 +0000 (04:01 -0500)
committerJunio C Hamano <gitster@pobox.com>
Wed, 3 Jan 2024 17:26:53 +0000 (09:26 -0800)
To compute the expected on-disk size of packed objects, we sort the
output of show-index by pack offset and then compute the difference
between adjacent entries using awk. This works but has a few readability
problems:

  1. Reading the index in pack order means don't find out the size of an
     oid's entry until we see the _next_ entry. So we have to save it to
     print later.

     We can instead iterate in reverse order, so we compute each oid's
     size as we see it.

  2. Since the awk invocation is inside a text_expect block, we can't
     easily use single-quotes to hold the script. So we use
     double-quotes, but then have to escape the dollar signs in the awk
     script.

     We can swap this out for a shell loop instead (which is made much
     easier by the first change).

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t1006-cat-file.sh

index 0c2eafae651def09de9e934ad856dc1200c79caa..5ea33261289486def635bbbf75c683358357e3ad 100755 (executable)
@@ -1117,14 +1117,16 @@ test_expect_success 'cat-file %(objectsize:disk) with --batch-all-objects' '
                while read idx
                do
                        git show-index <"$idx" >idx.raw &&
-                       sort -n <idx.raw >idx.sorted &&
+                       sort -nr <idx.raw >idx.sorted &&
                        packsz=$(test_file_size "${idx%.idx}.pack") &&
                        end=$((packsz - rawsz)) &&
-                       awk -v end="$end" "
-                         NR > 1 { print oid, \$1 - start }
-                         { start = \$1; oid = \$2 }
-                         END { print oid, end - start }
-                       " idx.sorted ||
+                       while read start oid rest
+                       do
+                               size=$((end - start)) &&
+                               end=$start &&
+                               echo "$oid $size" ||
+                               return 1
+                       done <idx.sorted ||
                        return 1
                done
        } >expect.raw &&