]> git.ipfire.org Git - thirdparty/git.git/commitdiff
config: write to $XDG_CONFIG_HOME/git/config file when appropriate
authorHuynh Khoi Nguyen Nguyen <Huynh-Khoi-Nguyen.Nguyen@ensimag.imag.fr>
Fri, 22 Jun 2012 09:03:26 +0000 (11:03 +0200)
committerJunio C Hamano <gitster@pobox.com>
Mon, 25 Jun 2012 16:06:15 +0000 (09:06 -0700)
Teach git to write to $XDG_CONFIG_HOME/git/config if

 - it already exists,
 - $HOME/.gitconfig file doesn't, and
 - The --global option is used.

Otherwise, write to $HOME/.gitconfig when the --global option is
given, as before.

If the user doesn't create $XDG_CONFIG_HOME/git/config, there is
absolutely no change. Users can use this new file only if they want.

If $XDG_CONFIG_HOME is either not set or empty, $HOME/.config/git/config
will be used.

Advice for users who often come back to an old version of Git: you
shouldn't create this file.

Signed-off-by: Huynh Khoi Nguyen Nguyen <Huynh-Khoi-Nguyen.Nguyen@ensimag.imag.fr>
Signed-off-by: Valentin Duperray <Valentin.Duperray@ensimag.imag.fr>
Signed-off-by: Franck Jonas <Franck.Jonas@ensimag.imag.fr>
Signed-off-by: Lucien Kong <Lucien.Kong@ensimag.imag.fr>
Signed-off-by: Thomas Nguy <Thomas.Nguy@ensimag.imag.fr>
Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-config.txt
builtin/config.c
t/t1306-xdg-files.sh

index 09675cba4a9c415dfd01d77c140f37eff2b711d7..2d6ef32a087f3f7355251a84a7d0d294f18479a5 100644 (file)
@@ -97,7 +97,8 @@ OPTIONS
 
 --global::
        For writing options: write to global ~/.gitconfig file rather than
-       the repository .git/config.
+       the repository .git/config, write to $XDG_CONFIG_HOME/git/config file
+       if this file exists and the ~/.gitconfig file doesn't.
 +
 For reading options: read only from global ~/.gitconfig and from
 $XDG_CONFIG_HOME/git/config rather than from all available files.
index da54fd1e1239700ed19afa50ac0f24a51e5f044a..e8e1c0a4567f190c4b5d939bf9b0d363765bfd30 100644 (file)
@@ -387,10 +387,7 @@ int cmd_config(int argc, const char **argv, const char *prefix)
 
                home_config_paths(&user_config, &xdg_config, "config");
 
-               if (access(user_config, R_OK) && !access(xdg_config, R_OK) &&
-                   (actions == ACTION_LIST ||
-                    actions == ACTION_GET_COLOR ||
-                    actions == ACTION_GET_COLORBOOL))
+               if (access(user_config, R_OK) && !access(xdg_config, R_OK))
                        given_config_file = xdg_config;
                else if (user_config)
                        given_config_file = user_config;
index e8cd78a48d9824bc0bb4b99a7bb30ad407f40ddb..3c75c3f2e7e8f980a83fa05db24cf64e7b1cd5a3 100755 (executable)
@@ -125,4 +125,34 @@ test_expect_success 'Checking attributes in a non-XDG global attributes file' '
 '
 
 
+test_expect_success 'write: xdg file exists and ~/.gitconfig doesn'\''t' '
+       mkdir -p "$HOME"/.config/git &&
+       >"$HOME"/.config/git/config &&
+       test_might_fail rm "$HOME"/.gitconfig &&
+       git config --global user.name "write_config" &&
+       echo "[user]" >expected &&
+       echo "  name = write_config" >>expected &&
+       test_cmp expected "$HOME"/.config/git/config
+'
+
+
+test_expect_success 'write: xdg file exists and ~/.gitconfig exists' '
+       >"$HOME"/.gitconfig &&
+       git config --global user.name "write_gitconfig" &&
+       echo "[user]" >expected &&
+       echo "  name = write_gitconfig" >>expected &&
+       test_cmp expected "$HOME"/.gitconfig
+'
+
+
+test_expect_success 'write: ~/.config/git/ exists and config file doesn'\''t' '
+       test_might_fail rm "$HOME"/.gitconfig &&
+       test_might_fail rm "$HOME"/.config/git/config &&
+       git config --global user.name "write_gitconfig" &&
+       echo "[user]" >expected &&
+       echo "  name = write_gitconfig" >>expected &&
+       test_cmp expected "$HOME"/.gitconfig
+'
+
+
 test_done