]> git.ipfire.org Git - thirdparty/git.git/commitdiff
config: test home and xdg files in `list --global`
authorDelilah Ashley Wu <delilahwu@microsoft.com>
Fri, 10 Oct 2025 01:14:07 +0000 (01:14 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 19 Nov 2025 15:14:26 +0000 (07:14 -0800)
The `git config list --global` output includes `$HOME/.gitconfig` (home
config), but ignores `$XDG_CONFIG_HOME/git/config` (XDG config). It
should include both files.

Modify tests to check the following and expect a failure:
  - `git config list --global` should include contents from both the
     home and XDG config locations (assuming they are readable), not
     just the former.

  - `--show-origin` should print correct paths to both config files,
    assuming they exist.

Also, add tests to ensure subsequent patches do not introduce
regressions to `git config list`. Specifically, check that:
  - The home config should take precedence over the XDG config.

  - Without `--global`, it should not bail on unreadable/non-existent
    global config files.

  - With `--global`, it should bail when both `$HOME/.gitconfig` and
    `$XDG_CONFIG_HOME/git/config` are unreadable. It should not bail if
    at least one of them is readable.

The next patch, config: read global scope via config_sequence, will
implement a fix to include both config files when `--global` is
specified.

Reported-by: Jade Lovelace <lists@jade.fyi>
Helped-by: Derrick Stolee <stolee@gmail.com>
Signed-off-by: Delilah Ashley Wu <delilahwu@microsoft.com>
Reviewed-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t1300-config.sh
t/t1306-xdg-files.sh

index 358d6363796f48c8c39c89c8a7ea6f589bc02fb8..61e44027bca0c098efba4dfbcb62cd36d1a25b48 100755 (executable)
@@ -2362,6 +2362,71 @@ test_expect_success '--show-scope with --default' '
        test_cmp expect actual
 '
 
+test_expect_success 'list with nonexistent global config' '
+       rm -rf "$HOME"/.gitconfig "$HOME"/.config/git/config &&
+       git config ${mode_prefix}list --show-scope
+'
+
+test_expect_success 'list --global with nonexistent global config' '
+       rm -rf "$HOME"/.gitconfig "$HOME"/.config/git/config &&
+       test_must_fail git config ${mode_prefix}list --global --show-scope
+'
+
+test_expect_success 'list --global with only home' '
+       rm -rf "$HOME"/.config/git/config &&
+
+       test_when_finished rm -f \"\$HOME\"/.gitconfig &&
+       cat >"$HOME"/.gitconfig <<-EOF &&
+       [home]
+               config = true
+       EOF
+
+       cat >expect <<-EOF &&
+       global  home.config=true
+       EOF
+       git config ${mode_prefix}list --global --show-scope >output &&
+       test_cmp expect output
+'
+
+test_expect_success 'list --global with only xdg' '
+       rm -f "$HOME"/.gitconfig &&
+
+       test_when_finished rm -rf \"\$HOME\"/.config/git &&
+       mkdir -p "$HOME"/.config/git &&
+       cat >"$HOME"/.config/git/config <<-EOF &&
+       [xdg]
+               config = true
+       EOF
+
+       cat >expect <<-EOF &&
+       global  xdg.config=true
+       EOF
+       git config ${mode_prefix}list --global --show-scope >output &&
+       test_cmp expect output
+'
+
+test_expect_success 'list --global with both home and xdg' '
+       test_when_finished rm -f \"\$HOME\"/.gitconfig &&
+       cat >"$HOME"/.gitconfig <<-EOF &&
+       [home]
+               config = true
+       EOF
+
+       test_when_finished rm -rf \"\$HOME\"/.config/git &&
+       mkdir -p "$HOME"/.config/git &&
+       cat >"$HOME"/.config/git/config <<-EOF &&
+       [xdg]
+               config = true
+       EOF
+
+       cat >expect <<-EOF &&
+       global  file:$HOME/.config/git/config   xdg.config=true
+       global  file:$HOME/.gitconfig   home.config=true
+       EOF
+       git config ${mode_prefix}list --global --show-scope --show-origin >output &&
+       ! test_cmp expect output
+'
+
 test_expect_success 'override global and system config' '
        test_when_finished rm -f \"\$HOME\"/.gitconfig &&
        cat >"$HOME"/.gitconfig <<-EOF &&
index 40d3c42618c04f8b0e656af83fb2e303601dd7ff..03187557990b36c01e158bd329ae24373dedba2b 100755 (executable)
@@ -68,9 +68,10 @@ test_expect_success 'read with --list: xdg file exists and ~/.gitconfig exists'
        >.gitconfig &&
        echo "[user]" >.gitconfig &&
        echo "  name = read_gitconfig" >>.gitconfig &&
-       echo user.name=read_gitconfig >expected &&
+       echo user.name=read_config >expected &&
+       echo user.name=read_gitconfig >>expected &&
        git config --global --list >actual &&
-       test_cmp expected actual
+       test_cmp expected actual
 '