On 7/28/2014 4:25 PM, Ramsay Jones wrote: > On 28/07/14 11:33, Tanay Abhra wrote: >> 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 */ >> } >> >> Signed-off-by: Tanay Abhra <tanayabh@xxxxxxxxx> >> --- >> Note: git_config_get_string() calls git_config_get_string_const(), >> so no need to check for whether to die or not, as it is done by >> git_config_get_string_const(). >> >> Documentation/technical/api-config.txt | 5 +++++ >> cache.h | 1 + >> config.c | 24 ++++++++++++++++++++++-- >> 3 files changed, 28 insertions(+), 2 deletions(-) >> >> diff --git a/Documentation/technical/api-config.txt b/Documentation/technical/api-config.txt >> index 815c1ee..e7ec7cc 100644 >> --- a/Documentation/technical/api-config.txt >> +++ b/Documentation/technical/api-config.txt >> @@ -155,6 +155,11 @@ as well as retrieval for the queried variable, including: >> Similar to `git_config_get_string`, but expands `~` or `~user` into >> the user's home directory when found at the beginning of the path. >> >> +`void git_die_config(const char *key)`:: >> + >> + Dies printing the line number and the file name of the highest >> + priority value for the configuration variable `key`. >> + >> See test-config.c for usage examples. >> >> Value Parsing Helpers >> diff --git a/cache.h b/cache.h >> index 93bdbab..8512225 100644 >> --- a/cache.h >> +++ b/cache.h >> @@ -1406,6 +1406,7 @@ extern int git_config_get_bool(const char *key, int *dest); >> extern int git_config_get_bool_or_int(const char *key, int *is_bool, int *dest); >> extern int git_config_get_maybe_bool(const char *key, int *dest); >> extern int git_config_get_pathname(const char *key, const char **dest); >> +extern void git_die_config(const char *key); >> >> extern int committer_ident_sufficiently_given(void); >> extern int author_ident_sufficiently_given(void); >> diff --git a/config.c b/config.c >> index 2ce3318..136ee9c 100644 >> --- a/config.c >> +++ b/config.c >> @@ -1505,8 +1505,12 @@ const struct string_list *git_config_get_value_multi(const char *key) >> >> int git_config_get_string_const(const char *key, const char **dest) >> { >> + int ret; >> git_config_check_init(); >> - return git_configset_get_string_const(&the_config_set, key, dest); >> + ret = git_configset_get_string_const(&the_config_set, key, dest); >> + if (ret < 0) >> + git_die_config(key); >> + return ret; >> } >> >> int git_config_get_string(const char *key, char **dest) >> @@ -1547,10 +1551,26 @@ int git_config_get_maybe_bool(const char *key, int *dest) >> >> int git_config_get_pathname(const char *key, const char **dest) >> { >> + int ret; >> git_config_check_init(); >> - return git_configset_get_pathname(&the_config_set, key, dest); >> + ret = git_configset_get_pathname(&the_config_set, key, dest); >> + if (ret < 0) >> + git_die_config(key); >> + return ret; >> } >> >> +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; >> + if (!kv_info->linenr) >> + die("unable to parse command-line config"); >> + else >> + die("bad config file line %d in %s",kv_info->linenr, kv_info->filename); > > How about including the 'key' string in the error message? > Similar comment applies to an earlier patch in this series. > git_config_get_string & pathname() are already raising a config_error_nonbool() with the error message, "Missing value for 'key'". For other cases, I was just following the previous error message, but it can be done for the new git_config(). Thanks. >> + } >> + >> /* >> * Find all the stuff for git_config_set() below. >> */ >> > > ATB, > Ramsay Jones > > > -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html