From: Lars Schneider Date: Sun, 10 Sep 2017 12:12:27 GMT Subject: Re: [PATCH v5 11/40] odb-helper: add odb_helper_init() to send 'init' instruction Message-ID: In-Reply-To: <20170803091926.1755-12-chriscool@tuxfamily.org> > On 03 Aug 2017, at 10:18, Christian Couder 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 > --- > ... > > +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