From: Junio C Hamano <gitster@pobox.com>
To: Tanay Abhra <tanayabh@gmail.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: Mon, 04 Aug 2014 11:07:12 -0700 [thread overview]
Message-ID: <xmqqoaw0ruwf.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <1406912756-15517-6-git-send-email-tanayabh@gmail.com> (Tanay Abhra's message of "Fri, 1 Aug 2014 10:05:53 -0700")
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.
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.
> +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.
> + else
> + die(_("bad config variable '%s' at file line %d in %s"),
At least, quote the last '%s'.
> + key,
> + linenr,
> + filename);
Don't waste vertical real-estate line this.
Perhaps
die(_("bad config variable '%s' in file '%s' at line %d"),
key, linenr, filename);
next prev parent reply other threads:[~2014-08-04 18:07 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 [this message]
2014-08-04 18:55 ` Tanay Abhra
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=xmqqoaw0ruwf.fsf@gitster.dls.corp.google.com \
--to=gitster@pobox.com \
--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.