Re: [PATCH v5 11/40] odb-helper: add odb_helper_init() to send 'init' instruction
From: Lars Schneider <hidden>
Date: 2017-09-10 12:12:36
On 03 Aug 2017, at 10:18, Christian Couder [off-list ref] wrote:
Let's add an odb_helper_init() function to send an 'init'
instruction to the helpers. This 'init' instruction is
especially useful to get the capabilities that are supported
by the helpers.
So while at it, let's also add a parse_capabilities()
function to parse them and a supported_capabilities
variable in struct odb_helper to store them.
Signed-off-by: Christian Couder <redacted>
---
...
+static void parse_capabilities(char *cap_buf,
+ unsigned int *supported_capabilities,
+ const char *process_name)
+{
+ struct string_list cap_list = STRING_LIST_INIT_NODUP;
+
+ string_list_split_in_place(&cap_list, cap_buf, '=', 1);
+
+ if (cap_list.nr == 2 && !strcmp(cap_list.items[0].string, "capability")) {
+ const char *cap_name = cap_list.items[1].string;
+
+ if (!strcmp(cap_name, "get_git_obj")) {
+ *supported_capabilities |= ODB_HELPER_CAP_GET_GIT_OBJ;
+ } else if (!strcmp(cap_name, "get_raw_obj")) {
+ *supported_capabilities |= ODB_HELPER_CAP_GET_RAW_OBJ;
+ } else if (!strcmp(cap_name, "get_direct")) {
+ *supported_capabilities |= ODB_HELPER_CAP_GET_DIRECT;
+ } else if (!strcmp(cap_name, "put_git_obj")) {
+ *supported_capabilities |= ODB_HELPER_CAP_PUT_GIT_OBJ;
+ } else if (!strcmp(cap_name, "put_raw_obj")) {
+ *supported_capabilities |= ODB_HELPER_CAP_PUT_RAW_OBJ;
+ } else if (!strcmp(cap_name, "put_direct")) {
+ *supported_capabilities |= ODB_HELPER_CAP_PUT_DIRECT;
+ } else if (!strcmp(cap_name, "have")) {
+ *supported_capabilities |= ODB_HELPER_CAP_HAVE;
+ } else {
+ warning("external process '%s' requested unsupported read-object capability '%s'",
+ process_name, cap_name);
+ }
In 1514c8ed ("convert: refactor capabilities negotiation", 2017-06-30) I introduced
a simpler version of the capabilities negotiation. Maybe useful for you here, too?
- Lars