#!/bin/sh test_description='Test read_early_config()' . ./test-lib.sh test_expect_success 'read early config' ' test_config early.config correct && test-tool config read_early_config early.config >output && test correct = "$(cat output)" ' test_expect_success 'in a sub-directory' ' test_config early.config sub && mkdir -p sub && ( cd sub && test-tool config read_early_config early.config ) >output && test sub = "$(cat output)" ' test_expect_success 'ceiling' ' test_config early.config ceiling && mkdir -p sub && ( GIT_CEILING_DIRECTORIES="$PWD" && export GIT_CEILING_DIRECTORIES && cd sub && test-tool config read_early_config early.config ) >output && test -z "$(cat output)" ' test_expect_success 'ceiling #2' ' mkdir -p xdg/git && git config -f xdg/git/config early.config xdg && test_config early.config ceiling && mkdir -p sub && ( XDG_CONFIG_HOME="$PWD"/xdg && GIT_CEILING_DIRECTORIES="$PWD" && export GIT_CEILING_DIRECTORIES XDG_CONFIG_HOME && cd sub && test-tool config read_early_config early.config ) >output && test xdg = "$(cat output)" ' cmdline_config="'test.source=cmdline'" test_expect_success 'read config file in right order' ' echo "[test]source = home" >>.gitconfig && git init foo && ( cd foo && echo "[test]source = repo" >>.git/config && GIT_CONFIG_PARAMETERS=$cmdline_config test-tool config \ read_early_config test.source >actual && cat >expected <<-\EOF && home repo cmdline EOF test_cmp expected actual ) ' test_with_config () { rm -rf throwaway && git init throwaway && ( cd throwaway && echo "$*" >.git/config && test-tool config read_early_config early.config ) } test_expect_success 'ignore .git/ with incompatible repository version' ' test_with_config "[core]repositoryformatversion = 999999" 2>err && test_i18ngrep "warning:.* Expected git repo version <= [1-9]" err ' test_expect_failure 'ignore .git/ with invalid repository version' ' test_with_config "[core]repositoryformatversion = invalid" ' test_expect_failure 'ignore .git/ with invalid config' ' test_with_config "[" ' test_expect_success 'early config and onbranch' ' echo "[broken" >broken && test_with_config "[includeif \"onbranch:master\"]path=../broken" ' test_expect_success 'onbranch config outside of git repo' ' test_config_global includeIf.onbranch:master.path non-existent && nongit git help ' test_done