On Wed, Jul 10, 2024 at 4:37 AM Jeff King <peff@xxxxxxxx> wrote: > [...] > It would be possible to do all of this in shell via the Makefile, but it > gets a bit complicated (and requires a lot of extra processes). Instead, > I've written a short perl script that generates the concatenated files > (we already depend on perl, since chainlint.pl uses it). Incidentally, > this improves a few other things: > [...] > diff --git a/t/chainlint-cat.pl b/t/chainlint-cat.pl > @@ -0,0 +1,29 @@ > +#!/usr/bin/env perl > + > +my $outdir = shift; > +open(my $tests, '>', "$outdir/tests") > + or die "unable to open $outdir/tests: $!"; > +open(my $expect, '>', "$outdir/expect") > + or die "unable to open $outdir/expect: $!"; > + > +print $expect "# chainlint: $outdir/tests\n"; > + > +my $offset = 0; > +for my $script (@ARGV) { > + print $expect "# chainlint: $script\n"; > + > + open(my $expect_in, '<', "chainlint/$script.expect") > + or die "unable to open chainlint/$script.expect: $!"; > + while (<$expect_in>) { > + s/^\d+/$& + $offset/e; > + print $expect $_; > + } > + > + open(my $test_in, '<', "chainlint/$script.test") > + or die "unable to open chainlint/$script.test: $!"; > + while (<$test_in>) { > + /^# LINT: / and next; > + print $tests $_; > + $offset++; > + } > +} I'm surprised that we're not closing the two file handles opened on each iteration of this loop. Is that intentional? Or am I forgetting my Perl and they are somehow getting closed anyhow (for instance, by the <...> operator hitting EOF)?