Re: [PATCH v5 11/40] odb-helper: add odb_helper_init() to send 'init' instruction
- From
Lars Schneider <larsxschneider@gmail.com>
- Date
- Sep 10, 2017, 12:12 UTC
- Message-ID
- <C327746B-3E57-4AA9-B29E-AA3C33722D3B@gmail.com>
- In-Reply-To
- <20170803091926.1755-12-chriscool@tuxfamily.org>
Show 44 quoted lines
> On 03 Aug 2017, at 10:18, Christian Couder <christian.couder@gmail.com> 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 <chriscool@tuxfamily.org>
> ---
> ...
>
> +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