mirror of
https://github.com/git/git
synced 2024-08-27 11:39:22 +00:00
![Johannes Schindelin](/assets/img/avatar_default.png)
The `onbranch` test cases touched by this patch do not actually try to include any other config. Their purpose is to avoid regressing on two bugs in the `include.onbranch:<name>.path` code that we fixed in the past, bugs that are actually unrelated to any concrete branch name. The first bug was fixed in85fe0e800c
(config: work around bug with includeif:onbranch and early config, 2019-07-31). Essentially, when reading early config, there would be a catch-22 trying to access the refs, and therefore we simply cannot evaluate the condition at that point. The test case ensures that we avoid emitting this bogus message: BUG: refs.c:1851: attempting to get main_ref_store outside of repository The second test case concerns the non-Git scenario, where we simply do not have a current branch to begin with (because we don't have a repository in the first place), and the test case was introduced in22932d9169
(config: stop checking whether the_repository is NULL, 2019-08-06) to ensure that we don't cause a segmentation fault should the code still incorrectly try to look at any ref. In short, neither of these two test cases will ever look at a current branch name, even in case of regressions. Therefore, the actual branch name does not matter at all. We can therefore easily avoid racially-charged branch names here, and that's what this patch does. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
103 lines
2.4 KiB
Bash
Executable file
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_must_be_empty 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:topic\"]path=../broken"
|
|
'
|
|
|
|
test_expect_success 'onbranch config outside of git repo' '
|
|
test_config_global includeIf.onbranch:topic.path non-existent &&
|
|
nongit git help
|
|
'
|
|
|
|
test_done
|