]> git.ipfire.org Git - thirdparty/git.git/blobdiff - t/t1300-config.sh
Sync with 2.31.5
[thirdparty/git.git] / t / t1300-config.sh
index e0dd5d65cedadbab2a5d4aa9c0697b346374612b..9ff46f3b0471fb146bec00329459040619edd88e 100755 (executable)
@@ -1374,16 +1374,29 @@ test_expect_success 'git --config-env=key=envvar support' '
        cat >expect <<-\EOF &&
        value
        value
+       value
+       value
+       false
        false
        EOF
        {
                ENVVAR=value git --config-env=core.name=ENVVAR config core.name &&
+               ENVVAR=value git --config-env core.name=ENVVAR config core.name &&
                ENVVAR=value git --config-env=foo.CamelCase=ENVVAR config foo.camelcase &&
-               ENVVAR= git --config-env=foo.flag=ENVVAR config --bool foo.flag
+               ENVVAR=value git --config-env foo.CamelCase=ENVVAR config foo.camelcase &&
+               ENVVAR= git --config-env=foo.flag=ENVVAR config --bool foo.flag &&
+               ENVVAR= git --config-env foo.flag=ENVVAR config --bool foo.flag
        } >actual &&
        test_cmp expect actual
 '
 
+test_expect_success 'git --config-env with missing value' '
+       test_must_fail env ENVVAR=value git --config-env 2>error &&
+       grep "no config key given for --config-env" error &&
+       test_must_fail env ENVVAR=value git --config-env config core.name 2>error &&
+       grep "invalid config format: config" error
+'
+
 test_expect_success 'git --config-env fails with invalid parameters' '
        test_must_fail git --config-env=foo.flag config --bool foo.flag 2>error &&
        test_i18ngrep "invalid config format: foo.flag" error &&
@@ -2059,6 +2072,91 @@ test_expect_success '--show-scope with --show-origin' '
        test_cmp expect output
 '
 
+test_expect_success 'override global and system config' '
+       test_when_finished rm -f "$HOME"/.config/git &&
+
+       cat >"$HOME"/.gitconfig <<-EOF &&
+       [home]
+               config = true
+       EOF
+       mkdir -p "$HOME"/.config/git &&
+       cat >"$HOME"/.config/git/config <<-EOF &&
+       [xdg]
+               config = true
+       EOF
+       cat >.git/config <<-EOF &&
+       [local]
+               config = true
+       EOF
+       cat >custom-global-config <<-EOF &&
+       [global]
+               config = true
+       EOF
+       cat >custom-system-config <<-EOF &&
+       [system]
+               config = true
+       EOF
+
+       cat >expect <<-EOF &&
+       global  xdg.config=true
+       global  home.config=true
+       local   local.config=true
+       EOF
+       git config --show-scope --list >output &&
+       test_cmp expect output &&
+
+       cat >expect <<-EOF &&
+       system  system.config=true
+       global  global.config=true
+       local   local.config=true
+       EOF
+       GIT_CONFIG_NOSYSTEM=false GIT_CONFIG_SYSTEM=custom-system-config GIT_CONFIG_GLOBAL=custom-global-config \
+               git config --show-scope --list >output &&
+       test_cmp expect output &&
+
+       cat >expect <<-EOF &&
+       local   local.config=true
+       EOF
+       GIT_CONFIG_NOSYSTEM=false GIT_CONFIG_SYSTEM=/dev/null GIT_CONFIG_GLOBAL=/dev/null \
+               git config --show-scope --list >output &&
+       test_cmp expect output
+'
+
+test_expect_success 'override global and system config with missing file' '
+       test_must_fail env GIT_CONFIG_GLOBAL=does-not-exist GIT_CONFIG_SYSTEM=/dev/null git config --global --list &&
+       test_must_fail env GIT_CONFIG_GLOBAL=/dev/null GIT_CONFIG_SYSTEM=does-not-exist git config --system --list &&
+       GIT_CONFIG_GLOBAL=does-not-exist GIT_CONFIG_SYSTEM=does-not-exist git version
+'
+
+test_expect_success 'system override has no effect with GIT_CONFIG_NOSYSTEM' '
+       # `git config --system` has different semantics compared to other
+       # commands as it ignores GIT_CONFIG_NOSYSTEM. We thus test whether the
+       # variable has an effect via a different proxy.
+       cat >alias-config <<-EOF &&
+       [alias]
+               hello-world = !echo "hello world"
+       EOF
+       test_must_fail env GIT_CONFIG_NOSYSTEM=true GIT_CONFIG_SYSTEM=alias-config \
+               git hello-world &&
+       GIT_CONFIG_NOSYSTEM=false GIT_CONFIG_SYSTEM=alias-config \
+               git hello-world >actual &&
+       echo "hello world" >expect &&
+       test_cmp expect actual
+'
+
+test_expect_success 'write to overridden global and system config' '
+       cat >expect <<EOF &&
+[config]
+       key = value
+EOF
+
+       GIT_CONFIG_GLOBAL=write-to-global git config --global config.key value &&
+       test_cmp expect write-to-global &&
+
+       GIT_CONFIG_SYSTEM=write-to-system git config --system config.key value &&
+       test_cmp expect write-to-system
+'
+
 for opt in --local --worktree
 do
        test_expect_success "$opt requires a repo" '