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

Re: [PATCH v2 2/2] config: Add hashtable for config parsing & retrieval

From
Tanay Abhra <tanayabh@gmail.com>
Date
Jun 16, 2014, 17:28 UTC
Message-ID
<539F293D.9000602@gmail.com>
In-Reply-To
<vpqy4ww230l.fsf@anie.imag.fr>
On 06/16/2014 10:11 AM, Matthieu Moy wrote:
Show 13 quoted lines
> Tanay Abhra <tanayabh@gmail.com> writes:
> 
>> Add a hash table to cache all key-value pairs read from config files
>> (repo specific .git/config, user wide ~/.gitconfig and the global
>> /etc/gitconfig). Add two external functions `git_config_get_string` and
>> `git_config_get_string_multi` for querying in a non-callback manner from the
>> hash table.
> 
> This describes rather well _what_ your patch does, but the most
> important part of a commit message is to justify _why_ the change is
> good, and why the way you implemented it is good.
> 
> Think of it as an way to convince reviewers to accept your patch.

Okay, but isn't the content of the cover letter is doing that for now. Should I put some part of it in here?

Show 16 quoted lines
>> Signed-off-by: Tanay Abhra <tanayabh@gmail.com>
>> ---
>>  Documentation/technical/api-config.txt |  17 +++++
>>  cache.h                                |   2 +
>>  config.c                               | 123 +++++++++++++++++++++++++++++++++
>>  3 files changed, 142 insertions(+)
> 
> I'm still concerned about the fact that there is no test. At this point,
> git_config_get_string_multi and git_config_get_string are basically dead
> code.
> 
> I'm sure you did experiments to test these functions, run them through
> valgrind, ... Now, you need to let other people reproduce these
> experiments. "other people" can be reviewers, now, or anyone looking for
> bugs or regressions in the future.
>

Yeah, I have run the experiments. I will add a test file for it. I should have appended it to this series only, my fault. :) A stray observation, Git has very less unit tests, compared to the comprehensive test directory for commands.

Show 18 quoted lines
>> +static struct config_cache_entry *config_cache_find_entry(const char *key)
>> +{
>> +	struct hashmap *config_cache;
>> +	struct config_cache_entry k;
>> +	struct config_cache_entry *found_entry;
>> +	char *normalized_key;
>> +	int ret;
>> +	config_cache = get_config_cache();
>> +	ret = git_config_parse_key(key, &normalized_key, NULL);
>> +
>> +	if (ret)
>> +		return NULL;
>> +
>> +	hashmap_entry_init(&k, strhash(normalized_key));
>> +	k.key = (char *)normalized_key;
> 
> No need to cast.
> 
Noted.
Show 24 quoted lines
>> +static int config_cache_set_value(const char *key, const char *value)
>> +{
>> +	struct hashmap *config_cache;
>> +	struct config_cache_entry *e;
>> +
>> +	config_cache = get_config_cache();
>> +	e = config_cache_find_entry(key);
>> +	if (!e) {
>> +		e = xmalloc(sizeof(*e));
>> +		hashmap_entry_init(e, strhash(key));
>> +		e->key = xstrdup(key);
>> +		string_list_init_dup(&e->value_list);
>> +		string_list_append(&e->value_list, value);
>> +		hashmap_add(config_cache, e);
>> +	} else {
>> +		string_list_append(&e->value_list, value);
>> +	}
>> +	return 0;
>> +}
> 
> I find the function name a bit confusing, as it does not "set" in the
> sense "override any previous value". Wouldn't this be better named
> config_cache_add_value? Or perhaps a comment would help.
>
Noted.
Show 18 quoted lines
>> @@ -1714,6 +1830,13 @@ int git_config_set_multivar_in_file(const char *config_filename,
>>  	lock = NULL;
>>  	ret = 0;
>>  
>> +	/*
>> +	 *contents of config file has changed, so invalidate the
>> +	 *config cache used by non-callback based query functions.
>> +	 */
> 
> Spaces after stars:
> 
> /*
>  * Contents of config file has changed, so invalidate the
>  * config cache used by non-callback based query functions.
>  */
> 
> (I think the "s" of "contents" should be dropped too).
> 
Noted. Thanks for the review.
Previous: Matthieu MoyNext: Matthieu Moy
Message 8 of 11 in “Git config cache & special querying api utilizing the cache”
  1. 0/2 Git config cache & special querying api utilizing the cacheTanay Abhra, Jun 16, 2014
  2. 1/2 string-list: Add string_list initializer helper functionsTanay Abhra, Jun 16, 2014
  3. Junio C HamanoJun 16, 2014
  4. Tanay AbhraJun 17, 2014
  5. Junio C HamanoJun 17, 2014
  6. 2/2 config: Add hashtable for config parsing & retrievalTanay Abhra, Jun 16, 2014
  7. Matthieu MoyJun 16, 2014
  8. Tanay AbhraJun 16, 2014
  9. Matthieu MoyJun 16, 2014
  10. Jeff KingJun 17, 2014
  11. Jeff KingJun 17, 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.