]> git.99rst.org Git - git.git/commit
t4141: fix inefficient use of dd(1)
authorPatrick Steinhardt <redacted>
Mon, 6 Jul 2026 06:23:58 +0000 (08:23 +0200)
committerJunio C Hamano <redacted>
Mon, 6 Jul 2026 14:21:57 +0000 (07:21 -0700)
commitf0598d079afa3110ef662fd543a83923cf72a5f3
tree1cce40c0e65a350698cfe7c062a3c2d244e54421
parent9769449fc8c9dc508a3cfd4e0af6d182fc6cf619
t4141: fix inefficient use of dd(1)

In t4141 we generate a patch that is roughly 1GB in size to verify that
git-apply(1) indeed rejects that patch. We generate that patch by
prepending a patch header and then executing `test-tool genzeros`
without a limit. This causes us to print infinitely many zeros, and we
limit the overall amount of generated bytes via `test_copy_bytes`.

This test setup is extremely expensive, as `test_copy_bytes` is
implemented via `dd ibs=1 count="$1"`, which copies data one byte at a
time. So as we write 1GB of data, we end up doing 1 billion reads and
writes. This naturally takes a while: it takes 6 minutes on my system,
and around 40 minutes in some CI jobs!

We can do much better though, as genzeros already knows to handle an
optional limit of how much data it is supposed to write, which allows us
to remove the call to `test_copy_bytes`. Furthermore, it has already
been optimized to generate the data fast.

And indeed, doing this conversion drops the test execution to less than
a second on my machine. That means that in theory it becomes feasible to
drop the EXPENSIVE prerequisite now. But git-apply(1) still soaks up 1GB
of data into memory, which may count as being expensive. Consequently,
we keep the prerequisite intact.

Signed-off-by: Patrick Steinhardt <redacted>
Signed-off-by: Junio C Hamano <redacted>
t/t4141-apply-too-large.sh
git clone https://git.99rst.org/PROJECT