Re: [PATCH 2/2] t9700: ensure cat-file info isn't buffered by default
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jun 17, 2024, 20:50 UTC
- Message-ID
- <xmqq1q4v5m5a.fsf@gitster.g>
- In-Reply-To
- <20240617104326.3522535-3-e@80x24.org>
Eric Wong <e@80x24.org> writes:
Show 6 quoted lines
> Buffering by default breaks some 3rd-party Perl scripts using > cat-file, but this breakage was not detected anywhere in our > test suite. The easiest place to test this behavior is with > Git.pm, since (AFAIK) other equivalent way to test this behavior > from Bourne shell and/or awk would require racy sleeps, > non-portable FIFOs or tedious C code.
Yes, using Perl is a good substitute for writing it in C in this case. I however question the choice to use t9700/test.pl here, which is clearly stated that its purpose is to "test perl interface which is Git.pm", and added tests are not testing anything in Git.pm at all.
Using t9700/test.pl only because it happens to use "perl -MTest::More" sounds a bit eh, suboptimal.
It seems that there are Perl snippets in other tests (including t1006 that is specifically about cat-file). How involved would it be to implement these new tests without modifying unrelated test scripts?
Show 30 quoted lines
> Signed-off-by: Eric Wong <e@80x24.org>
> ---
> t/t9700/test.pl | 14 ++++++++++++++
> 1 file changed, 14 insertions(+)
>
> diff --git a/t/t9700/test.pl b/t/t9700/test.pl
> index d8e85482ab..94a2e2c09d 100755
> --- a/t/t9700/test.pl
> +++ b/t/t9700/test.pl
> @@ -154,6 +154,20 @@ sub adjust_dirsep {
> "abc\"\\ \x07\x08\x09\x0a\x0b\x0c\x0d\x01 ",
> 'unquote escape sequences');
>
> +# ensure --batch-check is unbuffered by default
> +my ($pid, $in, $out, $ctx) = $r->command_bidi_pipe(qw(cat-file --batch-check));
> +print $out $file1hash, "\n" or die $!;
> +my $info = <$in>;
> +is $info, "$file1hash blob 15\n", 'command_bidi_pipe w/ --batch-check';
> +$r->command_close_bidi_pipe($pid, $in, $out, $ctx);
> +
> +# ditto with `info' with --batch-command
> +($pid, $in, $out, $ctx) = $r->command_bidi_pipe(qw(cat-file --batch-command));
> +print $out 'info ', $file1hash, "\n" or die $!;
> +$info = <$in>;
> +is $info, "$file1hash blob 15\n", 'command_bidi_pipe w/ --batch-command=info';
> +$r->command_close_bidi_pipe($pid, $in, $out, $ctx);
> +
> printf "1..%d\n", Test::More->builder->current_test;
>
> my $is_passing = eval { Test::More->is_passing };