"Matthew Rogers via GitGitGadget" <gitgitgadget@xxxxxxxxx> writes: > From: Matthew Rogers <mattr94@xxxxxxxxx> > > do_git_config_sequence operated under the assumption that it was correct > to set current_parsing_scope to CONFIG_SCOPE_UNKNOWN as part of the > cleanup it does after it finishes execution. This is incorrect, as it > blows away the current_parsing_scope if do_git_config_sequence is called > recursively. As such situations are rare (git config running with the > '--blob' option is one example) this has yet to cause a problem, but the > upcoming '--show-scope' option will experience issues in that case, lets > teach do_git_config_sequence to preserve the current_parsing_scope from > before it started execution. > > Signed-off-by: Matthew Rogers <mattr94@xxxxxxxxx> > --- > config.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) This step is new and it does make sense. Thanks. > diff --git a/config.c b/config.c > index fe1e44a43a..0e2c693e78 100644 > --- a/config.c > +++ b/config.c > @@ -1702,6 +1702,7 @@ static int do_git_config_sequence(const struct config_options *opts, > char *xdg_config = xdg_config_home("config"); > char *user_config = expand_user_path("~/.gitconfig", 0); > char *repo_config; > + enum config_scope prev_parsing_scope = current_parsing_scope; > > if (opts->commondir) > repo_config = mkpathdup("%s/config", opts->commondir); > @@ -1741,7 +1742,7 @@ static int do_git_config_sequence(const struct config_options *opts, > if (!opts->ignore_cmdline && git_config_from_parameters(fn, data) < 0) > die(_("unable to parse command-line config")); > > - current_parsing_scope = CONFIG_SCOPE_UNKNOWN; > + current_parsing_scope = prev_parsing_scope; > free(xdg_config); > free(user_config); > free(repo_config);