summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 49a52b1)
raw | patch | inline | side by side (parent: 49a52b1)
author | Junio C Hamano <junkio@cox.net> | |
Sun, 10 Sep 2006 10:20:24 +0000 (03:20 -0700) | ||
committer | Junio C Hamano <junkio@cox.net> | |
Sun, 10 Sep 2006 20:36:50 +0000 (13:36 -0700) |
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)
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)
sideband.c | patch | blob | history | |
sideband.h | patch | blob | history | |
upload-pack.c | patch | blob | history |
diff --git a/sideband.c b/sideband.c
index 861f6219dbf3501d75a8844bf99b99aeac8d5ed9..1b14ff88924668e6803229d4d2cef981823522fb 100644 (file)
--- a/sideband.c
+++ b/sideband.c
}
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;
+}
diff --git a/sideband.h b/sideband.h
index 90b385580ec6f8f7b099c5aa7576c8a818bc633c..c645cf2c521f3153d353ab0466607adeaa1d4498 100644 (file)
--- a/sideband.h
+++ b/sideband.h
#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
diff --git a/upload-pack.c b/upload-pack.c
index 51ce936b060d34a2f759dba4f7aeeecf47a59a4b..1f2f7f75e5c10f0beb708b282a911d52da77b60c 100644 (file)
--- a/upload-pack.c
+++ b/upload-pack.c
#include "cache.h"
#include "refs.h"
#include "pkt-line.h"
+#include "sideband.h"
#include "tag.h"
#include "object.h"
#include "commit.h"
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 (!data) {
- if (!use_sideband)
- return 0;
- packet_flush(1);
- }
-
- 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;
+ if (use_sideband)
+ return send_sideband(1, fd, data, sz, DEFAULT_PACKET_MAX);
+
+ if (fd == 3)
+ /* emergency quit */
+ fd = 2;
+ if (fd == 2) {
+ xwrite(fd, data, sz);
+ return sz;
}
- return ssz;
+ return safe_write(fd, data, sz);
}
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: