Merge branch 'js/diff-files-i-t-a-fix-for-difftool'
[git] / t / t1309-early-config.sh
1 #!/bin/sh
2
3 test_description='Test read_early_config()'
4
5 . ./test-lib.sh
6
7 test_expect_success 'read early config' '
8         test_config early.config correct &&
9         test-tool config read_early_config early.config >output &&
10         test correct = "$(cat output)"
11 '
12
13 test_expect_success 'in a sub-directory' '
14         test_config early.config sub &&
15         mkdir -p sub &&
16         (
17                 cd sub &&
18                 test-tool config read_early_config early.config
19         ) >output &&
20         test sub = "$(cat output)"
21 '
22
23 test_expect_success 'ceiling' '
24         test_config early.config ceiling &&
25         mkdir -p sub &&
26         (
27                 GIT_CEILING_DIRECTORIES="$PWD" &&
28                 export GIT_CEILING_DIRECTORIES &&
29                 cd sub &&
30                 test-tool config read_early_config early.config
31         ) >output &&
32         test_must_be_empty output
33 '
34
35 test_expect_success 'ceiling #2' '
36         mkdir -p xdg/git &&
37         git config -f xdg/git/config early.config xdg &&
38         test_config early.config ceiling &&
39         mkdir -p sub &&
40         (
41                 XDG_CONFIG_HOME="$PWD"/xdg &&
42                 GIT_CEILING_DIRECTORIES="$PWD" &&
43                 export GIT_CEILING_DIRECTORIES XDG_CONFIG_HOME &&
44                 cd sub &&
45                 test-tool config read_early_config early.config
46         ) >output &&
47         test xdg = "$(cat output)"
48 '
49
50 cmdline_config="'test.source=cmdline'"
51 test_expect_success 'read config file in right order' '
52         echo "[test]source = home" >>.gitconfig &&
53         git init foo &&
54         (
55                 cd foo &&
56                 echo "[test]source = repo" >>.git/config &&
57                 GIT_CONFIG_PARAMETERS=$cmdline_config test-tool config \
58                         read_early_config test.source >actual &&
59                 cat >expected <<-\EOF &&
60                 home
61                 repo
62                 cmdline
63                 EOF
64                 test_cmp expected actual
65         )
66 '
67
68 test_with_config () {
69         rm -rf throwaway &&
70         git init throwaway &&
71         (
72                 cd throwaway &&
73                 echo "$*" >.git/config &&
74                 test-tool config read_early_config early.config
75         )
76 }
77
78 test_expect_success 'ignore .git/ with incompatible repository version' '
79         test_with_config "[core]repositoryformatversion = 999999" 2>err &&
80         test_i18ngrep "warning:.* Expected git repo version <= [1-9]" err
81 '
82
83 test_expect_failure 'ignore .git/ with invalid repository version' '
84         test_with_config "[core]repositoryformatversion = invalid"
85 '
86
87
88 test_expect_failure 'ignore .git/ with invalid config' '
89         test_with_config "["
90 '
91
92 test_expect_success 'early config and onbranch' '
93         echo "[broken" >broken &&
94         test_with_config "[includeif \"onbranch:master\"]path=../broken"
95 '
96
97 test_expect_success 'onbranch config outside of git repo' '
98         test_config_global includeIf.onbranch:master.path non-existent &&
99         nongit git help
100 '
101
102 test_done