From: Stefan Beller <sbeller@google.com>
To: dturner@twopensource.com
Cc: git@vger.kernel.org, Stefan Beller <sbeller@google.com>
Subject: [PATCH 06/14] remote.h: add get_remote_capabilities, request_capabilities
Date: Fri, 29 Apr 2016 16:34:39 -0700 [thread overview]
Message-ID: <1461972887-22100-7-git-send-email-sbeller@google.com> (raw)
In-Reply-To: <1461972887-22100-1-git-send-email-sbeller@google.com>
Instead of calling get_remote_heads as a first command during the
protocol exchange, we need to have fine grained control over the
capability negotiation in version 2 of the protocol.
Introduce get_remote_capabilities, which will just listen to
capabilities of the remote and request_capabilities which will
tell the selection of capabilities to the remote.
Signed-off-by: Stefan Beller <sbeller@google.com>
---
connect.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
remote.h | 3 +++
2 files changed, 62 insertions(+)
diff --git a/connect.c b/connect.c
index 79505fb..1ba9a0f 100644
--- a/connect.c
+++ b/connect.c
@@ -10,6 +10,7 @@
#include "string-list.h"
#include "sha1-array.h"
#include "transport.h"
+#include "version.h"
struct string_list server_capabilities = STRING_LIST_INIT_DUP;
static const char *parse_feature_value(struct string_list *, const char *, int *);
@@ -106,6 +107,64 @@ static void annotate_refs_with_symref_info(struct ref *ref)
string_list_clear(&symref, 0);
}
+const char *known_capabilities[] = {
+ "multi_ack",
+ "thin-pack",
+ "side-band",
+ "side-band-64k",
+ "ofs-delta",
+ "shallow",
+ "no-progress",
+ "include-tag",
+ "multi_ack_detailed",
+ "allow-tip-sha1-in-want",
+ "allow-reachable-sha1-in-want",
+ "no-done",
+};
+
+static int keep_capability(char *line)
+{
+ int i;
+ for (i = 0; i < ARRAY_SIZE(known_capabilities); i++)
+ if (starts_with(line, known_capabilities[i]))
+ return 1;
+ return 0;
+}
+
+void get_remote_capabilities(int in, char *src_buf, size_t src_len)
+{
+ for (;;) {
+ int len;
+ char *line = packet_buffer;
+
+ len = packet_read(in, &src_buf, &src_len,
+ packet_buffer, sizeof(packet_buffer),
+ PACKET_READ_GENTLE_ON_EOF |
+ PACKET_READ_CHOMP_NEWLINE);
+ if (len < 0)
+ die_initial_contact(0);
+
+ if (!len)
+ break;
+
+ /*
+ * We need to ignore and drop unknown capabilities as they
+ * may be huge.
+ */
+ if (keep_capability(line))
+ string_list_append(&server_capabilities, line);
+ }
+}
+
+
+void request_capabilities(int out, struct string_list *list)
+{
+ struct string_list_item *item;
+ for_each_string_list_item(item, list)
+ packet_write(out, "%s\n", item->string);
+ packet_flush(out);
+}
+
/*
* Read all the refs from the other end
*/
diff --git a/remote.h b/remote.h
index cdb25d0..534282b 100644
--- a/remote.h
+++ b/remote.h
@@ -153,6 +153,9 @@ extern struct ref **get_remote_heads(int in, char *src_buf, size_t src_len,
struct sha1_array *extra_have,
struct sha1_array *shallow);
+extern void get_remote_capabilities(int in, char *src_buf, size_t src_len);
+extern void request_capabilities(int out, struct string_list*);
+
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);
--
2.8.0.32.g71f8beb.dirty
next prev parent reply other threads:[~2016-04-29 23:35 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-29 23:34 [WIP PATCH 00/14] Protocol v2 patches Stefan Beller
2016-04-29 23:34 ` [PATCH 01/14] upload-pack: make client capability parsing code a separate function Stefan Beller
2016-04-29 23:34 ` [PATCH 02/14] upload-pack.c: Refactor capability advertising Stefan Beller
2016-04-30 1:04 ` David Turner
2016-05-04 20:05 ` Junio C Hamano
2016-04-29 23:34 ` [PATCH 03/14] upload-pack-2: Implement the version 2 of upload-pack Stefan Beller
2016-05-02 17:43 ` David Turner
2016-05-02 17:51 ` Stefan Beller
2016-05-02 18:56 ` David Turner
2016-05-03 0:31 ` Duy Nguyen
2016-05-04 20:11 ` Junio C Hamano
2016-04-29 23:34 ` [PATCH 04/14] connect: rewrite feature parsing to work on string_list Stefan Beller
2016-05-02 18:18 ` David Turner
2016-05-02 18:46 ` Stefan Beller
2016-05-04 20:13 ` Junio C Hamano
2016-05-17 22:23 ` David Turner
2016-04-29 23:34 ` [PATCH 05/14] transport: add infrastructure to support a protocol version number Stefan Beller
2016-04-29 23:34 ` Stefan Beller [this message]
2016-05-02 18:57 ` [PATCH 06/14] remote.h: add get_remote_capabilities, request_capabilities David Turner
2016-05-03 5:33 ` Jeff King
2016-05-03 21:21 ` David Turner
2016-05-04 16:44 ` Stefan Beller
2016-04-29 23:34 ` [PATCH 07/14] fetch-pack: move capability selection out of do_fetch_pack Stefan Beller
2016-04-29 23:34 ` [PATCH 08/14] fetch-pack: factor out get_selected_capabilities_list Stefan Beller
2016-05-02 19:09 ` David Turner
2016-04-29 23:34 ` [PATCH 09/14] fetch-pack: Add negotiate_capabilities Stefan Beller
2016-04-29 23:34 ` [PATCH 10/14] do_fetch_pack: select capabilities for transport version 1 only Stefan Beller
2016-04-29 23:34 ` [PATCH 11/14] builtin/fetch-pack: add argument for transport version Stefan Beller
2016-04-29 23:34 ` [PATCH 12/14] Add test for fetch-pack Stefan Beller
2016-05-02 19:45 ` David Turner
2016-04-29 23:34 ` [PATCH 13/14] WIP add test for git pull Stefan Beller
2016-04-29 23:34 ` [PATCH 14/14] WIP test git fetch Stefan Beller
2016-05-02 20:41 ` [WIP PATCH 00/14] Protocol v2 patches David Turner
2016-05-02 20:43 ` Stefan Beller
2016-05-24 22:46 ` David Turner
2016-05-24 23:03 ` Duy Nguyen
2016-05-25 16:45 ` David Turner
2016-05-25 16:23 ` Junio C Hamano
2016-05-25 19:31 ` David Turner
2016-05-25 21:29 ` Jeff King
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=1461972887-22100-7-git-send-email-sbeller@google.com \
--to=sbeller@google.com \
--cc=dturner@twopensource.com \
--cc=git@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).