The original include implementation tried not to impact calls to "git config" that look at a single file. However, since we called into git_config in a few places (e.g., --list), our respect_includes flag was not supported. This patch teaches git_config_with_options a flag to respect includes (instead of doing so by default), and teaches git-config to use it. Signed-off-by: Jeff King <peff@xxxxxxxx> --- builtin/config.c | 7 ++++--- cache.h | 3 ++- config.c | 14 ++++++++------ t/t1305-config-include.sh | 8 ++++++++ 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/builtin/config.c b/builtin/config.c index 8901dd9..d41a9bf 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -316,7 +316,7 @@ static void get_color(const char *def_color) get_color_found = 0; parsed_color[0] = '\0'; git_config_with_options(git_get_color_config, NULL, - given_config_file); + given_config_file, respect_includes); if (!get_color_found && def_color) color_parse(def_color, "command line", parsed_color); @@ -344,7 +344,7 @@ static int get_colorbool(int print) get_colorbool_found = -1; get_diff_color_found = -1; git_config_with_options(git_get_colorbool_config, NULL, - given_config_file); + given_config_file, respect_includes); if (get_colorbool_found < 0) { if (!strcmp(get_colorbool_slot, "color.diff")) @@ -441,7 +441,8 @@ int cmd_config(int argc, const char **argv, const char *prefix) if (actions == ACTION_LIST) { check_argc(argc, 0, 0); if (git_config_with_options(show_all_config, NULL, - given_config_file) < 0) { + given_config_file, + respect_includes) < 0) { if (given_config_file) die_errno("unable to read config file '%s'", given_config_file); diff --git a/cache.h b/cache.h index 411c60d..ff54d6f 100644 --- a/cache.h +++ b/cache.h @@ -1115,7 +1115,8 @@ extern int git_config_from_file(config_fn_t fn, const char *, void *); 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 int git_config_with_options(config_fn_t fn, void *, const char *filename); +extern int git_config_with_options(config_fn_t fn, void *, + const char *filename, int respect_includes); extern int git_config_early(config_fn_t fn, void *, const char *repo_config); extern int git_parse_ulong(const char *, unsigned long *); extern int git_config_int(const char *, const char *); diff --git a/config.c b/config.c index e1d6857..ad03908 100644 --- a/config.c +++ b/config.c @@ -976,16 +976,18 @@ int git_config_early(config_fn_t fn, void *data, const char *repo_config) } int git_config_with_options(config_fn_t fn, void *data, - const char *filename) + const char *filename, int respect_includes) { char *repo_config = NULL; int ret; struct config_include_data inc = CONFIG_INCLUDE_INIT; - inc.fn = fn; - inc.data = data; - fn = git_config_include; - data = &inc; + if (respect_includes) { + inc.fn = fn; + inc.data = data; + fn = git_config_include; + data = &inc; + } /* * If we have a specific filename, use it. Otherwise, follow the @@ -1003,7 +1005,7 @@ int git_config_with_options(config_fn_t fn, void *data, int git_config(config_fn_t fn, void *data) { - return git_config_with_options(fn, data, NULL); + return git_config_with_options(fn, data, NULL, 1); } /* diff --git a/t/t1305-config-include.sh b/t/t1305-config-include.sh index 0a27ec4..f3e03a0 100755 --- a/t/t1305-config-include.sh +++ b/t/t1305-config-include.sh @@ -59,6 +59,14 @@ test_expect_success 'single file lookup does not expand includes by default' ' test_cmp expect actual ' +test_expect_success 'single file list does not expand includes by default' ' + echo "[test]one = 1" >one && + echo "[include]path = one" >.gitconfig && + echo "include.path=one" >expect && + git config -f .gitconfig --list >actual && + test_cmp expect actual +' + test_expect_success 'writing config file does not expand includes' ' echo "[test]one = 1" >one && echo "[include]path = one" >.gitconfig && -- 1.7.9.1.4.g8ffed -- 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