cope with multiple line breaks within sideband progress messages
authorNicolas Pitre <nico@cam.org>
Wed, 17 Oct 2007 01:55:46 +0000 (21:55 -0400)
committerShawn O. Pearce <spearce@spearce.org>
Wed, 17 Oct 2007 06:54:56 +0000 (02:54 -0400)
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>
sideband.c

index 277fa3c10d19ee7997ee5b38c5f77a6cd04576f1..ab8a1e990db39155efc624ca99e85c1cf8eaefa9 100644 (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);