From: Tanay Abhra <tanayabh@gmail.com>
To: Matthieu Moy <Matthieu.Moy@grenoble-inp.fr>
Cc: git@vger.kernel.org, Ramkumar Ramachandra <artagnon@gmail.com>
Subject: Re: [PATCH v4 2/5] notes.c: replace `git_config()` with `git_config_get_value_multi()`
Date: Wed, 30 Jul 2014 20:10:32 +0530 [thread overview]
Message-ID: <53D903E0.4080209@gmail.com> (raw)
In-Reply-To: <vpq1tt3q6ic.fsf@anie.imag.fr>
On 7/30/2014 7:43 PM, Matthieu Moy wrote:
> Tanay Abhra <tanayabh@gmail.com> writes:
>
>> - git_config(notes_display_config, &load_config_refs);
>> + if (load_config_refs) {
>> + values = git_config_get_value_multi("notes.displayref");
>> + if (values) {
>> + for (i = 0; i < values->nr; i++) {
>> + if (!values->items[i].string)
>> + config_error_nonbool("notes.displayref");
>> + else
>> + string_list_add_refs_by_glob(&display_notes_refs,
>> + values->items[i].string);
>> + }
>> + }
>> + }
>
> It seems to me that you're doing a lot here that should have been done
> once in the config API:
>
> * if (values) {
> for (i = 0; i < values->nr
>
> => We could avoid the "if" statement if git_config_get_value_multi was
> always returning a string_list, possibly empty (values->nr == 0
> instead of values == NULL).
>
or we can do something like,
if (!git_config_get_value_multi("notes.displayref", &values)) {
/* return 0 if there is a value_list for the key */
> Not as obvious as it seems, because you normally return a pointer to
> the string_list that is already in the hashmap, so you can't just
> malloc() an empty one if you don't want to leak it.
>
> Another option would be to provide an iterator that would call a
> function on each value of the list, and do nothing when there's no
> list at all (back to the callback-style API, but you would iterate
> only through the values for the right key).
>
This is also a good idea, but still we are back to the callback API,
and what we are gaining is fewer loop iterations than git_config().
Which way do you prefer, a reroll is easy but Junio might have been sick
of replacing the patches in pu by now. :)
> * if (!values->items[i].string)
> config_error_nonbool(
>
> => This check could be done once and for all in a function, say
> git_config_get_value_multi_nonbool, a trivial wrapper around
> git_config_get_value_multi like
>
> const struct string_list *git_configset_get_value_multi_nonbool(struct config_set *cs, const char *key)
> {
> struct string_list l = git_configset_get_value_multi(cs, key);
> // possibly if(l) depending on the point above.
> for (i = 0; i < values->nr; i++) {
> if (!values->items[i].string)
> git_config_die(key);
> }
> return l;
> }
>
Not worth it, most the multi value calls do not die on a nonbool.
> const struct string_list *git_config_get_value_multi_nonbool(const char *key)
> {
> git_config_check_init();
> return git_configset_get_value_multi_nonbool(&the_config_set, key);
> }
>
>
> (totally untested)
>
> BTW, is it intentional that you call config_error_nonbool() without
> die-ing?
>
Yup, it's intentional, original code didn't die for empty values, and it seemed
logical to me to emulate that over to the rewrite.
next prev parent reply other threads:[~2014-07-30 14:40 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-30 13:39 [PATCH v4 0/5] git_config callers rewritten with the new config cache API Tanay Abhra
2014-07-30 13:39 ` [PATCH v4 1/5] pager.c: replace `git_config()` with `git_config_get_value()` Tanay Abhra
2014-07-30 13:39 ` [PATCH v4 2/5] notes.c: replace `git_config()` with `git_config_get_value_multi()` Tanay Abhra
2014-07-30 14:13 ` Matthieu Moy
2014-07-30 14:40 ` Tanay Abhra [this message]
2014-07-30 16:42 ` Matthieu Moy
2014-07-31 11:38 ` Matthieu Moy
2014-07-31 12:13 ` Tanay Abhra
2014-07-30 13:39 ` [PATCH v4 3/5] imap-send.c: replace `git_config()` with `git_config_get_*()` family Tanay Abhra
2014-07-30 13:39 ` [PATCH v4 4/5] branch.c: replace `git_config()` with `git_config_get_string() Tanay Abhra
2014-07-30 16:23 ` Matthieu Moy
2014-07-30 13:39 ` [PATCH v4 5/5] alias.c: replace `git_config()` with `git_config_get_string()` Tanay Abhra
2014-07-30 13:46 ` [PATCH v4 0/5] git_config callers rewritten with the new config cache API Matthieu Moy
2014-07-30 14:03 ` Tanay Abhra
2014-07-30 16:45 ` Matthieu Moy
2014-07-31 11:37 ` Ramsay Jones
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=53D903E0.4080209@gmail.com \
--to=tanayabh@gmail.com \
--cc=Matthieu.Moy@grenoble-inp.fr \
--cc=artagnon@gmail.com \
--cc=git@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.