All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tanay Abhra <tanayabh@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, Ramkumar Ramachandra <artagnon@gmail.com>,
	Matthieu Moy <Matthieu.Moy@grenoble-inp.fr>
Subject: Re: [PATCH v7 5/8] config: add `git_die_config()` to the config-set API
Date: Tue, 05 Aug 2014 00:25:37 +0530	[thread overview]
Message-ID: <53DFD729.8090307@gmail.com> (raw)
In-Reply-To: <xmqqoaw0ruwf.fsf@gitster.dls.corp.google.com>



On 8/4/2014 11:37 PM, Junio C Hamano wrote:
> Tanay Abhra <tanayabh@gmail.com> writes:
> 
>> Add `git_die_config` that dies printing the line number and the file name
>> of the highest priority value for the configuration variable `key`.
>>
>> It has usage in non-callback based config value retrieval where we can
>> raise an error and die if there is a semantic error.
>> For example,
>>
>> 	if (!git_config_get_value(key, &value)) {
>> 		/* NULL values not allowed */
>> 		if (!value)
>> 			git_config_die(key);
>> 		else
>> 			/* do work */
>> 	}
> 
> It feels a bit unnatural at the API level that this does not take
> 'value'; I do understand that it is not a big deal in the error code
> path to locate again the value from the configuration using the key,
> but still.
>

But, we don't have a use for "value" as it is not denoted in the error
string, that is why I left it out.

> It feels even more unnatural that the caller cannot say _how_ it
> finds the value offending by not taking any message.  For one
> particular callchain, e.g. git_config_get_string() that eventually
> calls git_config_string() which will show an error message via
> config_error_nonbool(), you may not want any extra message, but for
> new callers that wants to make sure value falls within a supported
> range, this forces it to write
> 
> 	if (!git_config_get_int(key, &num)) {
>         	if (!(0 < num && num < 4)) {
> 			error("'%s' must be between 1 and 3");
>                         git_config_die(key);
> 		}
> 		/* otherwise work */
> 	}
> 
> and then the error message would say something like:
> 
> 	error: 'core.frotz' must be between 1 and 3
> 	fatal: bad config variable 'core.frotz' at file line 15 in .git/config
> 
> which sounds somewhat backwards, at least to me.
>

I was aping the old git_config() system, it also does exactly what you described
above. for example, builtin/gc.c line 91,

		if (!strcmp(var, "gc.pruneexpire")) {
		if (value && strcmp(value, "now")) {
			unsigned long now = approxidate("now");
			if (approxidate(value) >= now)
				return error(_("Invalid %s: '%s'"), var, value);
		}

would print,
 	error: Invalid gc.pruneexpire: 'value'
	fatal: bad config variable 'gc.pruneexpire' at file line 15 in .git/config

or imap-send.c line 1340,

	if (!strcmp("sslverify", key))
		server.ssl_verify = git_config_bool(key, val);
	else if (!strcmp("preformattedhtml", key))
		server.use_html = git_config_bool(key, val);
	else if (!val)
		return config_error_nonbool(key);
again would cause a error & die, message combo as above. There are many examples like that.
We can easily take a custom error message but again I was just aping the old system.

>> +NORETURN
>> +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);
> 
> Do we have existing code that says "we signal that it is from the
> command line by setting linenr to zero" already?  Otherwise I would
> have thought filename == NULL would be a more sensible convention.
> 
> Otherwise OK.
>

Noted. Next reroll will have filename as the convention.

>> +	else
>> +		die(_("bad config variable '%s' at file line %d in %s"),
> 
> At least, quote the last '%s'.
>

Noted. Thanks.

  reply	other threads:[~2014-08-04 18:55 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-01 17:05 [PATCH v7 0/8] Rewrite `git_config()` using config-set API Tanay Abhra
2014-08-01 17:05 ` [PATCH v7 1/8] config.c: mark error and warnings strings for translation Tanay Abhra
2014-08-01 17:05 ` [PATCH v7 2/8] config.c: fix accuracy of line number in errors Tanay Abhra
2014-08-04 13:41   ` Matthieu Moy
2014-08-01 17:05 ` [PATCH v7 3/8] add line number and file name info to `config_set` Tanay Abhra
2014-08-01 17:05 ` [PATCH v7 4/8] change `git_config()` return value to void Tanay Abhra
2014-08-01 17:05 ` [PATCH v7 5/8] config: add `git_die_config()` to the config-set API Tanay Abhra
2014-08-04 18:07   ` Junio C Hamano
2014-08-04 18:55     ` Tanay Abhra [this message]
2014-08-04 20:04       ` Matthieu Moy
2014-08-05 14:55         ` Tanay Abhra
2014-08-05 15:15           ` Matthieu Moy
2014-08-05 16:42             ` Junio C Hamano
2014-08-04 20:52       ` Junio C Hamano
2014-08-01 17:05 ` [PATCH v7 6/8] rewrite git_config() to use " Tanay Abhra
2014-08-01 17:05 ` [PATCH v7 7/8] add a test for semantic errors in config files Tanay Abhra
2014-08-04 18:13   ` Junio C Hamano
2014-08-01 17:05 ` [PATCH v7 8/8] add tests for `git_config_get_string_const()` Tanay Abhra
2014-08-04 13:43 ` [PATCH v7 0/8] Rewrite `git_config()` using 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=53DFD729.8090307@gmail.com \
    --to=tanayabh@gmail.com \
    --cc=Matthieu.Moy@grenoble-inp.fr \
    --cc=artagnon@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.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.