From: Junio C Hamano Date: Mon, 04 Aug 2014 18:07:12 GMT Subject: Re: [PATCH v7 5/8] config: add `git_die_config()` to the config-set API Message-ID: In-Reply-To: <1406912756-15517-6-git-send-email-tanayabh@gmail.com> Tanay Abhra 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);