Add functions to help read and write capabilities. Use these functions in 't/t0021/rot13-filter.pl'. Signed-off-by: Christian Couder <chriscool@xxxxxxxxxxxxx> --- perl/Git/Packet.pm | 33 +++++++++++++++++++++++++++++++++ t/t0021/rot13-filter.pl | 9 ++------- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/perl/Git/Packet.pm b/perl/Git/Packet.pm index b0233caf37..4443b67724 100644 --- a/perl/Git/Packet.pm +++ b/perl/Git/Packet.pm @@ -20,6 +20,9 @@ our @EXPORT = qw( packet_txt_write packet_flush packet_initialize + packet_read_capabilities + packet_write_capabilities + packet_read_and_check_capabilities ); our @EXPORT_OK = @EXPORT; @@ -83,3 +86,33 @@ sub packet_initialize { packet_txt_write( "version=" . $version ); packet_flush(); } + +sub packet_read_capabilities { + my @cap; + while (1) { + my ( $res, $buf ) = packet_bin_read(); + return ( $res, @cap ) if ( $res != 0 ); + unless ( $buf =~ s/\n$// ) { + die "A non-binary line MUST be terminated by an LF.\n" + . "Received: '$buf'"; + } + die "bad capability buf: '$buf'" unless ( $buf =~ s/capability=// ); + push @cap, $buf; + } +} + +sub packet_read_and_check_capabilities { + my @local_caps = @_; + my @remote_res_caps = packet_read_capabilities(); + my $res = shift @remote_res_caps; + my %remote_caps = map { $_ => 1 } @remote_res_caps; + foreach (@local_caps) { + die "'$_' capability not available" unless (exists($remote_caps{$_})); + } + return $res; +} + +sub packet_write_capabilities { + packet_txt_write( "capability=" . $_ ) foreach (@_); + packet_flush(); +} diff --git a/t/t0021/rot13-filter.pl b/t/t0021/rot13-filter.pl index 5b05518640..bbfd52619d 100644 --- a/t/t0021/rot13-filter.pl +++ b/t/t0021/rot13-filter.pl @@ -42,14 +42,9 @@ $debug->flush(); packet_initialize("git-filter", 2); -( packet_txt_read() eq ( 0, "capability=clean" ) ) || die "bad capability"; -( packet_txt_read() eq ( 0, "capability=smudge" ) ) || die "bad capability"; -( packet_bin_read() eq ( 1, "" ) ) || die "bad capability end"; +packet_read_and_check_capabilities("clean", "smudge"); +packet_write_capabilities(@capabilities); -foreach (@capabilities) { - packet_txt_write( "capability=" . $_ ); -} -packet_flush(); print $debug "init handshake complete\n"; $debug->flush(); -- 2.14.0.rc1.52.gf02fb0ddac.dirty