diff --git a/path.c b/path.c index c3a709a928..f17595fd1b 100644 --- a/path.c +++ b/path.c @@ -1544,19 +1544,23 @@ int looks_like_command_line_option(const char *str) char *xdg_config_home_for(const char *subdir, const char *filename) { + char *ret; const char *home, *config_home; assert(subdir); assert(filename); config_home = getenv("XDG_CONFIG_HOME"); if (config_home && *config_home) - return mkpathdup("%s/%s/%s", config_home, subdir, filename); + ret = mkpathdup("%s/%s/%s", config_home, subdir, filename); + else if ((home = getenv("HOME"))) + ret = mkpathdup("%s/.config/%s/%s", home, subdir, filename); + else + return NULL; - home = getenv("HOME"); - if (home) - return mkpathdup("%s/.config/%s/%s", home, subdir, filename); - - return NULL; +#ifdef GIT_WINDOWS_NATIVE + convert_slashes(ret); +#endif + return ret; } char *xdg_config_home(const char *filename) diff --git a/t/t1300-config.sh b/t/t1300-config.sh index e3f8064889..329407a73d 100755 --- a/t/t1300-config.sh +++ b/t/t1300-config.sh @@ -2350,6 +2350,38 @@ test_expect_success '--show-origin with --default' ' test_cmp expect actual ' +test_expect_success 'set up xdg config --show-origin tests' ' + mkdir -p "$HOME"/.config/git && + cat >"$HOME"/.config/git/config <<-EOF + [xdg] + config = true + EOF +' + +test_expect_success MINGW '--show-origin converts backslashes in xdg path to forward slashes on Windows' ' + backslash_home="$(echo "$HOME" | tr / \\\\)" && + echo "file:$HOME/.config/git/config true" >expect && + + ( + sane_unset XDG_CONFIG_HOME && + HOME="$backslash_home" git config ${mode_get} --show-origin xdg.config >actual + ) && + test_cmp expect actual && + + XDG_CONFIG_HOME="$backslash_home\\.config" git config ${mode_get} --show-origin xdg.config >actual && + test_cmp expect actual +' + +test_expect_success '--show-origin with default xdg path' ' + echo "file:$HOME/.config/git/config true" >expect && + git config ${mode_get} --show-origin xdg.config >actual && + test_cmp expect actual +' + +test_expect_success 'clean up xdg config --show-origin tests' ' + rm -rf "$HOME"/.config/git +' + test_expect_success '--show-scope with --list' ' cat >expect <<-EOF && global user.global=true