From: Tanay Abhra <tanayabh@gmail.com>
To: Eric Sunshine <sunshine@sunshineco.com>
Cc: Git List <git@vger.kernel.org>,
Ramkumar Ramachandra <artagnon@gmail.com>,
Matthieu Moy <Matthieu.Moy@grenoble-inp.fr>
Subject: Re: [PATCH 02/11] http-backend.c: replace `git_config()` with `git_config_get_bool()` family
Date: Wed, 06 Aug 2014 20:48:40 +0530 [thread overview]
Message-ID: <53E24750.4000602@gmail.com> (raw)
In-Reply-To: <CAPig+cRpf9fc4HhNWpJ9Su+hSVEDc2+m4QmhY38zLD3RO8pGnA@mail.gmail.com>
On 8/5/2014 12:29 AM, Eric Sunshine wrote:
> 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.
>> - /* 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
next prev parent reply other threads:[~2014-08-06 15:18 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-04 18:33 [PATCH 00/11] git_config callers rewritten with the new config-set API Tanay Abhra
2014-08-04 18:33 ` [PATCH 01/11] daemon.c: replace `git_config()` with `git_config_get_bool()` family Tanay Abhra
2014-08-04 20:23 ` Matthieu Moy
2014-08-04 18:33 ` [PATCH 02/11] http-backend.c: " Tanay Abhra
2014-08-04 18:59 ` Eric Sunshine
2014-08-06 15:18 ` Tanay Abhra [this message]
2014-08-06 15:44 ` Matthieu Moy
2014-08-06 20:04 ` Eric Sunshine
2014-08-04 18:33 ` [PATCH 03/11] read-cache.c: replace `git_config()` with `git_config_get_*()` family Tanay Abhra
2014-08-04 18:33 ` [PATCH 04/11] archive.c: replace `git_config()` with `git_config_get_bool()` family Tanay Abhra
2014-08-04 18:33 ` [PATCH 05/11] fetchpack.c: replace `git_config()` with `git_config_get_*()` family Tanay Abhra
2014-08-04 18:33 ` [PATCH 06/11] rerere.c: " Tanay Abhra
2014-08-04 18:33 ` [PATCH 07/11] builtin/gc.c: " Tanay Abhra
2014-08-04 20:41 ` Matthieu Moy
2014-08-04 18:33 ` [PATCH 08/11] pager.c: replace `git_config()` with `git_config_get_value()` Tanay Abhra
2014-08-04 20:36 ` Matthieu Moy
2014-08-04 18:33 ` [PATCH 09/11] imap-send.c: replace `git_config()` with `git_config_get_*()` family Tanay Abhra
2014-08-04 18:33 ` [PATCH 10/11] alias.c: replace `git_config()` with `git_config_get_string()` Tanay Abhra
2014-08-04 18:33 ` [PATCH 11/11] branch.c: replace `git_config()` with `git_config_get_string() Tanay Abhra
2014-08-04 20:42 ` [PATCH 00/11] git_config callers rewritten with the new config-set API Matthieu Moy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53E24750.4000602@gmail.com \
--to=tanayabh@gmail.com \
--cc=Matthieu.Moy@grenoble-inp.fr \
--cc=artagnon@gmail.com \
--cc=git@vger.kernel.org \
--cc=sunshine@sunshineco.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).