]>
Commit | Line | Data |
---|---|---|
9b25a0b5 JK |
1 | #!/bin/sh |
2 | ||
3 | test_description='test config file include directives' | |
4 | . ./test-lib.sh | |
5 | ||
6 | test_expect_success 'include file by absolute path' ' | |
7 | echo "[test]one = 1" >one && | |
8 | echo "[include]path = \"$(pwd)/one\"" >.gitconfig && | |
9 | echo 1 >expect && | |
10 | git config test.one >actual && | |
11 | test_cmp expect actual | |
12 | ' | |
13 | ||
14 | test_expect_success 'include file by relative path' ' | |
15 | echo "[test]one = 1" >one && | |
16 | echo "[include]path = one" >.gitconfig && | |
17 | echo 1 >expect && | |
18 | git config test.one >actual && | |
19 | test_cmp expect actual | |
20 | ' | |
21 | ||
22 | test_expect_success 'chained relative paths' ' | |
23 | mkdir subdir && | |
24 | echo "[test]three = 3" >subdir/three && | |
25 | echo "[include]path = three" >subdir/two && | |
26 | echo "[include]path = subdir/two" >.gitconfig && | |
27 | echo 3 >expect && | |
28 | git config test.three >actual && | |
29 | test_cmp expect actual | |
30 | ' | |
31 | ||
32 | test_expect_success 'include options can still be examined' ' | |
33 | echo "[test]one = 1" >one && | |
34 | echo "[include]path = one" >.gitconfig && | |
35 | echo one >expect && | |
36 | git config include.path >actual && | |
37 | test_cmp expect actual | |
38 | ' | |
39 | ||
40 | test_expect_success 'listing includes option and expansion' ' | |
41 | echo "[test]one = 1" >one && | |
42 | echo "[include]path = one" >.gitconfig && | |
43 | cat >expect <<-\EOF && | |
44 | include.path=one | |
45 | test.one=1 | |
46 | EOF | |
47 | git config --list >actual.full && | |
48 | grep -v ^core actual.full >actual && | |
49 | test_cmp expect actual | |
50 | ' | |
51 | ||
52 | test_expect_success 'single file lookup does not expand includes by default' ' | |
53 | echo "[test]one = 1" >one && | |
54 | echo "[include]path = one" >.gitconfig && | |
55 | test_must_fail git config -f .gitconfig test.one && | |
56 | test_must_fail git config --global test.one && | |
57 | echo 1 >expect && | |
58 | git config --includes -f .gitconfig test.one >actual && | |
59 | test_cmp expect actual | |
60 | ' | |
61 | ||
62 | test_expect_success 'single file list does not expand includes by default' ' | |
63 | echo "[test]one = 1" >one && | |
64 | echo "[include]path = one" >.gitconfig && | |
65 | echo "include.path=one" >expect && | |
66 | git config -f .gitconfig --list >actual && | |
67 | test_cmp expect actual | |
68 | ' | |
69 | ||
70 | test_expect_success 'writing config file does not expand includes' ' | |
71 | echo "[test]one = 1" >one && | |
72 | echo "[include]path = one" >.gitconfig && | |
73 | git config test.two 2 && | |
74 | echo 2 >expect && | |
75 | git config --no-includes test.two >actual && | |
76 | test_cmp expect actual && | |
77 | test_must_fail git config --no-includes test.one | |
78 | ' | |
79 | ||
80 | test_expect_success 'config modification does not affect includes' ' | |
81 | echo "[test]one = 1" >one && | |
82 | echo "[include]path = one" >.gitconfig && | |
83 | git config test.one 2 && | |
84 | echo 1 >expect && | |
85 | git config -f one test.one >actual && | |
86 | test_cmp expect actual && | |
87 | cat >expect <<-\EOF && | |
88 | 1 | |
89 | 2 | |
90 | EOF | |
91 | git config --get-all test.one >actual && | |
92 | test_cmp expect actual | |
93 | ' | |
94 | ||
95 | test_expect_success 'missing include files are ignored' ' | |
96 | cat >.gitconfig <<-\EOF && | |
97 | [include]path = foo | |
98 | [test]value = yes | |
99 | EOF | |
100 | echo yes >expect && | |
101 | git config test.value >actual && | |
102 | test_cmp expect actual | |
103 | ' | |
104 | ||
105 | test_expect_success 'absolute includes from command line work' ' | |
106 | echo "[test]one = 1" >one && | |
107 | echo 1 >expect && | |
108 | git -c include.path="$PWD/one" config test.one >actual && | |
109 | test_cmp expect actual | |
110 | ' | |
111 | ||
112 | test_expect_success 'relative includes from command line fail' ' | |
113 | echo "[test]one = 1" >one && | |
114 | test_must_fail git -c include.path=one config test.one | |
115 | ' | |
116 | ||
117 | test_expect_success 'include cycles are detected' ' | |
118 | cat >.gitconfig <<-\EOF && | |
119 | [test]value = gitconfig | |
120 | [include]path = cycle | |
121 | EOF | |
122 | cat >cycle <<-\EOF && | |
123 | [test]value = cycle | |
124 | [include]path = .gitconfig | |
125 | EOF | |
126 | cat >expect <<-\EOF && | |
127 | gitconfig | |
128 | cycle | |
129 | EOF | |
130 | test_must_fail git config --get-all test.value 2>stderr && | |
131 | grep "exceeded maximum include depth" stderr | |
132 | ' | |
133 | ||
134 | test_done |