Skip to content

Commit 35eb824

Browse files
jonathantanmygitster
authored andcommitted
transport: die if server options are unsupported
Server options were added in commit 5e3548e ("fetch: send server options when using protocol v2", 2018-04-24), supported only for protocol version 2. But if the user specifies server options, and the protocol version being used doesn't support them, the server options are silently ignored. Teach any transport users to die instead in this situation, just like how "push" dies if push options are provided when the server doesn't support them. Signed-off-by: Jonathan Tan <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent aeb582a commit 35eb824

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

t/t5702-protocol-v2.sh

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,13 @@ test_expect_success 'server-options are sent when using ls-remote' '
182182
grep "server-option=world" log
183183
'
184184

185+
test_expect_success 'warn if using server-option with ls-remote with legacy protocol' '
186+
test_must_fail env GIT_TEST_PROTOCOL_VERSION=0 git -c protocol.version=0 \
187+
ls-remote -o hello -o world "file://$(pwd)/file_parent" master 2>err &&
188+
189+
test_i18ngrep "see protocol.version in" err &&
190+
test_i18ngrep "server options require protocol version 2 or later" err
191+
'
185192

186193
test_expect_success 'clone with file:// using protocol v2' '
187194
test_when_finished "rm -f log" &&
@@ -251,6 +258,18 @@ test_expect_success 'server-options are sent when fetching' '
251258
grep "server-option=world" log
252259
'
253260

261+
test_expect_success 'warn if using server-option with fetch with legacy protocol' '
262+
test_when_finished "rm -rf temp_child" &&
263+
264+
git init temp_child &&
265+
266+
test_must_fail env GIT_TEST_PROTOCOL_VERSION=0 git -C temp_child -c protocol.version=0 \
267+
fetch -o hello -o world "file://$(pwd)/file_parent" master 2>err &&
268+
269+
test_i18ngrep "see protocol.version in" err &&
270+
test_i18ngrep "server options require protocol version 2 or later" err
271+
'
272+
254273
test_expect_success 'upload-pack respects config using protocol v2' '
255274
git init server &&
256275
write_script server/.git/hook <<-\EOF &&

transport.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,14 @@ static int connect_setup(struct transport *transport, int for_push)
252252
return 0;
253253
}
254254

255+
static void die_if_server_options(struct transport *transport)
256+
{
257+
if (!transport->server_options || !transport->server_options->nr)
258+
return;
259+
advise(_("see protocol.version in 'git help config' for more details"));
260+
die(_("server options require protocol version 2 or later"));
261+
}
262+
255263
/*
256264
* Obtains the protocol version from the transport and writes it to
257265
* transport->data->version, first connecting if not already connected.
@@ -286,6 +294,7 @@ static struct ref *handshake(struct transport *transport, int for_push,
286294
break;
287295
case protocol_v1:
288296
case protocol_v0:
297+
die_if_server_options(transport);
289298
get_remote_heads(&reader, &refs,
290299
for_push ? REF_NORMAL : 0,
291300
&data->extra_have,
@@ -363,6 +372,7 @@ static int fetch_refs_via_pack(struct transport *transport,
363372
break;
364373
case protocol_v1:
365374
case protocol_v0:
375+
die_if_server_options(transport);
366376
refs = fetch_pack(&args, data->fd, data->conn,
367377
refs_tmp ? refs_tmp : transport->remote_refs,
368378
dest, to_fetch, nr_heads, &data->shallow,

0 commit comments

Comments
 (0)