From: "Torsten Bögershausen" <tboegi@web.de>
To: Tanay Abhra <tanayabh@gmail.com>, git@vger.kernel.org
Cc: Ramkumar Ramachandra <artagnon@gmail.com>,
Matthieu Moy <Matthieu.Moy@grenoble-inp.fr>
Subject: Re: [RFC/PATCH 1/2] config: Add cache for config value querying
Date: Mon, 26 May 2014 22:02:54 +0200 [thread overview]
Message-ID: <53839DEE.9090504@web.de> (raw)
In-Reply-To: <1401125601-18249-2-git-send-email-tanayabh@gmail.com>
On 2014-05-26 19.33, Tanay Abhra wrote:
I like the idea.
Please allow some minor comments (and read them as questions rather then answers)
> Add an internal cache with the all variable value pairs read from the usual
"cache": The word "cache" is in Git often used for "index"
"variable value" can be written as "key value"
"usual": I don't think we handle "unusual" config files,
(so can we drop the word usual ?)
I think the (important) first line can be written like this:
>Add a hash table with the all key-value pairs read from the
or
>Add a hash table to cache all key-value pairs read from the
> config files(repo specific .git/config, user wide ~/.gitconfig and the global
> /etc/gitconfig). Also, add two external functions `git_config_get_string` and
Can we drop "Also" ?
> @@ -37,6 +39,102 @@ static struct config_source *cf;
>
> static int zlib_compression_seen;
>
> +struct hashmap config_cache;
> +
> +struct config_cache_node {
> + struct hashmap_entry ent;
> + struct strbuf key;
Do we need a whole strbuf for the key?
Or could a "char *key" work as well?
(and/or could it be "const char *key" ?
> + struct string_list *value_list ;
> +static struct string_list *config_cache_get_value(const char *key)
> +{
> + struct config_cache_node *e = config_cache_find_entry(key);
why "e" ? Will "node" be easier to read ? Or entry ?
> +static void config_cache_set_value(const char *key, const char *value)
> +{
> + struct config_cache_node *e;
> +
> + if (!value)
> + return;
Hm, either NULL could mean "unset==remove" the value, (but we don't do that, do we?
Or it could mean a programming or runtime error?, Should there be a warning ?
> +
> + e = config_cache_find_entry(key);
> + if (!e) {
> + e = malloc(sizeof(*e));
> + hashmap_entry_init(e, strihash(key));
> + strbuf_init(&(e->key), 1024);
> + strbuf_addstr(&(e->key),key);
> + e->value_list = malloc(sizeof(struct string_list));
> + e->value_list->strdup_strings = 1;
> + e->value_list->nr = 0;
> + e->value_list->alloc = 0;
> + e->value_list->items = NULL;
> + e->value_list->cmp = NULL;
When malloc() is replaced by xcalloc() the x = NULL and y = 0 can go away,
and the code is shorter and easier to read.
> +extern const char *git_config_get_string(const char *name)
> +{
> + struct string_list *values;
> + int num_values;
> + char *result;
> + values = config_cache_get_value(name);
> + if (!values)
> + return NULL;
> + num_values = values->nr;
> + result = values->items[num_values-1].string ;
We could get rid of the variable "int num_values" by simply writing
result = values->items[values->nr-1].string;
next prev parent reply other threads:[~2014-05-26 20:03 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-26 17:33 [RFC/PATCH 0/2] Git config cache & special querying api utilizing the cache Tanay Abhra
2014-05-26 17:33 ` [RFC/PATCH 1/2] config: Add cache for config value querying Tanay Abhra
2014-05-26 20:02 ` Torsten Bögershausen [this message]
2014-05-27 13:54 ` Tanay Abhra
2014-05-28 9:31 ` Eric Sunshine
2014-05-26 17:33 ` [RFC/PATCH 2/2] config: Add new query functions to the api Tanay Abhra
2014-05-28 9:43 ` Eric Sunshine
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=53839DEE.9090504@web.de \
--to=tboegi@web.de \
--cc=Matthieu.Moy@grenoble-inp.fr \
--cc=artagnon@gmail.com \
--cc=git@vger.kernel.org \
--cc=tanayabh@gmail.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 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.