All of lore.kernel.org
 help / color / mirror / Atom feed
From: Brandon Williams <bmwill@google.com>
To: git@vger.kernel.org
Cc: git@jeffhostetler.com, gitster@pobox.com, jrnieder@gmail.com,
	pclouds@gmail.com, peff@peff.net, sbeller@google.com,
	stolee@gmail.com, Brandon Williams <bmwill@google.com>
Subject: [PATCH v4 14/35] connect: request remote refs using v2
Date: Wed, 28 Feb 2018 15:22:31 -0800	[thread overview]
Message-ID: <20180228232252.102167-15-bmwill@google.com> (raw)
In-Reply-To: <20180228232252.102167-1-bmwill@google.com>

Teach the client to be able to request a remote's refs using protocol
v2.  This is done by having a client issue a 'ls-refs' request to a v2
server.

Signed-off-by: Brandon Williams <bmwill@google.com>
---
 builtin/upload-pack.c  |  10 +--
 connect.c              | 138 +++++++++++++++++++++++++++++++++++++++--
 connect.h              |   2 +
 remote.h               |   6 ++
 t/t5702-protocol-v2.sh |  57 +++++++++++++++++
 transport.c            |   2 +-
 6 files changed, 204 insertions(+), 11 deletions(-)
 create mode 100755 t/t5702-protocol-v2.sh

diff --git a/builtin/upload-pack.c b/builtin/upload-pack.c
index 8d53e9794..a757df8da 100644
--- a/builtin/upload-pack.c
+++ b/builtin/upload-pack.c
@@ -5,6 +5,7 @@
 #include "parse-options.h"
 #include "protocol.h"
 #include "upload-pack.h"
