git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 02/11] http-backend.c: replace `git_config()` with `git_config_get_bool()` family

From
Tanay Abhra <tanayabh@gmail.com>
Date
Aug 6, 2014, 15:18 UTC
Message-ID
<53E24750.4000602@gmail.com>
In-Reply-To
<CAPig+cRpf9fc4HhNWpJ9Su+hSVEDc2+m4QmhY38zLD3RO8pGnA@mail.gmail.com>
On 8/5/2014 12:29 AM, Eric Sunshine wrote:
Show 52 quoted lines
> On Mon, Aug 4, 2014 at 2:33 PM, Tanay Abhra <tanayabh@gmail.com> wrote:
>> Use `git_config_get_bool()` family instead of `git_config()` to take advantage of
>> the config-set API which provides a cleaner control flow.
>>
>> Signed-off-by: Tanay Abhra <tanayabh@gmail.com>
>> ---
>>  http-backend.c | 31 ++++++++++++-------------------
>>  1 file changed, 12 insertions(+), 19 deletions(-)
>>
>> diff --git a/http-backend.c b/http-backend.c
>> index 80790bb..106ca6b 100644
>> --- a/http-backend.c
>> +++ b/http-backend.c
>> @@ -219,29 +219,22 @@ static void get_idx_file(char *name)
>>         send_local_file("application/x-git-packed-objects-toc", name);
>>  }
>>
>> -static int http_config(const char *var, const char *value, void *cb)
>> +static void http_config(void)
>>  {
>> -       const char *p;
>> +       int i, value = 0;
>> +       struct strbuf var = STRBUF_INIT;
>>
>> -       if (!strcmp(var, "http.getanyfile")) {
>> -               getanyfile = git_config_bool(var, value);
>> -               return 0;
>> -       }
>> +       git_config_get_bool("http.getanyfile", &getanyfile);
>>
>> -       if (skip_prefix(var, "http.", &p)) {
>> -               int i;
>> -
>> -               for (i = 0; i < ARRAY_SIZE(rpc_service); i++) {
>> -                       struct rpc_service *svc = &rpc_service[i];
>> -                       if (!strcmp(p, svc->config_name)) {
>> -                               svc->enabled = git_config_bool(var, value);
>> -                               return 0;
>> -                       }
>> -               }
>> +       for (i = 0; i < ARRAY_SIZE(rpc_service); i++) {
>> +               struct rpc_service *svc = &rpc_service[i];
>> +               strbuf_addf(&var, "http.%s", svc->config_name);
>> +               if (!git_config_get_bool(var.buf, &value))
>> +                       svc->enabled = value;
>> +               strbuf_reset(&var);
>>         }
> 
> There is a behavior change here. The original code set svc->enabled to
> the first matching rpc_service[] entry, whereas the new code sets it
> to the last matching entry. Is this change intentional?
>

I was preparing the reroll and I saw that I had missed your mail. I think that I haven't changed the behaviour, the original one is written in callback form so it has to go through the array every time for each new value. When there are multiple entries for a service say,

http.receivepack = 1 http.receivepack = 0

the old code would have at overwritten the previous entry with the new value. The new code just populates the whole array of `rpc_service` in one go, choosing the last matching value for each entry. For reviewing purpose the original array is this,

	struct rpc_service {
	const char *name;
	const char *config_name;
	signed enabled : 2;
	};
	static struct rpc_service rpc_service[] = {
		{ "upload-pack", "uploadpack", 1 },
		{ "receive-pack", "receivepack", -1 },
	};
What do you think, am I interpreting it wrong? Thanks.
Show 17 quoted lines
>> -       /* we are not interested in parsing any other configuration here */
>> -       return 0;
>> +       strbuf_release(&var);
>>  }
>>
>>  static struct rpc_service *select_service(const char *name)
>> @@ -627,7 +620,7 @@ int main(int argc, char **argv)
>>             access("git-daemon-export-ok", F_OK) )
>>                 not_found("Repository not exported: '%s'", dir);
>>
>> -       git_config(http_config, NULL);
>> +       http_config();
>>         cmd->imp(cmd_arg);
>>         return 0;
>>  }
>> --
>> 1.9.0.GIT
Previous: Eric SunshineNext: Matthieu Moy
Message 6 of 20 in “git_config callers rewritten with the new config-set API”
  1. 00/11 git_config callers rewritten with the new config-set APITanay Abhra, Aug 4, 2014
  2. 01/11 daemon.c: replace `git_config()` with `git_config_get_bool()` familyTanay Abhra, Aug 4, 2014
  3. Matthieu MoyAug 4, 2014
  4. 02/11 http-backend.c: replace `git_config()` with `git_config_get_bool()` familyTanay Abhra, Aug 4, 2014
  5. Eric SunshineAug 4, 2014
  6. Tanay AbhraAug 6, 2014
  7. Matthieu MoyAug 6, 2014
  8. Eric SunshineAug 6, 2014
  9. 03/11 read-cache.c: replace `git_config()` with `git_config_get_*()` familyTanay Abhra, Aug 4, 2014
  10. 04/11 archive.c: replace `git_config()` with `git_config_get_bool()` familyTanay Abhra, Aug 4, 2014
  11. 05/11 fetchpack.c: replace `git_config()` with `git_config_get_*()` familyTanay Abhra, Aug 4, 2014
  12. 06/11 rerere.c: replace `git_config()` with `git_config_get_*()` familyTanay Abhra, Aug 4, 2014
  13. 07/11 builtin/gc.c: replace `git_config()` with `git_config_get_*()` familyTanay Abhra, Aug 4, 2014
  14. Matthieu MoyAug 4, 2014
  15. 08/11 pager.c: replace `git_config()` with `git_config_get_value()`Tanay Abhra, Aug 4, 2014
  16. Matthieu MoyAug 4, 2014
  17. 09/11 imap-send.c: replace `git_config()` with `git_config_get_*()` familyTanay Abhra, Aug 4, 2014
  18. 10/11 alias.c: replace `git_config()` with `git_config_get_string()`Tanay Abhra, Aug 4, 2014
  19. 11/11 branch.c: replace `git_config()` with `git_config_get_string()Tanay Abhra, Aug 4, 2014
  20. Matthieu MoyAug 4, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.