[Patch v6]: Added _(....) to error messages. Diff between v6 and v4 at the bottom. [PATCH v5]: New patch added (3/7). git_config() now returns void. [PATCH v4]: One style nit corrected, also added key to error messages. [PATCH V3]:All the suggestions in [3] applied. Built on top of [1]. [PATCH V2]: All the suggestions in [2] incorporated. git_config() now follows correct parsing order. Reordered the patches. Removed xfuncname patch as it was unnecssary. This series builds on the top of topic[1] in the mailing list with name "git config cache & special querying API utilizing the cache". This series aims to do these three things, * Use the config-set API to rewrite git_config(). * Solve any legacy bugs in the previous system while at it. * To be feature complete compared to the previous git_config() implementation, which I think it is now. (added the line number and file name info just for completeness) Also, I haven't yet checked the exact improvements but still as a teaser, git status now only rereads the configuration files twice instead of four times. [1]: http://thread.gmane.org/gmane.comp.version-control.git/254286 [2]: http://thread.gmane.org/gmane.comp.version-control.git/254101 [3]: http://thread.gmane.org/gmane.comp.version-control.git/254211 Tanay Abhra (7): config.c: fix accuracy of line number in errors add line number and file name info to `config_set` change `git_config()` return value to void rewrite git_config() to use the config-set API add a test for semantic errors in config files config: add `git_die_config()` to the config-set API add tests for `git_config_get_string_const()` Documentation/technical/api-config.txt | 5 ++ branch.c | 5 +- cache.h | 27 ++++++- config.c | 131 +++++++++++++++++++++++++++++---- t/t1308-config-set.sh | 21 ++++++ t/t4055-diff-context.sh | 2 +- test-config.c | 10 +++ 7 files changed, 181 insertions(+), 20 deletions(-) -- 1.9.0.GIT -- 8< -- diff --git a/branch.c b/branch.c index 46e8aa8..735767d 100644 --- a/branch.c +++ b/branch.c @@ -161,10 +161,7 @@ int read_branch_desc(struct strbuf *buf, const char *branch_name) strbuf_addf(&name, "branch.%s.description", branch_name); cb.config_name = name.buf; cb.value = NULL; - if (git_config(read_branch_desc_cb, &cb) < 0) { - strbuf_release(&name); - return -1; - } + git_config(read_branch_desc_cb, &cb); if (cb.value) strbuf_addstr(buf, cb.value); strbuf_release(&name); diff --git a/cache.h b/cache.h index 8512225..243f618 100644 --- a/cache.h +++ b/cache.h @@ -1295,7 +1295,7 @@ extern int git_config_from_buf(config_fn_t fn, const char *name, const char *buf, size_t len, void *data); extern void git_config_push_parameter(const char *text); extern int git_config_from_parameters(config_fn_t fn, void *data); -extern int git_config(config_fn_t fn, void *); +extern void git_config(config_fn_t fn, void *); extern int git_config_with_options(config_fn_t fn, void *, struct git_config_source *config_source, int respect_includes); diff --git a/config.c b/config.c index f9bf60a..15fcd91 100644 --- a/config.c +++ b/config.c @@ -1229,12 +1229,24 @@ struct key_value_info { int linenr; }; -static int git_config_raw(config_fn_t fn, void *data) +static void git_config_raw(config_fn_t fn, void *data) { - return git_config_with_options(fn, data, NULL, 1); + if (git_config_with_options(fn, data, NULL, 1) < 0) + /* + * git_config_with_options() normally returns only + * positive values, as most errors are fatal, and + * non-fatal potential errors are guarded by "if" + * statements that are entered only when no error is + * possible. + * + * If we ever encounter a non-fatal error, it means + * something went really wrong and we should stop + * immediately. + */ + die(_("unknown error occured while reading the configuration files")); } -static int configset_iter(struct config_set *cs, config_fn_t fn, void *data) +static void configset_iter(struct config_set *cs, config_fn_t fn, void *data) { int i, value_index; struct string_list *values; @@ -1249,23 +1261,22 @@ static int configset_iter(struct config_set *cs, config_fn_t fn, void *data) if (fn(entry->key, values->items[value_index].string, data) < 0) { kv_info = values->items[value_index].util; if (!kv_info->linenr) - die("unable to parse '%s' from command-line config", entry->key); + die(_("unable to parse '%s' from command-line config"), entry->key); else - die("bad config variable '%s' at file line %d in %s", + die(_("bad config variable '%s' at file line %d in %s"), entry->key, kv_info->linenr, kv_info->filename); } } - return 0; } static void git_config_check_init(void); -int git_config(config_fn_t fn, void *data) +void git_config(config_fn_t fn, void *data) { git_config_check_init(); - return configset_iter(&the_config_set, fn, data); + configset_iter(&the_config_set, fn, data); } static struct config_set_element *configset_find_element(struct config_set *cs, const char *key) @@ -1565,9 +1576,9 @@ void git_die_config(const char *key) values = git_config_get_value_multi(key); kv_info = values->items[values->nr - 1].util; if (!kv_info->linenr) - die("unable to parse '%s' from command-line config", key); + die(_("unable to parse '%s' from command-line config"), key); else - die("bad config variable '%s' at file line %d in %s", + die(_("bad config variable '%s' at file line %d in %s"), key, kv_info->linenr, kv_info->filename); -- 8< -- -- 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