+#include "serve.h"
 
 static const char * const upload_pack_usage[] = {
 	N_("git upload-pack [<options>] <dir>"),
@@ -16,6 +17,7 @@ int cmd_upload_pack(int argc, const char **argv, const char *prefix)
 	const char *dir;
 	int strict = 0;
 	struct upload_pack_options opts = { 0 };
+	struct serve_options serve_opts = SERVE_OPTIONS_INIT;
 	struct option options[] = {
 		OPT_BOOL(0, "stateless-rpc", &opts.stateless_rpc,
 			 N_("quit after a single request/response exchange")),
@@ -48,11 +50,9 @@ int cmd_upload_pack(int argc, const char **argv, const char *prefix)
 
 	switch (determine_protocol_version_server()) {
 	case protocol_v2:
-		/*
-		 * fetch support for protocol v2 has not been implemented yet,
-		 * so ignore the request to use v2 and fallback to using v0.
-		 */
-		upload_pack(&opts);
+		serve_opts.advertise_capabilities = opts.advertise_refs;
+		serve_opts.stateless_rpc = opts.stateless_rpc;
+		serve(&serve_opts);
 		break;
 	case protocol_v1:
 		/*
diff --git a/connect.c b/connect.c
index 4b89b984c..6203ce576 100644
--- a/connect.c
+++ b/connect.c
@@ -12,9 +12,11 @@
 #include "sha1-array.h"
 #include "transport.h"
 #include "strbuf.h"
+#include "version.h"
 #include "protocol.h"
 
-static char *server_capabilities;
+static char *server_capabilities_v1;
+static struct argv_array server_capabilities_v2 = ARGV_ARRAY_INIT;
 static const char *parse_feature_value(const char *, const char *, int *);
 
 static int check_ref(const char *name, unsigned int flags)
@@ -62,6 +64,33 @@ static void die_initial_contact(int unexpected)
 		      "and the repository exists."));
 }
 
+/* Checks if the server supports the capability 'c' */
+int server_supports_v2(const char *c, int die_on_error)
+{
+	int i;
+
+	for (i = 0; i < server_capabilities_v2.argc; i++) {
+		const char *out;
+		if (skip_prefix(server_capabilities_v2.argv[i], c, &out) &&
+		    (!*out || *out == '='))
+			return 1;
+	}
+
+	if (die_on_error)
+		die("server doesn't support '%s'", c);
+
+	return 0;
+}
+
+static void process_capabilities_v2(struct packet_reader *reader)
+{
+	while (packet_reader_read(reader) == PACKET_READ_NORMAL)
+		argv_array_push(&server_capabilities_v2, reader->line);
+
+	if (reader->status != PACKET_READ_FLUSH)
+		die("expected flush after capabilities");
+}
+
 enum protocol_version discover_version(struct packet_reader *reader)
 {
 	enum protocol_version version = protocol_unknown_version;
@@ -84,7 +113,7 @@ enum protocol_version discover_version(struct packet_reader *reader)
 
 	switch (version) {
 	case protocol_v2:
-		die("support for protocol v2 not implemented yet");
+		process_capabilities_v2(reader);
 		break;
 	case protocol_v1:
 		/* Read the peeked version line */
@@ -128,7 +157,7 @@ static void parse_one_symref_info(struct string_list *symref, const char *val, i
 static void annotate_refs_with_symref_info(struct ref *ref)
 {
 	struct string_list symref = STRING_LIST_INIT_DUP;
-	const char *feature_list = server_capabilities;
+	const char *feature_list = server_capabilities_v1;
 
 	while (feature_list) {
 		int len;
@@ -157,7 +186,7 @@ static void process_capabilities(const char *line, int *len)
 	int nul_location = strlen(line);
 	if (nul_location == *len)
 		return;
-	server_capabilities = xstrdup(line + nul_location + 1);
+	server_capabilities_v1 = xstrdup(line + nul_location + 1);
 	*len = nul_location;
 }
 
@@ -292,6 +321,105 @@ struct ref **get_remote_heads(struct packet_reader *reader,
 	return list;
 }
 
+/* Returns 1 when a valid ref has been added to `list`, 0 otherwise */
+static int process_ref_v2(const char *line, struct ref ***list)
+{
+	int ret = 1;
+	int i = 0;
+	struct object_id old_oid;
+	struct ref *ref;
+	struct string_list line_sections = STRING_LIST_INIT_DUP;
+	const char *end;
+
+	/*
+	 * Ref lines have a number of fields which are space deliminated.  The
+	 * first field is the OID of the ref.  The second field is the ref
+	 * name.  Subsequent fields (symref-target and peeled) are optional and
+	 * don't have a particular order.
+	 */
+	if (string_list_split(&line_sections, line, ' ', -1) < 2) {
+		ret = 0;
+		goto out;
+	}
+
+	if (parse_oid_hex(line_sections.items[i++].string, &old_oid, &end) ||
+	    *end) {
+		ret = 0;
+		goto out;
+	}
+
+	ref = alloc_ref(line_sections.items[i++].string);
+
+	oidcpy(&ref->old_oid, &old_oid);
+	**list = ref;
+	*list = &ref->next;
+
+	for (; i < line_sections.nr; i++) {
+		const char *arg = line_sections.items[i].string;
+		if (skip_prefix(arg, "symref-target:", &arg))
+			ref->symref = xstrdup(arg);
+
+		if (skip_prefix(arg, "peeled:", &arg)) {
+			struct object_id peeled_oid;
+			char *peeled_name;
+			struct ref *peeled;
+			if (parse_oid_hex(arg, &peeled_oid, &end) || *end) {
+				ret = 0;
+				goto out;
+			}
+
+			peeled_name = xstrfmt("%s^{}", ref->name);
+			peeled = alloc_ref(peeled_name);
+
+			oidcpy(&peeled->old_oid, &peeled_oid);
+			**list = peeled;
+			*list = &peeled->next;
+
+			free(peeled_name);
+		}
+	}
+
+out:
+	string_list_clear(&line_sections, 0);
+	return ret;
+}
+
+struct ref **get_remote_refs(int fd_out, struct packet_reader *reader,
+			     struct ref **list, int for_push,
+			     const struct argv_array *ref_patterns)
+{
+	int i;
+	*list = NULL;
+
+	if (server_supports_v2("ls-refs", 1))
+		packet_write_fmt(fd_out, "command=ls-refs\n");
+
+	if (server_supports_v2("agent", 0))
+		packet_write_fmt(fd_out, "agent=%s", git_user_agent_sanitized());
+
+	packet_delim(fd_out);
+	/* When pushing we don't want to request the peeled tags */
+	if (!for_push)
+		packet_write_fmt(fd_out, "peel\n");
+	packet_write_fmt(fd_out, "symrefs\n");
+	for (i = 0; ref_patterns && i < ref_patterns->argc; i++) {
+		packet_write_fmt(fd_out, "ref-pattern %s\n",
+				 ref_patterns->argv[i]);
+	}
+	packet_flush(fd_out);
+
+	/* Process response from server */
+	while (packet_reader_read(reader) == PACKET_READ_NORMAL) {
+		if (!process_ref_v2(reader->line, &list))
+			die("invalid ls-refs response: %s", reader->line);
+	}
+
+	if (reader->status != PACKET_READ_FLUSH)
+		die("expected flush after ref listing");
+
+	return list;
+}
+
 static const char *parse_feature_value(const char *feature_list, const char *feature, int *lenp)
 {
 	int len;
@@ -336,7 +464,7 @@ int parse_feature_request(const char *feature_list, const char *feature)
 
 const char *server_feature_value(const char *feature, int *len)
 {
-	return parse_feature_value(server_capabilities, feature, len);
+	return parse_feature_value(server_capabilities_v1, feature, len);
 }
 
 int server_supports(const char *feature)
diff --git a/connect.h b/connect.h
index cdb8979dc..8898d4495 100644
--- a/connect.h
+++ b/connect.h
@@ -16,4 +16,6 @@ extern int url_is_local_not_ssh(const char *url);
 struct packet_reader;
 extern enum protocol_version discover_version(struct packet_reader *reader);
 
+extern int server_supports_v2(const char *c, int die_on_error);
+
 #endif
diff --git a/remote.h b/remote.h
index 2016461df..3a9db30cf 100644
--- a/remote.h
+++ b/remote.h
@@ -151,11 +151,17 @@ void free_refs(struct ref *ref);
 
 struct oid_array;
 struct packet_reader;
+struct argv_array;
 extern struct ref **get_remote_heads(struct packet_reader *reader,
 				     struct ref **list, unsigned int flags,
 				     struct oid_array *extra_have,
 				     struct oid_array *shallow_points);
 
+/* Used for protocol v2 in order to retrieve refs from a remote */
+extern struct ref **get_remote_refs(int fd_out, struct packet_reader *reader,
+				    struct ref **list, int for_push,
+				    const struct argv_array *ref_patterns);
+
 int resolve_remote_symref(struct ref *ref, struct ref *list);
 int ref_newer(const struct object_id *new_oid, const struct object_id *old_oid);
 
diff --git a/t/t5702-protocol-v2.sh b/t/t5702-protocol-v2.sh
new file mode 100755
index 000000000..dc5f813be
--- /dev/null
+++ b/t/t5702-protocol-v2.sh
@@ -0,0 +1,57 @@
+#!/bin/sh
+
+test_description='test git wire-protocol version 2'
+
+TEST_NO_CREATE_REPO=1
+
+. ./test-lib.sh
+
+# Test protocol v2 with 'git://' transport
+#
+. "$TEST_DIRECTORY"/lib-git-daemon.sh
+start_git_daemon --export-all --enable=receive-pack
+daemon_parent=$GIT_DAEMON_DOCUMENT_ROOT_PATH/parent
+
+test_expect_success 'create repo to be served by git-daemon' '
+	git init "$daemon_parent" &&
+	test_commit -C "$daemon_parent" one
+'
+
+test_expect_success 'list refs with git:// using protocol v2' '
+	test_when_finished "rm -f log" &&
+
+	GIT_TRACE_PACKET="$(pwd)/log" git -c protocol.version=2 \
+		ls-remote --symref "$GIT_DAEMON_URL/parent" >actual &&
+
+	# Client requested to use protocol v2
+	grep "git> .*\\\0\\\0version=2\\\0$" log &&
+	# Server responded using protocol v2
+	grep "git< version 2" log &&
+
+	git ls-remote --symref "$GIT_DAEMON_URL/parent" >expect &&
+	test_cmp actual expect
+'
+
+stop_git_daemon
+
+# Test protocol v2 with 'file://' transport
+#
+test_expect_success 'create repo to be served by file:// transport' '
+	git init file_parent &&
+	test_commit -C file_parent one
+'
+
+test_expect_success 'list refs with file:// using protocol v2' '
+	test_when_finished "rm -f log" &&
+
+	GIT_TRACE_PACKET="$(pwd)/log" git -c protocol.version=2 \
+		ls-remote --symref "file://$(pwd)/file_parent" >actual &&
+
+	# Server responded using protocol v2
+	grep "git< version 2" log &&
+
+	git ls-remote --symref "file://$(pwd)/file_parent" >expect &&
+	test_cmp actual expect
+'
+
+test_done
diff --git a/transport.c b/transport.c
index 83d9dd1df..ffc6b2614 100644
--- a/transport.c
+++ b/transport.c
@@ -204,7 +204,7 @@ static struct ref *get_refs_via_connect(struct transport *transport, int for_pus
 	data->version = discover_version(&reader);
 	switch (data->version) {
 	case protocol_v2:
-		die("support for protocol v2 not implemented yet");
+		get_remote_refs(data->fd[1], &reader, &refs, for_push, NULL);
 		break;
 	case protocol_v1:
 	case protocol_v0:
-- 
2.16.2.395.g2e18187dfd-goog


  parent reply	other threads:[~2018-02-28 23:24 UTC|newest]

Thread overview: 362+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-03  0:18 [PATCH 00/26] protocol version 2 Brandon Williams
2018-01-03  0:18 ` [PATCH 01/26] pkt-line: introduce packet_read_with_status Brandon Williams
2018-01-03 19:27   ` Stefan Beller
2018-01-05 23:41     ` Brandon Williams
2018-01-09 18:04   ` Jonathan Tan
2018-01-09 19:28     ` Brandon Williams
2018-01-03  0:18 ` [PATCH 02/26] pkt-line: introduce struct packet_reader Brandon Williams
2018-01-09 18:08   ` Jonathan Tan
2018-01-09 19:19     ` Brandon Williams
2018-01-03  0:18 ` [PATCH 03/26] pkt-line: add delim packet support Brandon Williams
2018-01-03  0:18 ` [PATCH 04/26] upload-pack: convert to a builtin Brandon Williams
2018-01-03 20:33   ` Stefan Beller
2018-01-03 20:39     ` Brandon Williams
2018-02-21 21:47       ` Jonathan Nieder
2018-02-21 23:35         ` Junio C Hamano
2018-01-03  0:18 ` [PATCH 05/26] upload-pack: factor out processing lines Brandon Williams
2018-01-03 20:38   ` Stefan Beller
2018-01-03  0:18 ` [PATCH 06/26] transport: use get_refs_via_connect to get refs Brandon Williams
2018-01-03 21:20   ` Stefan Beller
2018-01-03  0:18 ` [PATCH 07/26] connect: convert get_remote_heads to use struct packet_reader Brandon Williams
2018-01-09 18:27   ` Jonathan Tan
2018-01-09 19:09     ` Brandon Williams
2018-01-03  0:18 ` [PATCH 08/26] connect: discover protocol version outside of get_remote_heads Brandon Williams
2018-01-03  0:18 ` [PATCH 09/26] transport: store protocol version Brandon Williams
2018-01-09 18:41   ` Jonathan Tan
2018-01-09 19:15     ` Brandon Williams
2018-01-03  0:18 ` [PATCH 10/26] protocol: introduce enum protocol_version value protocol_v2 Brandon Williams
2018-01-03  0:18 ` [PATCH 11/26] serve: introduce git-serve Brandon Williams
2018-01-09 20:24   ` Jonathan Tan
2018-01-09 22:16     ` Brandon Williams
2018-01-09 22:28       ` Jonathan Tan
2018-01-09 22:34         ` Brandon Williams
2018-02-01 18:48   ` Jeff Hostetler
2018-02-01 18:57     ` Stefan Beller
2018-02-01 19:09       ` Jeff Hostetler
2018-02-01 20:05         ` Brandon Williams
2018-02-01 19:45       ` Randall S. Becker
2018-02-01 20:08         ` 'Brandon Williams'
2018-02-01 20:37           ` Randall S. Becker
2018-02-01 20:50             ` Stefan Beller
2018-01-03  0:18 ` [PATCH 12/26] ls-refs: introduce ls-refs server command Brandon Williams
2018-01-04  0:17   ` Stefan Beller
2018-01-05 23:49     ` Brandon Williams
2018-01-09 20:50   ` Jonathan Tan
2018-01-16 19:23     ` Brandon Williams
2018-02-01 19:16   ` Jeff Hostetler
2018-02-07  0:55     ` Brandon Williams
2018-01-03  0:18 ` [PATCH 13/26] connect: request remote refs using v2 Brandon Williams
2018-01-09 22:24   ` Jonathan Tan
2018-01-03  0:18 ` [PATCH 14/26] transport: convert get_refs_list to take a list of ref patterns Brandon Williams
2018-01-03  0:18 ` [PATCH 15/26] transport: convert transport_get_remote_refs " Brandon Williams
2018-01-03  0:18 ` [PATCH 16/26] ls-remote: pass ref patterns when requesting a remote's refs Brandon Williams
2018-01-03  0:18 ` [PATCH 17/26] fetch: pass ref patterns when fetching Brandon Williams
2018-01-03  0:18 ` [PATCH 18/26] push: pass ref patterns when pushing Brandon Williams
2018-01-03  0:18 ` [PATCH 19/26] upload-pack: introduce fetch server command Brandon Williams
2018-01-04  1:07   ` Stefan Beller
2018-01-03  0:18 ` [PATCH 20/26] fetch-pack: perform a fetch using v2 Brandon Williams
2018-01-04  1:23   ` Stefan Beller
2018-01-05 23:55     ` Brandon Williams
2018-01-10  0:05   ` Jonathan Tan
2018-01-03  0:18 ` [PATCH 21/26] transport-helper: remove name parameter Brandon Williams
2018-01-03  0:18 ` [PATCH 22/26] transport-helper: refactor process_connect_service Brandon Williams
2018-01-03  0:18 ` [PATCH 23/26] transport-helper: introduce connect-half-duplex Brandon Williams
2018-01-03  0:18 ` [PATCH 24/26] pkt-line: add packet_buf_write_len function Brandon Williams
2018-01-03  0:18 ` [PATCH 25/26] remote-curl: create copy of the service name Brandon Williams
2018-01-03  0:18 ` [PATCH 26/26] remote-curl: implement connect-half-duplex command Brandon Williams
2018-01-10  0:10   ` Jonathan Tan
2018-01-10 17:57   ` Jonathan Tan
2018-01-11  1:09     ` Brandon Williams
2018-01-09 17:55 ` [PATCH 00/26] protocol version 2 Jonathan Tan
2018-01-11  0:23   ` Brandon Williams
2018-01-25 23:58 ` [PATCH v2 00/27] " Brandon Williams
2018-01-25 23:58   ` [PATCH v2 01/27] pkt-line: introduce packet_read_with_status Brandon Williams
2018-01-25 23:58   ` [PATCH v2 02/27] pkt-line: introduce struct packet_reader Brandon Williams
2018-01-25 23:58   ` [PATCH v2 03/27] pkt-line: add delim packet support Brandon Williams
2018-01-25 23:58   ` [PATCH v2 04/27] upload-pack: convert to a builtin Brandon Williams
2018-01-25 23:58   ` [PATCH v2 05/27] upload-pack: factor out processing lines Brandon Williams
2018-01-26 20:12     ` Stefan Beller
2018-01-26 21:33       ` Brandon Williams
2018-01-31 14:08         ` Derrick Stolee
2018-01-25 23:58   ` [PATCH v2 06/27] transport: use get_refs_via_connect to get refs Brandon Williams
2018-01-25 23:58   ` [PATCH v2 07/27] connect: convert get_remote_heads to use struct packet_reader Brandon Williams
2018-01-25 23:58   ` [PATCH v2 08/27] connect: discover protocol version outside of get_remote_heads Brandon Williams
2018-01-31 14:40     ` Derrick Stolee
2018-02-01 17:57       ` Brandon Williams
2018-01-25 23:58   ` [PATCH v2 09/27] transport: store protocol version Brandon Williams
2018-01-31 14:45     ` Derrick Stolee
2018-01-25 23:58   ` [PATCH v2 10/27] protocol: introduce enum protocol_version value protocol_v2 Brandon Williams
2018-01-31 14:54     ` Derrick Stolee
2018-02-02 22:44       ` Brandon Williams
2018-02-05 14:14         ` Derrick Stolee
2018-01-25 23:58   ` [PATCH v2 11/27] test-pkt-line: introduce a packet-line test helper Brandon Williams
2018-01-25 23:58   ` [PATCH v2 12/27] serve: introduce git-serve Brandon Williams
2018-01-26 10:39     ` Duy Nguyen
2018-02-27  5:46       ` Jonathan Nieder
2018-01-31 15:39     ` Derrick Stolee
2018-01-25 23:58   ` [PATCH v2 13/27] ls-refs: introduce ls-refs server command Brandon Williams
2018-01-26 22:20     ` Stefan Beller
2018-02-02 22:31       ` Brandon Williams
2018-01-25 23:58   ` [PATCH v2 14/27] connect: request remote refs using v2 Brandon Williams
2018-01-31 15:22     ` Derrick Stolee
2018-01-31 20:10       ` Eric Sunshine
2018-01-31 22:14         ` Derrick Stolee
2018-01-25 23:58   ` [PATCH v2 15/27] transport: convert get_refs_list to take a list of ref patterns Brandon Williams
2018-01-25 23:58   ` [PATCH v2 16/27] transport: convert transport_get_remote_refs " Brandon Williams
2018-01-25 23:58   ` [PATCH v2 17/27] ls-remote: pass ref patterns when requesting a remote's refs Brandon Williams
2018-01-25 23:58   ` [PATCH v2 18/27] fetch: pass ref patterns when fetching Brandon Williams
2018-01-25 23:58   ` [PATCH v2 19/27] push: pass ref patterns when pushing Brandon Williams
2018-01-25 23:58   ` [PATCH v2 20/27] upload-pack: introduce fetch server command Brandon Williams
2018-01-25 23:58   ` [PATCH v2 21/27] fetch-pack: perform a fetch using v2 Brandon Williams
2018-01-25 23:58   ` [PATCH v2 22/27] transport-helper: remove name parameter Brandon Williams
2018-01-25 23:58   ` [PATCH v2 23/27] transport-helper: refactor process_connect_service Brandon Williams
2018-01-25 23:58   ` [PATCH v2 24/27] transport-helper: introduce stateless-connect Brandon Williams
2018-01-25 23:58   ` [PATCH v2 25/27] pkt-line: add packet_buf_write_len function Brandon Williams
2018-01-25 23:58   ` [PATCH v2 26/27] remote-curl: create copy of the service name Brandon Williams
2018-01-25 23:58   ` [PATCH v2 27/27] remote-curl: implement stateless-connect command Brandon Williams
2018-01-31 16:00   ` [PATCH v2 00/27] protocol version 2 Derrick Stolee
2018-02-07  0:58     ` Brandon Williams
2018-02-01 19:40   ` Jeff Hostetler
2018-02-07  1:12   ` [PATCH v3 00/35] " Brandon Williams
2018-02-07  1:12     ` [PATCH v3 01/35] pkt-line: introduce packet_read_with_status Brandon Williams
2018-02-13  0:25       ` Jonathan Nieder
2018-02-07  1:12     ` [PATCH v3 02/35] pkt-line: introduce struct packet_reader Brandon Williams
2018-02-13  0:49       ` Jonathan Nieder
2018-02-27 18:14         ` Brandon Williams
2018-02-27 19:20           ` Jonathan Nieder
2018-02-27  5:57       ` Jonathan Nieder
2018-02-27  6:12         ` Jonathan Nieder
2018-02-07  1:12     ` [PATCH v3 03/35] pkt-line: add delim packet support Brandon Williams
2018-02-22 19:13       ` Stefan Beller
2018-02-22 19:37         ` Brandon Williams
2018-02-07  1:12     ` [PATCH v3 04/35] upload-pack: convert to a builtin Brandon Williams
2018-02-21 21:44       ` Jonathan Tan
2018-02-22  9:58         ` Jeff King
2018-02-22 18:07           ` Brandon Williams
2018-02-22 18:14             ` Jeff King
2018-02-22 19:38               ` Jonathan Nieder
2018-02-22 20:19                 ` Jeff King
2018-02-22 20:21                   ` Jeff King
2018-02-22 21:26                     ` Jonathan Nieder
2018-02-22 21:44                       ` Jeff King
2018-03-12 22:43                         ` Jonathan Nieder
2018-03-12 23:28                           ` Jeff King
2018-03-12 23:37                             ` Jonathan Nieder
2018-03-12 23:52                               ` Jeff King
2018-02-23 21:09                     ` Brandon Williams
2018-03-03  4:24                       ` Jeff King
2018-02-22 21:24                   ` Jonathan Nieder
2018-02-22 21:44                     ` Jeff King
2018-02-22 22:21                       ` Jeff King
2018-02-22 22:42                         ` Jonathan Nieder
2018-02-22 23:05                           ` Jeff King
2018-02-22 23:23                             ` Jeff King
2018-02-07  1:12     ` [PATCH v3 05/35] upload-pack: factor out processing lines Brandon Williams
2018-02-22 19:31       ` Stefan Beller
2018-02-22 19:39         ` Brandon Williams
2018-02-07  1:12     ` [PATCH v3 06/35] transport: use get_refs_via_connect to get refs Brandon Williams
2018-02-27  6:08       ` Jonathan Nieder
2018-02-27 18:17         ` Brandon Williams
2018-02-27 19:25           ` Jonathan Nieder
2018-02-27 19:46             ` Brandon Williams
2018-02-07  1:12     ` [PATCH v3 07/35] connect: convert get_remote_heads to use struct packet_reader Brandon Williams
2018-02-22 19:52       ` Stefan Beller
2018-02-22 20:09       ` Stefan Beller
2018-02-23 21:30         ` Brandon Williams
2018-02-23 21:48           ` Stefan Beller
2018-02-23 22:56             ` Brandon Williams
2018-02-07  1:12     ` [PATCH v3 08/35] connect: discover protocol version outside of get_remote_heads Brandon Williams
2018-02-21 22:11       ` Jonathan Tan
2018-02-22 18:17         ` Brandon Williams
2018-02-22 19:22           ` Jonathan Tan
2018-02-07  1:12     ` [PATCH v3 09/35] transport: store protocol version Brandon Williams
2018-02-07  1:12     ` [PATCH v3 10/35] protocol: introduce enum protocol_version value protocol_v2 Brandon Williams
2018-02-27  6:18       ` Jonathan Nieder
2018-02-27 18:41         ` Brandon Williams
2018-02-07  1:12     ` [PATCH v3 11/35] test-pkt-line: introduce a packet-line test helper Brandon Williams
2018-02-22 20:40       ` Stefan Beller
2018-02-23 21:22         ` Brandon Williams
2018-03-03  4:25           ` Jeff King
2018-03-05 18:48             ` Brandon Williams
2018-02-07  1:12     ` [PATCH v3 12/35] serve: introduce git-serve Brandon Williams
2018-02-21 22:45       ` Jonathan Tan
2018-02-23 21:33         ` Brandon Williams
2018-02-27 18:05           ` Jonathan Tan
2018-02-27 18:34             ` Brandon Williams
2018-02-22  9:33       ` Jeff King
2018-02-23 21:45         ` Brandon Williams
2018-03-03  4:33           ` Jeff King
2018-03-05 18:43             ` Brandon Williams
2018-03-05 20:52               ` Jeff King
2018-03-05 21:36                 ` Jonathan Nieder
2018-03-06  6:29                   ` Jeff King
2018-03-12 23:46                     ` Jeff King
2018-02-07  1:12     ` [PATCH v3 13/35] ls-refs: introduce ls-refs server command Brandon Williams
2018-02-22  9:48       ` Jeff King
2018-02-23  0:45         ` Brandon Williams
2018-02-24  0:19           ` Brandon Williams
2018-02-24  4:03             ` Jeff King
2018-02-24  4:01           ` Jeff King
2018-02-26 22:33             ` Junio C Hamano
2018-02-27  0:02             ` Ævar Arnfjörð Bjarmason
2018-02-27  5:15               ` Jonathan Nieder
2018-02-27 18:02                 ` Brandon Williams
2018-02-07  1:12     ` [PATCH v3 14/35] connect: request remote refs using v2 Brandon Williams
2018-02-21 22:54       ` Jonathan Tan
2018-02-22 18:19         ` Brandon Williams
2018-02-22 18:26           ` Jeff King
2018-02-22 19:25             ` Jonathan Tan
2018-02-27  6:21               ` Jonathan Nieder
2018-02-27 21:58                 ` Junio C Hamano
2018-02-27 22:04                   ` Jeff King
2018-02-27 22:10                     ` Eric Sunshine
2018-02-27 22:18                       ` Jeff King
2018-02-27 23:32                         ` Junio C Hamano
2018-02-27  6:51       ` Jonathan Nieder
2018-02-27 19:30         ` Brandon Williams
2018-02-07  1:12     ` [PATCH v3 15/35] transport: convert get_refs_list to take a list of ref patterns Brandon Williams
2018-02-21 22:56       ` Jonathan Tan
2018-02-22 18:25         ` Brandon Williams
2018-02-07  1:12     ` [PATCH v3 16/35] transport: convert transport_get_remote_refs " Brandon Williams
2018-02-21 22:58       ` Jonathan Tan
2018-02-22 18:26         ` Brandon Williams
2018-02-22 19:32           ` Jonathan Tan
2018-02-22 19:51             ` Brandon Williams
2018-02-07  1:12     ` [PATCH v3 17/35] ls-remote: pass ref patterns when requesting a remote's refs Brandon Williams
2018-02-07  1:12     ` [PATCH v3 18/35] fetch: pass ref patterns when fetching Brandon Williams
2018-02-27  6:53       ` Jonathan Nieder
2018-02-07  1:12     ` [PATCH v3 19/35] push: pass ref patterns when pushing Brandon Williams
2018-02-27 18:23       ` Stefan Beller
2018-02-07  1:12     ` [PATCH v3 20/35] upload-pack: introduce fetch server command Brandon Williams
2018-02-21 23:46       ` Jonathan Tan
2018-02-22 18:48         ` Brandon Williams
2018-02-07  1:12     ` [PATCH v3 21/35] fetch-pack: perform a fetch using v2 Brandon Williams
2018-02-24  0:54       ` Jonathan Tan
2018-02-26 22:23         ` Brandon Williams
2018-02-27 19:27       ` Stefan Beller
2018-02-27 19:40         ` Brandon Williams
2018-02-07  1:12     ` [PATCH v3 22/35] upload-pack: support shallow requests Brandon Williams
2018-02-07 19:00       ` Stefan Beller
2018-02-10 10:23         ` Duy Nguyen
2018-02-13 17:06         ` Brandon Williams
2018-02-27 18:29       ` Jonathan Nieder
2018-02-27 18:57         ` Brandon Williams
2018-02-07  1:13     ` [PATCH v3 23/35] fetch-pack: " Brandon Williams
2018-02-23 19:37       ` Jonathan Tan
2018-02-23 19:56         ` Brandon Williams
2018-02-07  1:13     ` [PATCH v3 24/35] connect: refactor git_connect to only get the protocol version once Brandon Williams
2018-02-21 23:51       ` Jonathan Tan
2018-02-07  1:13     ` [PATCH v3 25/35] connect: don't request v2 when pushing Brandon Williams
2018-02-07  1:13     ` [PATCH v3 26/35] transport-helper: remove name parameter Brandon Williams
2018-02-27 23:03       ` Jonathan Nieder
2018-02-07  1:13     ` [PATCH v3 27/35] transport-helper: refactor process_connect_service Brandon Williams
2018-02-07  1:13     ` [PATCH v3 28/35] transport-helper: introduce stateless-connect Brandon Williams
2018-02-22  0:01       ` Jonathan Tan
2018-02-22 18:53         ` Brandon Williams
2018-02-22 21:55           ` Jonathan Tan
2018-02-27 23:30       ` Jonathan Nieder
2018-02-28 19:09         ` Brandon Williams
2018-02-07  1:13     ` [PATCH v3 29/35] pkt-line: add packet_buf_write_len function Brandon Williams
2018-02-27 23:11       ` Jonathan Nieder
2018-02-28  1:08         ` Brandon Williams
2018-02-07  1:13     ` [PATCH v3 30/35] remote-curl: create copy of the service name Brandon Williams
2018-02-22  0:06       ` Jonathan Tan
2018-02-22 18:56         ` Brandon Williams
2018-02-07  1:13     ` [PATCH v3 31/35] remote-curl: store the protocol version the server responded with Brandon Williams
2018-02-27 23:17       ` Jonathan Nieder
2018-02-07  1:13     ` [PATCH v3 32/35] http: allow providing extra headers for http requests Brandon Williams
2018-02-22  0:09       ` Jonathan Tan
2018-02-22 18:58         ` Brandon Williams
2018-02-07  1:13     ` [PATCH v3 33/35] http: don't always add Git-Protocol header Brandon Williams
2018-02-07  1:13     ` [PATCH v3 34/35] remote-curl: implement stateless-connect command Brandon Williams
2018-02-28  0:05       ` Jonathan Nieder
2018-02-28 20:21         ` Brandon Williams
2018-02-07  1:13     ` [PATCH v3 35/35] remote-curl: don't request v2 when pushing Brandon Williams
2018-02-22  0:12       ` Jonathan Tan
2018-02-22 18:59         ` Brandon Williams
2018-02-22 19:09           ` Brandon Williams
2018-02-12 14:50     ` [PATCH v3 00/35] protocol version 2 Derrick Stolee
2018-02-21 20:01     ` Brandon Williams
2018-02-28 23:22     ` [PATCH v4 " Brandon Williams
2018-02-28 23:22       ` [PATCH v4 01/35] pkt-line: introduce packet_read_with_status Brandon Williams
2018-03-13 19:35         ` Jonathan Tan
2018-03-13 19:52           ` Brandon Williams
2018-02-28 23:22       ` [PATCH v4 02/35] pkt-line: allow peeking a packet line without consuming it Brandon Williams
2018-03-01 20:48         ` Junio C Hamano
2018-03-12 21:56           ` Brandon Williams
2018-02-28 23:22       ` [PATCH v4 03/35] pkt-line: add delim packet support Brandon Williams
2018-03-01 20:50         ` Junio C Hamano
2018-03-01 21:04           ` Junio C Hamano
2018-03-01 22:49             ` Brandon Williams
2018-03-01 23:43               ` Junio C Hamano
2018-02-28 23:22       ` [PATCH v4 04/35] upload-pack: convert to a builtin Brandon Williams
2018-03-13 16:40         ` Jonathan Tan
2018-03-13 19:50           ` Brandon Williams
2018-02-28 23:22       ` [PATCH v4 05/35] upload-pack: factor out processing lines Brandon Williams
2018-03-01 21:25         ` Junio C Hamano
2018-03-12 22:24           ` Brandon Williams
2018-03-12 22:39             ` Brandon Williams
2018-02-28 23:22       ` [PATCH v4 06/35] transport: use get_refs_via_connect to get refs Brandon Williams
2018-03-01 21:25         ` Junio C Hamano
2018-02-28 23:22       ` [PATCH v4 07/35] connect: convert get_remote_heads to use struct packet_reader Brandon Williams
2018-02-28 23:22       ` [PATCH v4 08/35] connect: discover protocol version outside of get_remote_heads Brandon Williams
2018-03-13 15:49         ` Jonathan Tan
2018-02-28 23:22       ` [PATCH v4 09/35] transport: store protocol version Brandon Williams
2018-02-28 23:22       ` [PATCH v4 10/35] protocol: introduce enum protocol_version value protocol_v2 Brandon Williams
2018-02-28 23:22       ` [PATCH v4 11/35] test-pkt-line: introduce a packet-line test helper Brandon Williams
2018-02-28 23:22       ` [PATCH v4 12/35] serve: introduce git-serve Brandon Williams
2018-03-01 23:11         ` Junio C Hamano
2018-03-12 22:08           ` Brandon Williams
2018-03-02 20:42         ` Junio C Hamano
2018-03-13 21:40           ` Brandon Williams
2018-03-02 20:56         ` Junio C Hamano
2018-03-13 21:35           ` Brandon Williams
2018-02-28 23:22       ` [PATCH v4 13/35] ls-refs: introduce ls-refs server command Brandon Williams
2018-03-02 21:13         ` Junio C Hamano
2018-03-13 21:27           ` Brandon Williams
2018-03-03  4:43         ` Jeff King
2018-03-05 18:21           ` Brandon Williams
2018-03-05 18:29             ` Jonathan Nieder
2018-03-05 20:38               ` Jeff King
2018-03-05 20:28             ` Jeff King
2018-03-13 21:23               ` Brandon Williams
2018-02-28 23:22       ` Brandon Williams [this message]
2018-02-28 23:22       ` [PATCH v4 15/35] transport: convert get_refs_list to take a list of ref patterns Brandon Williams
2018-02-28 23:22       ` [PATCH v4 16/35] transport: convert transport_get_remote_refs " Brandon Williams
2018-03-13 16:00         ` Jonathan Tan
2018-02-28 23:22       ` [PATCH v4 17/35] ls-remote: pass ref patterns when requesting a remote's refs Brandon Williams
2018-03-02 22:13         ` Junio C Hamano
2018-02-28 23:22       ` [PATCH v4 18/35] fetch: pass ref patterns when fetching Brandon Williams
2018-03-02 22:20         ` Junio C Hamano
2018-03-12 22:18           ` Brandon Williams
2018-02-28 23:22       ` [PATCH v4 19/35] push: pass ref patterns when pushing Brandon Williams
2018-03-02 22:25         ` Junio C Hamano
2018-03-12 22:20           ` Brandon Williams
2018-02-28 23:22       ` [PATCH v4 20/35] upload-pack: introduce fetch server command Brandon Williams
2018-03-13 16:20         ` Jonathan Tan
2018-03-13 21:49           ` Brandon Williams
2018-02-28 23:22       ` [PATCH v4 21/35] fetch-pack: perform a fetch using v2 Brandon Williams
2018-02-28 23:22       ` [PATCH v4 22/35] fetch-pack: support shallow requests Brandon Williams
2018-02-28 23:22       ` [PATCH v4 23/35] connect: refactor git_connect to only get the protocol version once Brandon Williams
2018-02-28 23:22       ` [PATCH v4 24/35] connect: don't request v2 when pushing Brandon Williams
2018-02-28 23:22       ` [PATCH v4 25/35] transport-helper: remove name parameter Brandon Williams
2018-02-28 23:22       ` [PATCH v4 26/35] transport-helper: refactor process_connect_service Brandon Williams
2018-02-28 23:22       ` [PATCH v4 27/35] transport-helper: introduce stateless-connect Brandon Williams
2018-03-13 16:30         ` Jonathan Tan
2018-03-14 17:36           ` Brandon Williams
2018-02-28 23:22       ` [PATCH v4 28/35] pkt-line: add packet_buf_write_len function Brandon Williams
2018-02-28 23:22       ` [PATCH v4 29/35] remote-curl: create copy of the service name Brandon Williams
2018-03-13 16:32         ` Jonathan Tan
2018-02-28 23:22       ` [PATCH v4 30/35] remote-curl: store the protocol version the server responded with Brandon Williams
2018-02-28 23:22       ` [PATCH v4 31/35] http: allow providing extra headers for http requests Brandon Williams
2018-03-13 16:33         ` Jonathan Tan
2018-02-28 23:22       ` [PATCH v4 32/35] http: don't always add Git-Protocol header Brandon Williams
2018-02-28 23:22       ` [PATCH v4 33/35] http: eliminate "# service" line when using protocol v2 Brandon Williams
2018-02-28 23:22       ` [PATCH v4 34/35] remote-curl: implement stateless-connect command Brandon Williams
2018-03-02 20:07         ` Johannes Schindelin
2018-03-05 19:35           ` Brandon Williams
2018-02-28 23:22       ` [PATCH v4 35/35] remote-curl: don't request v2 when pushing Brandon Williams
2018-03-13 16:35         ` Jonathan Tan
2018-03-01 18:41       ` [PATCH v4 00/35] protocol version 2 Junio C Hamano
2018-03-01 19:16         ` Brandon Williams
2018-03-01 20:59           ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180228232252.102167-15-bmwill@google.com \
    --to=bmwill@google.com \
    --cc=git@jeffhostetler.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jrnieder@gmail.com \
    --cc=pclouds@gmail.com \
    --cc=peff@peff.net \
    --cc=sbeller@google.com \
    --cc=stolee@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.