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:
parent
42e18fbf5f
commit
ed1902ef5c
19
sideband.c
19
sideband.c
@ -17,7 +17,7 @@ int recv_sideband(const char *me, int in_stream, int out, int err)
|
|||||||
strcpy(buf, "remote:");
|
strcpy(buf, "remote:");
|
||||||
while (1) {
|
while (1) {
|
||||||
int band, len;
|
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)
|
if (len == 0)
|
||||||
break;
|
break;
|
||||||
if (len < 1) {
|
if (len < 1) {
|
||||||
@ -35,7 +35,22 @@ int recv_sideband(const char *me, int in_stream, int out, int err)
|
|||||||
return SIDEBAND_REMOTE_ERROR;
|
return SIDEBAND_REMOTE_ERROR;
|
||||||
case 2:
|
case 2:
|
||||||
buf[7] = ' ';
|
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;
|
continue;
|
||||||
case 1:
|
case 1:
|
||||||
safe_write(out, buf+8, len);
|
safe_write(out, buf+8, len);
|
||||||
|
Loading…
Reference in New Issue
Block a user