Skip to content
This repository was archived by the owner on Nov 9, 2017. It is now read-only.

Commit 9f0af82

Browse files
t-bkasal
authored andcommitted
Config option to disable side-band-64k for transport
Since commit 0c499ea the send-pack builtin uses the side-band-64k capability if advertised by the server. Unfortunately this breaks pushing over the dump git protocol if used over a network connection. The detailed reasons for this breakage are (by courtesy of Jeff Preshing, quoted from ttps://groups.google.com/d/msg/msysgit/at8D7J-h7mw/eaLujILGUWoJ): ---------------------------------------------------------------------------- MinGW wraps Windows sockets in CRT file descriptors in order to mimic the functionality of POSIX sockets. This causes msvcrt.dll to treat sockets as Installable File System (IFS) handles, calling ReadFile, WriteFile, DuplicateHandle and CloseHandle on them. This approach works well in simple cases on recent versions of Windows, but does not support all usage patterns. In particular, using this approach, any attempt to read & write concurrently on the same socket (from one or more processes) will deadlock in a scenario where the read waits for a response from the server which is only invoked after the write. This is what send_pack currently attempts to do in the use_sideband codepath. ---------------------------------------------------------------------------- The new config option "sendpack.sideband" allows to override the side-band-64k capability of the server, and thus makes the dump git protocol work. Other transportation methods like ssh and http/https still benefit from the sideband channel, therefore the default value of "sendpack.sideband" is still true. Signed-off-by: Thomas Braun <[email protected]>
1 parent ec765f6 commit 9f0af82

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

Documentation/config.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2435,3 +2435,9 @@ web.browser::
24352435
Specify a web browser that may be used by some commands.
24362436
Currently only linkgit:git-instaweb[1] and linkgit:git-help[1]
24372437
may use it.
2438+
2439+
sendpack.sideband::
2440+
Allows to disable the side-band-64k capability for send-pack even
2441+
when it is advertised by the server. Makes it possible to work
2442+
around a limitation in the git for windows implementation together
2443+
with the dump git protocol. Defaults to true.

send-pack.c

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,16 @@
1212
#include "version.h"
1313
#include "sha1-array.h"
1414

15+
static int config_use_sideband = 1;
16+
17+
static int send_pack_config(const char *var, const char *value, void *unused)
18+
{
19+
if (!strcmp("sendpack.sideband", var))
20+
config_use_sideband = git_config_bool(var, value);
21+
22+
return 0;
23+
}
24+
1525
static int feed_object(const unsigned char *sha1, int fd, int negative)
1626
{
1727
char buf[42];
@@ -209,14 +219,16 @@ int send_pack(struct send_pack_args *args,
209219
int ret;
210220
struct async demux;
211221

222+
git_config(send_pack_config, NULL);
223+
212224
/* Does the other end support the reporting? */
213225
if (server_supports("report-status"))
214226
status_report = 1;
215227
if (server_supports("delete-refs"))
216228
allow_deleting_refs = 1;
217229
if (server_supports("ofs-delta"))
218230
args->use_ofs_delta = 1;
219-
if (server_supports("side-band-64k"))
231+
if (config_use_sideband && server_supports("side-band-64k"))
220232
use_sideband = 1;
221233
if (server_supports("quiet"))
222234
quiet_supported = 1;

0 commit comments

Comments
 (0)