Skip to content

Commit

Permalink
Fallback to AppData if XDG_CONFIG_HOME is unset
Browse files Browse the repository at this point in the history
In order to be a better Windows citizenship, Git should
save its configuration files on AppData folder. This can
enables git configuration files be replicated between machines
using the same Microsoft account logon which would reduce the
friction of setting up Git on new systems. Therefore, if
%APPDATA%\Git\config exists, we use it; otherwise
$HOME/.config/git/config is used.

Signed-off-by: Ariel Lourenco <ariellourenco@users.noreply.github.com>
  • Loading branch information
ariellourenco authored and mjcheetham committed Jul 29, 2024
1 parent 3f72192 commit 0cc3662
Showing 1 changed file with 20 additions and 3 deletions.
23 changes: 20 additions & 3 deletions path.c
Original file line number Diff line number Diff line change
Expand Up @@ -1484,6 +1484,7 @@ int looks_like_command_line_option(const char *str)
char *xdg_config_home_for(const char *subdir, const char *filename)
{
const char *home, *config_home;
char *home_config = NULL;

assert(subdir);
assert(filename);
Expand All @@ -1492,10 +1493,26 @@ char *xdg_config_home_for(const char *subdir, const char *filename)
return mkpathdup("%s/%s/%s", config_home, subdir, filename);

home = getenv("HOME");
if (home)
return mkpathdup("%s/.config/%s/%s", home, subdir, filename);
if (home && *home)
home_config = mkpathdup("%s/.config/%s/%s", home, subdir, filename);

#ifdef WIN32
{
const char *appdata = getenv("APPDATA");
if (appdata && *appdata) {
char *appdata_config = mkpathdup("%s/Git/%s", appdata, filename);
if (file_exists(appdata_config)) {
if (home_config && file_exists(home_config))
warning("'%s' was ignored because '%s' exists.", home_config, appdata_config);
free(home_config);
return appdata_config;
}
free(appdata_config);
}
}
#endif

return NULL;
return home_config;
}

char *xdg_config_home(const char *filename)
Expand Down

0 comments on commit 0cc3662

Please sign in to comment.