Subject: Re: [PATCH v3 8/9] promisor-remote: change promisor_remote_reply()'s signature

From: Patrick Steinhardt <[email-masked]>
Date: Fri, 13 Feb 2026 12:25:54 +0100

On Thu, Feb 12, 2026 at 11:08:39AM +0100, Christian Couder wrote:
> diff --git a/promisor-remote.c b/promisor-remote.c
> index f3bafb7731..96fa215b06 100644
> --- a/promisor-remote.c
> +++ b/promisor-remote.c
> @@ -920,25 +920,27 @@ static void filter_promisor_remote(struct repository *repo,
>  	}
>  }
>  
> -char *promisor_remote_reply(const char *info)
> +void promisor_remote_reply(const char *info, char **accepted_out)
>  {
>  	struct strvec accepted = STRVEC_INIT;
> -	struct strbuf reply = STRBUF_INIT;
>  
>  	filter_promisor_remote(the_repository, &accepted, info);
>  
> -	if (!accepted.nr)
> -		return NULL;
> -
> -	for (size_t i = 0; i < accepted.nr; i++) {
> -		if (i)
> -			strbuf_addch(&reply, ';');
> -		strbuf_addstr_urlencode(&reply, accepted.v[i], allow_unsanitized);
> +	if (accepted_out) {
> +		if (accepted.nr) {
> +			struct strbuf reply = STRBUF_INIT;
> +			for (size_t i = 0; i < accepted.nr; i++) {
> +				if (i)
> +					strbuf_addch(&reply, ';');
> +				strbuf_addstr_urlencode(&reply, accepted.v[i], allow_unsanitized);
> +			}
> +			*accepted_out = strbuf_detach(&reply, NULL);
> +		} else {
> +			*accepted_out = NULL;
> +		}
>  	}
>  
>  	strvec_clear(&accepted);
> -
> -	return strbuf_detach(&reply, NULL);
>  }

Okay, makes sense. This directly addresses my comment on v2 that it's
kind of weird that we do all of this only to discard the result in the
next commit.

Patrick