Eric Wong <e@xxxxxxxxx> writes: > 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? > Signed-off-by: Eric Wong <e@xxxxxxxxx> > --- > 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 };