Make git_config_with_options() to use a configset to feed values in the callback function. This change gives us the power to filter variables we feed to the callback using custom constraints. A slight behaviour change, git_config_int() loses the ability to print the file name of the invalid variable while dying. Helped-by: Matthieu Moy <Matthieu.Moy@xxxxxxx> Signed-off-by: Tanay Abhra <tanayabh@xxxxxxxxx> --- config.c | 21 +++++++++++++++++++-- t/t1300-repo-config.sh | 2 +- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/config.c b/config.c index cb474b2..09cf009 100644 --- a/config.c +++ b/config.c @@ -1214,7 +1214,7 @@ int git_config_early(config_fn_t fn, void *data, const char *repo_config) return ret == 0 ? found : ret; } -int git_config_with_options(config_fn_t fn, void *data, +static int git_config_with_options_raw(config_fn_t fn, void *data, struct git_config_source *config_source, int respect_includes) { @@ -1247,9 +1247,26 @@ int git_config_with_options(config_fn_t fn, void *data, return ret; } +static int config_set_callback(const char *key, const char *value, void *cb); + +int git_config_with_options(config_fn_t fn, void *data, + struct git_config_source *config_source, + int respect_includes) +{ + int ret; + struct config_set options_config; + git_configset_init(&options_config); + ret = git_config_with_options_raw(config_set_callback, &options_config, + config_source, respect_includes); + if (ret >= 0) + configset_iter(&options_config, fn, data); + git_configset_clear(&options_config); + return ret; +} + static void git_config_raw(config_fn_t fn, void *data) { - if (git_config_with_options(fn, data, NULL, 1) < 0) + if (git_config_with_options_raw(fn, data, NULL, 1) < 0) /* * git_config_with_options() normally returns only * positive values, as most errors are fatal, and diff --git a/t/t1300-repo-config.sh b/t/t1300-repo-config.sh index 938fc8b..ce5ea01 100755 --- a/t/t1300-repo-config.sh +++ b/t/t1300-repo-config.sh @@ -678,7 +678,7 @@ test_expect_success 'invalid unit' ' git config aninvalid.unit >actual && test_cmp expect actual && cat >expect <<-\EOF - fatal: bad numeric config value '\''1auto'\'' for '\''aninvalid.unit'\'' in .git/config: invalid unit + fatal: bad numeric config value '\''1auto'\'' for '\''aninvalid.unit'\'': invalid unit EOF test_must_fail git config --int --get aninvalid.unit 2>actual && test_i18ncmp expect actual -- 1.9.0.GIT -- 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