mirror of
https://github.com/git/git.git
synced 2024-11-24 10:26:17 +08:00
Merge branch 'js/sideband-stderr'
* js/sideband-stderr: winansi: support ESC [ K (erase in line) recv_sideband: Bands #2 and #3 always go to stderr
This commit is contained in:
commit
6e5660a7ab
@ -52,7 +52,7 @@ static int run_remote_archiver(int argc, const char **argv,
|
|||||||
die("git archive: expected a flush");
|
die("git archive: expected a flush");
|
||||||
|
|
||||||
/* Now, start reading from fd[0] and spit it out to stdout */
|
/* 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[0]);
|
||||||
close(fd[1]);
|
close(fd[1]);
|
||||||
rv |= finish_connect(conn);
|
rv |= finish_connect(conn);
|
||||||
|
@ -482,7 +482,7 @@ static int sideband_demux(int fd, void *data)
|
|||||||
{
|
{
|
||||||
int *xd = 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)
|
static int get_pack(int xd[2], char **pack_lockfile)
|
||||||
|
@ -18,8 +18,6 @@
|
|||||||
|
|
||||||
This file is git-specific. Therefore, this file does not attempt
|
This file is git-specific. Therefore, this file does not attempt
|
||||||
to implement any codes that are not used by git.
|
to implement any codes that are not used by git.
|
||||||
|
|
||||||
TODO: K
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static HANDLE console;
|
static HANDLE console;
|
||||||
@ -79,6 +77,20 @@ static void set_console_attr(void)
|
|||||||
SetConsoleTextAttribute(console, attributes);
|
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)
|
static const char *set_attr(const char *str)
|
||||||
{
|
{
|
||||||
const char *func;
|
const char *func;
|
||||||
@ -218,7 +230,7 @@ static const char *set_attr(const char *str)
|
|||||||
set_console_attr();
|
set_console_attr();
|
||||||
break;
|
break;
|
||||||
case 'K':
|
case 'K':
|
||||||
/* TODO */
|
erase_in_line();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
/* Unsupported code */
|
/* Unsupported code */
|
||||||
|
19
sideband.c
19
sideband.c
@ -19,7 +19,7 @@
|
|||||||
|
|
||||||
#define FIX_SIZE 10 /* large enough for any of the above */
|
#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 pf = strlen(PREFIX);
|
||||||
unsigned sf;
|
unsigned sf;
|
||||||
@ -41,8 +41,7 @@ int recv_sideband(const char *me, int in_stream, int out, int err)
|
|||||||
if (len == 0)
|
if (len == 0)
|
||||||
break;
|
break;
|
||||||
if (len < 1) {
|
if (len < 1) {
|
||||||
len = sprintf(buf, "%s: protocol error: no band designator\n", me);
|
fprintf(stderr, "%s: protocol error: no band designator\n", me);
|
||||||
safe_write(err, buf, len);
|
|
||||||
return SIDEBAND_PROTOCOL_ERROR;
|
return SIDEBAND_PROTOCOL_ERROR;
|
||||||
}
|
}
|
||||||
band = buf[pf] & 0xff;
|
band = buf[pf] & 0xff;
|
||||||
@ -50,8 +49,8 @@ int recv_sideband(const char *me, int in_stream, int out, int err)
|
|||||||
switch (band) {
|
switch (band) {
|
||||||
case 3:
|
case 3:
|
||||||
buf[pf] = ' ';
|
buf[pf] = ' ';
|
||||||
buf[pf+1+len] = '\n';
|
buf[pf+1+len] = '\0';
|
||||||
safe_write(err, buf, pf+1+len+1);
|
fprintf(stderr, "%s\n", buf);
|
||||||
return SIDEBAND_REMOTE_ERROR;
|
return SIDEBAND_REMOTE_ERROR;
|
||||||
case 2:
|
case 2:
|
||||||
buf[pf] = ' ';
|
buf[pf] = ' ';
|
||||||
@ -95,12 +94,12 @@ int recv_sideband(const char *me, int in_stream, int out, int err)
|
|||||||
memcpy(save, b + brk, sf);
|
memcpy(save, b + brk, sf);
|
||||||
b[brk + sf - 1] = b[brk - 1];
|
b[brk + sf - 1] = b[brk - 1];
|
||||||
memcpy(b + brk - 1, suffix, sf);
|
memcpy(b + brk - 1, suffix, sf);
|
||||||
safe_write(err, b, brk + sf);
|
fprintf(stderr, "%.*s", brk + sf, b);
|
||||||
memcpy(b + brk, save, sf);
|
memcpy(b + brk, save, sf);
|
||||||
len -= brk;
|
len -= brk;
|
||||||
} else {
|
} else {
|
||||||
int l = brk ? brk : len;
|
int l = brk ? brk : len;
|
||||||
safe_write(err, b, l);
|
fprintf(stderr, "%.*s", l, b);
|
||||||
len -= l;
|
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);
|
safe_write(out, buf + pf+1, len);
|
||||||
continue;
|
continue;
|
||||||
default:
|
default:
|
||||||
len = sprintf(buf,
|
fprintf(stderr, "%s: protocol error: bad band #%d\n",
|
||||||
"%s: protocol error: bad band #%d\n",
|
me, band);
|
||||||
me, band);
|
|
||||||
safe_write(err, buf, len);
|
|
||||||
return SIDEBAND_PROTOCOL_ERROR;
|
return SIDEBAND_PROTOCOL_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
#define DEFAULT_PACKET_MAX 1000
|
#define DEFAULT_PACKET_MAX 1000
|
||||||
#define LARGE_PACKET_MAX 65520
|
#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);
|
ssize_t send_sideband(int fd, int band, const char *data, ssize_t sz, int packet_max);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user