git-commit-vandalism/t/t1309-early-config.sh
Jeff King 22932d9169 config: stop checking whether the_repository is NULL
Since the previous commit, our invariant that the_repository is never
NULL is restored, and we can stop being defensive in include_by_branch().

We can confirm the fix by showing that an onbranch config include will
not cause a segfault when run outside a git repository. I've put this in
t1309-early-config since it's related to the case added by 85fe0e800c
(config: work around bug with includeif:onbranch and early config,
2019-07-31), though technically the issue was with
read_very_early_config() and not read_early_config().

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2019-08-06 13:09:01 -07:00

103 lines
2.4 KiB
Bash
Executable File

#!/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