Merge branch 'js/sideband-stderr'
authorJunio C Hamano <gitster@pobox.com>
Wed, 18 Mar 2009 01:58:25 +0000 (18:58 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 18 Mar 2009 01:58:25 +0000 (18:58 -0700)
* js/sideband-stderr:
winansi: support ESC [ K (erase in line)
recv_sideband: Bands #2 and #3 always go to stderr

builtin-archive.c
builtin-fetch-pack.c
compat/winansi.c
sideband.c
sideband.h
index 60adef93632ec64c528e443cf1fb3d656a54e36c..ab50cebba0e6798996cc007ced9079c3f0b94a29 100644 (file)
@@ -52,7 +52,7 @@ static int run_remote_archiver(int argc, const char **argv,
                die("git archive: expected a flush");
 
        /* Now, start reading from fd[0] and spit it out to stdout */
-       rv = recv_sideband("archive", fd[0], 1, 2);
+       rv = recv_sideband("archive", fd[0], 1);
        close(fd[0]);
        close(fd[1]);
        rv |= finish_connect(conn);
index 29f4315e925f4c0d53c52aa114a0a314c2ea5165..d571253a56c80e0b644b220c870b27726c8f3dfc 100644 (file)
@@ -482,7 +482,7 @@ static int sideband_demux(int fd, void *data)
 {
        int *xd = data;
 
-       return recv_sideband("fetch-pack", xd[0], fd, 2);
+       return recv_sideband("fetch-pack", xd[0], fd);
 }
 
 static int get_pack(int xd[2], char **pack_lockfile)
index e2d96dfe6f75213de567174261d9aeba3e663d9d..44dc293ad314379d7835d9d96a5c3fd12ad2b27f 100644 (file)
@@ -18,8 +18,6 @@
 
  This file is git-specific. Therefore, this file does not attempt
  to implement any codes that are not used by git.
-
- TODO: K
 */
 
 static HANDLE console;
@@ -79,6 +77,20 @@ static void set_console_attr(void)
        SetConsoleTextAttribute(console, attributes);
 }
 
+static void erase_in_line(void)
+{
+       CONSOLE_SCREEN_BUFFER_INFO sbi;
+
+       if (!console)
+               return;
+
+       GetConsoleScreenBufferInfo(console, &sbi);
+       FillConsoleOutputCharacterA(console, ' ',
+               sbi.dwSize.X - sbi.dwCursorPosition.X, sbi.dwCursorPosition,
+               NULL);
+}
+
+
 static const char *set_attr(const char *str)
 {
        const char *func;
@@ -218,7 +230,7 @@ static const char *set_attr(const char *str)
                set_console_attr();
                break;
        case 'K':
-               /* TODO */
+               erase_in_line();
                break;
        default:
                /* Unsupported code */
index cca3360546dabf9f018b882f690bd1dea9de534d..899b1ff36619d0077dced9da77f538ab98396a83 100644 (file)
@@ -19,7 +19,7 @@
 
 #define FIX_SIZE 10  /* large enough for any of the above */
 
-int recv_sideband(const char *me, int in_stream, int out, int err)
+int recv_sideband(const char *me, int in_stream, int out)
 {
        unsigned pf = strlen(PREFIX);
        unsigned sf;
@@ -41,8 +41,7 @@ int recv_sideband(const char *me, int in_stream, int out, int err)
                if (len == 0)
                        break;
                if (len < 1) {
-                       len = sprintf(buf, "%s: protocol error: no band designator\n", me);
-                       safe_write(err, buf, len);
+                       fprintf(stderr, "%s: protocol error: no band designator\n", me);
                        return SIDEBAND_PROTOCOL_ERROR;
                }
                band = buf[pf] & 0xff;
@@ -50,8 +49,8 @@ int recv_sideband(const char *me, int in_stream, int out, int err)
                switch (band) {
                case 3:
                        buf[pf] = ' ';
-                       buf[pf+1+len] = '\n';
-                       safe_write(err, buf, pf+1+len+1);
+                       buf[pf+1+len] = '\0';
+                       fprintf(stderr, "%s\n", buf);
                        return SIDEBAND_REMOTE_ERROR;
                case 2:
                        buf[pf] = ' ';
@@ -95,12 +94,12 @@ int recv_sideband(const char *me, int in_stream, int out, int err)
                                        memcpy(save, b + brk, sf);
                                        b[brk + sf - 1] = b[brk - 1];
                                        memcpy(b + brk - 1, suffix, sf);
-                                       safe_write(err, b, brk + sf);
+                                       fprintf(stderr, "%.*s", brk + sf, b);
                                        memcpy(b + brk, save, sf);
                                        len -= brk;
                                } else {
                                        int l = brk ? brk : len;
-                                       safe_write(err, b, l);
+                                       fprintf(stderr, "%.*s", l, b);
                                        len -= l;
                                }
 
@@ -112,10 +111,8 @@ int recv_sideband(const char *me, int in_stream, int out, int err)
                        safe_write(out, buf + pf+1, len);
                        continue;
                default:
-                       len = sprintf(buf,
-                                     "%s: protocol error: bad band #%d\n",
-                                     me, band);
-                       safe_write(err, buf, len);
+                       fprintf(stderr, "%s: protocol error: bad band #%d\n",
+                               me, band);
                        return SIDEBAND_PROTOCOL_ERROR;
                }
        }
index a84b6917c7a17b5f8a922540801e98d46aa24431..d72db35d1e0dc109f75b292762013c11b86426aa 100644 (file)
@@ -7,7 +7,7 @@
 #define DEFAULT_PACKET_MAX 1000
 #define LARGE_PACKET_MAX 65520
 
-int recv_sideband(const char *me, int in_stream, int out, int err);
+int recv_sideband(const char *me, int in_stream, int out);
 ssize_t send_sideband(int fd, int band, const char *data, ssize_t sz, int packet_max);
 
 #endif