git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 1/2] transport: warn if server options are unsupported

From
JTJonathan Tan <jonathantanmy@google.com>
Date
Apr 9, 2019, 20:31 UTC
Message-ID
<af3cc05324f53316eedb2f437789eacb24c11489.1554841624.git.jonathantanmy@google.com>
In-Reply-To
<cover.1554841624.git.jonathantanmy@google.com>

Server options were added in commit 5e3548ef16 ("fetch: send server options when using protocol v2", 2018-04-24), supported only for protocol version 2. Add a warning if server options are specified for the user if a legacy protocol is used instead.

An effort is made to avoid printing the same warning more than once by clearing transport->server_options after the warning, but this does not fully avoid double-printing (for example, when backfulling tags using another fetch with a non-reusable transport).

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
---
 t/t5702-protocol-v2.sh | 17 +++++++++++++++++
 transport.c            |  8 ++++++++
 2 files changed, 25 insertions(+)
diff --git a/t/t5702-protocol-v2.sh b/t/t5702-protocol-v2.sh
index db4ae09f2f..f1a3ff1021 100755
--- a/t/t5702-protocol-v2.sh
+++ b/t/t5702-protocol-v2.sh
@@ -182,6 +182,12 @@ test_expect_success 'server-options are sent when using ls-remote' '
 	grep "server-option=world" log
 '
 
+test_expect_success 'warn if using server-option with ls-remote with legacy protocol' '
+	GIT_TEST_PROTOCOL_VERSION=0 git -c protocol.version=0 \
+		ls-remote -o hello -o world "file://$(pwd)/file_parent" master 2>err &&
+
+	grep "Ignoring server options" err
+'
 
 test_expect_success 'clone with file:// using protocol v2' '
 	test_when_finished "rm -f log" &&
@@ -251,6 +257,17 @@ test_expect_success 'server-options are sent when fetching' '
 	grep "server-option=world" log
 '
 
+test_expect_success 'warn if using server-option with fetch with legacy protocol' '
+	test_when_finished "rm -rf temp_child" &&
+
+	git init temp_child &&
+
+	GIT_TEST_PROTOCOL_VERSION=0 git -C temp_child -c protocol.version=0 \
+		fetch -o hello -o world "file://$(pwd)/file_parent" master 2>err &&
+
+	grep "Ignoring server options" err
+'
+
 test_expect_success 'upload-pack respects config using protocol v2' '
 	git init server &&
 	write_script server/.git/hook <<-\EOF &&
diff --git a/transport.c b/transport.c
index e078812897..14f14ef93c 100644
--- a/transport.c
+++ b/transport.c
@@ -252,6 +252,12 @@ static int connect_setup(struct transport *transport, int for_push)
 	return 0;
 }
 
+static void warn_server_options_unsupported(struct transport *transport)
+{
+	warning(_("Ignoring server options because protocol version does not support it"));
+	transport->server_options = NULL;
+}
+
 /*
  * Obtains the protocol version from the transport and writes it to
  * transport->data->version, first connecting if not already connected.
@@ -286,6 +292,7 @@ static struct ref *handshake(struct transport *transport, int for_push,
 		break;
 	case protocol_v1:
 	case protocol_v0:
+		warn_server_options_unsupported(transport);
 		get_remote_heads(&reader, &refs,
 				 for_push ? REF_NORMAL : 0,
 				 &data->extra_have,
@@ -363,6 +370,7 @@ static int fetch_refs_via_pack(struct transport *transport,
 		break;
 	case protocol_v1:
 	case protocol_v0:
+		warn_server_options_unsupported(transport);
 		refs = fetch_pack(&args, data->fd, data->conn,
 				  refs_tmp ? refs_tmp : transport->remote_refs,
 				  dest, to_fetch, nr_heads, &data->shallow,
-- 
2.21.0.392.gf8f6787159e-goog
Previous: Jonathan TanNext: Jonathan Nieder
Message 7 of 22 in “clone: send server options when using protocol v2”
  1. clone: send server options when using protocol v2Jonathan Tan, Apr 5, 2019
  2. Jonathan NiederApr 6, 2019
  3. Jonathan TanApr 8, 2019
  4. Junio C HamanoApr 9, 2019
  5. Jonathan TanApr 9, 2019
  6. 0/2 Server options when cloningJonathan Tan, Apr 9, 2019
  7. 1/2 transport: warn if server options are unsupportedJonathan Tan, Apr 9, 2019
  8. Jonathan NiederApr 9, 2019
  9. Junio C HamanoApr 10, 2019
  10. 2/2 clone: send server options when using protocol v2Jonathan Tan, Apr 9, 2019
  11. Jonathan NiederApr 9, 2019
  12. 0/2 Server options when cloningJonathan Tan, Apr 11, 2019
  13. 1/2 transport: warn if server options are unsupportedJonathan Tan, Apr 11, 2019
  14. Junio C HamanoApr 12, 2019
  15. 2/2 clone: send server options when using protocol v2Jonathan Tan, Apr 11, 2019
  16. 0/2 Server options when cloningJonathan Tan, Apr 12, 2019
  17. 1/2 transport: die if server options are unsupportedJonathan Tan, Apr 12, 2019
  18. SZEDER GáborApr 12, 2019
  19. Re* [PATCH v4 1/2] transport: die if server options are unsupportedJunio C Hamano, Apr 15, 2019
  20. Junio C HamanoApr 15, 2019
  21. SZEDER GáborApr 15, 2019
  22. 2/2 clone: send server options when using protocol v2Jonathan Tan, Apr 12, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.