summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2013-10-22 17:46:47 +0100
committerIan Jackson <ijackson@chiark.greenend.org.uk>2013-10-22 17:46:47 +0100
commite2cb7948aea24d3fd348330c8f5d6e9309be0261 (patch)
tree1b9209285204564629f5c000357400a1d4da191a
parent30016dc35aa58ddfe81a2be07a2d7399705ff971 (diff)
remote protocol fixes
-rwxr-xr-xdgit24
1 files 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;
}