1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-19 09:26:09 +02:00

Move sideband server side support into reusable form.

The server side support; this is just the very low level, and the
caller needs to know which band it wants to send things out.

Signed-off-by: Junio C Hamano <junkio@cox.net>
(cherry picked from b786552b67878c7780c50def4c069d46dc54efbe commit)
This commit is contained in:
Junio C Hamano 2006-09-10 03:20:24 -07:00
parent 49a52b1d1f
commit 958c24b1b8
3 changed files with 39 additions and 36 deletions

View File

@ -46,3 +46,29 @@ int recv_sideband(const char *me, int in_stream, int out, int err, char *buf, in
}
return 0;
}
/*
* fd is connected to the remote side; send the sideband data
* over multiplexed packet stream.
*/
ssize_t send_sideband(int fd, int band, const char *data, ssize_t sz, int packet_max)
{
ssize_t ssz = sz;
const char *p = data;
while (sz) {
unsigned n;
char hdr[5];
n = sz;
if (packet_max - 5 < n)
n = packet_max - 5;
sprintf(hdr, "%04x", n + 5);
hdr[4] = band;
safe_write(fd, hdr, 5);
safe_write(fd, p, n);
p += n;
sz -= n;
}
return ssz;
}

View File

@ -7,5 +7,6 @@
#define DEFAULT_PACKET_MAX 1000
int recv_sideband(const char *me, int in_stream, int out, int err, char *, int);
ssize_t send_sideband(int fd, int band, const char *data, ssize_t sz, int packet_max);
#endif

View File

@ -4,6 +4,7 @@
#include "cache.h"
#include "refs.h"
#include "pkt-line.h"
#include "sideband.h"
#include "tag.h"
#include "object.h"
#include "commit.h"
@ -33,45 +34,19 @@ static int strip(char *line, int len)
return len;
}
#define PACKET_MAX 1000
static ssize_t send_client_data(int fd, const char *data, ssize_t sz)
{
ssize_t ssz;
const char *p;
if (use_sideband)
return send_sideband(1, fd, data, sz, DEFAULT_PACKET_MAX);
if (!data) {
if (!use_sideband)
return 0;
packet_flush(1);
if (fd == 3)
/* emergency quit */
fd = 2;
if (fd == 2) {
xwrite(fd, data, sz);
return sz;
}
if (!use_sideband) {
if (fd == 3)
/* emergency quit */
fd = 2;
if (fd == 2) {
xwrite(fd, data, sz);
return sz;
}
return safe_write(fd, data, sz);
}
p = data;
ssz = sz;
while (sz) {
unsigned n;
char hdr[5];
n = sz;
if (PACKET_MAX - 5 < n)
n = PACKET_MAX - 5;
sprintf(hdr, "%04x", n + 5);
hdr[4] = fd;
safe_write(1, hdr, 5);
safe_write(1, p, n);
p += n;
sz -= n;
}
return ssz;
return safe_write(fd, data, sz);
}
static void create_pack_file(void)
@ -308,7 +283,8 @@ static void create_pack_file(void)
goto fail;
fprintf(stderr, "flushed.\n");
}
send_client_data(1, NULL, 0);
if (use_sideband)
packet_flush(1);
return;
}
fail: