cope with multiple line breaks within sideband progress messages

A single sideband packet may sometimes contain multiple lines of progress
messages, but we prepend "remote: " only to the whole buffer which creates
a messed up display in that case.  Make sure that the "remote: " prefix
is applied to every remote lines.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
This commit is contained in:
Nicolas Pitre 2007-10-16 21:55:46 -04:00 committed by Shawn O. Pearce
parent 42e18fbf5f
commit ed1902ef5c

View File

@ -17,7 +17,7 @@ int recv_sideband(const char *me, int in_stream, int out, int err)
strcpy(buf, "remote:");
while (1) {
int band, len;
len = packet_read_line(in_stream, buf+7, LARGE_PACKET_MAX);
len = packet_read_line(in_stream, buf+7, LARGE_PACKET_MAX);
if (len == 0)
break;
if (len < 1) {
@ -35,7 +35,22 @@ int recv_sideband(const char *me, int in_stream, int out, int err)
return SIDEBAND_REMOTE_ERROR;
case 2:
buf[7] = ' ';
safe_write(err, buf, 8+len);
len += 8;
while (1) {
int brk = 8;
while (brk < len) {
brk++;
if (buf[brk-1] == '\n' ||
buf[brk-1] == '\r')
break;
}
safe_write(err, buf, brk);
if (brk < len) {
memmove(buf + 8, buf + brk, len - brk);
len = len - brk + 8;
} else
break;
}
continue;
case 1:
safe_write(out, buf+8, len);