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

Re: [PATCH v6 6/7] config: add `git_die_config()` to the config-set API

From
Matthieu Moy <matthieu.moy@grenoble-inp.fr>
Date
Jul 31, 2014, 18:41 UTC
Message-ID
<vpqoaw55q16.fsf@anie.imag.fr>
In-Reply-To
<53DA8A54.6060208@gmail.com>
Tanay Abhra <tanayabh@gmail.com> writes:
Show 31 quoted lines
> On 7/31/2014 11:39 PM, Matthieu Moy wrote:
>
>> This is the part I find weird. You're calling git_die_config_exact() on
>> the first boggus value, and git_die_config_exact() will notify an error
>> at the line of the last boggus value.
>
> Hmn, we may have some confusion here. I meant the implementation of
> git_config_exact() to look like this,
>
> void git_die_config_exact(const char *key, const char *value)
> {
> 	int i;
> 	const struct string_list *values;
> 	struct key_value_info *kv_info;
> 	values = git_config_get_value_multi(key);
> 	for (i = 0; i < values.nr; i++) {
> 		kv_info = values->items[i].util;
> 		/* A null check will be here also */
> 		if (!strcmp(value, values->items[i].string)) {
> 			if (!kv_info->linenr)
> 				die(_("unable to parse '%s' from command-line config"), key);
> 			else
> 				die(_("bad config variable '%s' at file line %d in %s"),
> 					key,
> 					kv_info->linenr,
> 					kv_info->filename);
> 		}
> 	}
> }
>
> The above code would print the info on first bogus value.

OK, I got confused because git_die_config() errors out at the first error. So, your version works, but I do not see any added value in this extra complexity.

To be cleary, my version would be
NORETURN static /* not sure about the "static" */
void git_die_config_linenr(const char *key,
                           const char *filename, int linenr)
{
	if (!linenr)
		die(_("unable to parse '%s' from command-line config"), key);
	else
		die(_("bad config variable '%s' at file line %d in %s"),
			key,
			linenr,
			filename);
}
(hmm, I actually do not need the value, it's not printed)
NORETURN
void git_die_config(const char *key)
{
	const struct string_list *values;
	struct key_value_info *kv_info;
	values = git_config_get_value_multi(key);
	kv_info = values->items[values->nr - 1].util;
	git_die_config_linenr(key, kv_info->linenr, kv_info->filename);
}

(we forgot the NORETURN in previous version BTW. It should be there in both functions here and in the .h file)

In my version, git_die_config uses git_die_config_linenr, and there's no issue with first/last boggus value. Callers of git_die_config_linenr have all the information to call it directly.

There are 3 code path that leads to the final die() calls, and having this little helper allows making sure the messages are the same for every callers, by construction (as opposed to cut-and-pasting).

Really, I don't see any reason to do anything more complex.
-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/
Previous: Tanay AbhraNext: Junio C Hamano
Message 14 of 20 in “Rewrite `git_config()` using config-set API”
  1. 0/7 Rewrite `git_config()` using config-set APITanay Abhra, Jul 31, 2014
  2. 1/7 config.c: fix accuracy of line number in errorsTanay Abhra, Jul 31, 2014
  3. 2/7 add line number and file name info to `config_set`Tanay Abhra, Jul 31, 2014
  4. 3/7 change `git_config()` return value to voidTanay Abhra, Jul 31, 2014
  5. 4/7 rewrite git_config() to use the config-set APITanay Abhra, Jul 31, 2014
  6. 5/7 add a test for semantic errors in config filesTanay Abhra, Jul 31, 2014
  7. 6/7 config: add `git_die_config()` to the config-set APITanay Abhra, Jul 31, 2014
  8. Matthieu MoyJul 31, 2014
  9. Tanay AbhraJul 31, 2014
  10. Matthieu MoyJul 31, 2014
  11. Tanay AbhraJul 31, 2014
  12. Matthieu MoyJul 31, 2014
  13. Tanay AbhraJul 31, 2014
  14. Matthieu MoyJul 31, 2014
  15. Junio C HamanoJul 31, 2014
  16. Matthieu MoyAug 1, 2014
  17. Tanay AbhraAug 1, 2014
  18. Matthieu MoyAug 1, 2014
  19. 7/7 add tests for `git_config_get_string_const()`Tanay Abhra, Jul 31, 2014
  20. Matthieu MoyJul 31, 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.