Re: [PATCH 12/20] t: refactor tests depending on Perl to print data
- From
Patrick Steinhardt <ps@pks.im>
- Date
- Mar 24, 2025, 12:46 UTC
- Message-ID
- <Z-FUNgmY9hTsnzds@pks.im>
- In-Reply-To
- <CAPig+cSC3zdur1fCsa7RMNZDcgUK4pUGKb22tpgdANxR6OxNMA@mail.gmail.com>
On Thu, Mar 20, 2025 at 03:33:44PM -0400, Eric Sunshine wrote:
Show 39 quoted lines
> On Thu, Mar 20, 2025 at 5:36 AM Patrick Steinhardt <ps@pks.im> wrote:
> > A bunch of tests rely on Perl to print data in various different ways.
> > These usages fall into the following categories:
> >
> > - Print data conditionally by matching patterns. These usecases can be
> > converted to use awk(1) rather easily.
> >
> > - Print data repeatedly. These usecases can typically be converted to
> > use a combination of `test-tool genzeros` and sed(1).
> >
> > - Print data in reverse. These usecases can be converted to use
> > awk(1).
> >
> > Refactor the tests accordingly so that we can drop a couple of
> > PERL_TEST_HELPERS prerequisites.
> >
> > Signed-off-by: Patrick Steinhardt <ps@pks.im>
> > ---
> > diff --git a/t/t0610-reftable-basics.sh b/t/t0610-reftable-basics.sh
> > @@ -643,12 +643,11 @@ test_expect_success 'basic: commit and list refs' '
> > -test_expect_success PERL_TEST_HELPERS 'basic: can write large commit message' '
> > +test_expect_success 'basic: can write large commit message' '
> > test_when_finished "rm -rf repo" &&
> > git init repo &&
> > - perl -e "
> > - print \"this is a long commit message\" x 50000
> > - " >commit-msg &&
> > +
> > + awk "BEGIN { for (i = 0; i < 50000; i++) print \"this is a long commit message\" }" >commit-msg &&
> > git -C repo commit --allow-empty --file=../commit-msg
> > '
>
> The original Perl version emitted the entire message as a single-line,
> whereas the awk replacement emits 50,000 lines. Was the intent of the
> original specifically to check whether it handled an extremely long
> line correctly, or was it merely checking whether an overall very
> lengthy content was handled correctly? If the former, then this
> semantic change is inconsistent with what this test wants to be
> checking; if the latter, then this semantic change is harmless.It really only wants to check for a big message, the exact format does not matter at all. So in theory, we could even adapt this to use `test-tool genzeros | tr "\000" "a"` or something like that, but I didn't want to argue why that change is okay. The fact that we now have a newline was unintentional.
Show 10 quoted lines
> Also, it is possible to do this entirely in shell without running an > external program (assuming `test` and `printf` are builtins): > > i=0 && > while test $i -lt 50000 > do > echo "this is a long commit message" && > i=$(($i+1)) || > return 1 > done &&
True, but it's significantly slower. We already use awk in many places, so we can just as well use it here. I'll adapt the refactoring to drop the newlines.
Patrick