From e2cb7948aea24d3fd348330c8f5d6e9309be0261 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Tue, 22 Oct 2013 17:46:47 +0100 Subject: remote protocol fixes --- dgit | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/dgit b/dgit index 6ec99ac..186b19e 100755 --- a/dgit +++ b/dgit @@ -180,7 +180,6 @@ sub changedir ($) { sub badproto ($$) { my ($fh, $m) = @_; fail "connection lost: $!" if $fh->error; - fail "connection terminated" if $fh->eof; fail "protocol violation; $m not expected"; } @@ -208,9 +207,8 @@ sub protocol_send_file ($$) { die "$ourfn: $!" unless defined $got; last if !$got; print $fh "data-block ".length($d)."\n" or die $!; - print $d or die $!; + print $fh $d or die $!; } - PF->eof or die "$ourfn $!"; PF->error and die "$ourfn $!"; print $fh "data-end\n" or die $!; close PF; @@ -249,7 +247,7 @@ sub responder_send_command ($) { return unless $we_are_responder; # called even without $we_are_responder printdebug "<< $command\n"; - print $command, "\n" or die $!; + print PO $command, "\n" or die $!; } sub responder_send_file ($$) { @@ -257,7 +255,7 @@ sub responder_send_file ($$) { return unless $we_are_responder; printdebug "[[ $keyword $ourfn\n"; responder_send_command "file $keyword"; - protocol_send_file \*STDOUT, $ourfn; + protocol_send_file \*PO, $ourfn; } sub responder_receive_files ($@) { @@ -266,9 +264,9 @@ sub responder_receive_files ($@) { printdebug "]] $keyword @ourfns\n"; responder_send_command "want $keyword"; foreach my $fn (@ourfns) { - protocol_receive_file \*STDIN, $fn; + protocol_receive_file \*PI, $fn; } - protocol_expect { m/^files-end$/ } \*STDIN; + protocol_expect { m/^files-end$/ } \*PI; } #---------- remote protocol support, initiator ---------- @@ -284,7 +282,7 @@ sub progress { if ($we_are_responder) { my $m = join '', @_; responder_send_command "progress ".length($m) or die $!; - print $m or die $!; + print PO $m or die $!; } else { print @_, "\n"; } @@ -1422,10 +1420,18 @@ sub cmd_remote_push_responder { die unless @rargs; my ($dir) = @rargs; $debugprefix = ' '; - changedir $dir; $we_are_responder = 1; + + open PI, "<&STDIN" or die $!; + open STDIN, "/dev/null" or die $!; + open PO, ">&STDOUT" or die $!; + autoflush PO 1; + open STDOUT, ">&STDERR" or die $!; autoflush STDOUT 1; + responder_send_command("dgit-remote-push-ready"); + + changedir $dir; &cmd_push; } -- cgit v1.2.3