1#!/bin/sh
2#
3# Copyright (c) 2005 Johannes Schindelin
4#
5
6test_description='Test git-config-set in different settings'
7
8. ./test-lib.sh
9
10test -f .git/config && rm .git/config
11
12git-config-set core.penguin "little blue"
13
14cat > expect << EOF
15#
16# This is the config file
17#
18
19[core]
20 penguin = little blue
21EOF
22
23test_expect_success 'initial' 'cmp .git/config expect'
24
25git-config-set Core.Movie BadPhysics
26
27cat > expect << EOF
28#
29# This is the config file
30#
31
32[core]
33 penguin = little blue
34 Movie = BadPhysics
35EOF
36
37test_expect_success 'mixed case' 'cmp .git/config expect'
38
39git-config-set Cores.WhatEver Second
40
41cat > expect << EOF
42#
43# This is the config file
44#
45
46[core]
47 penguin = little blue
48 Movie = BadPhysics
49[Cores]
50 WhatEver = Second
51EOF
52
53test_expect_success 'similar section' 'cmp .git/config expect'
54
55git-config-set CORE.UPPERCASE true
56
57cat > expect << EOF
58#
59# This is the config file
60#
61
62[core]
63 penguin = little blue
64 Movie = BadPhysics
65 UPPERCASE = true
66[Cores]
67 WhatEver = Second
68EOF
69
70test_expect_success 'similar section' 'cmp .git/config expect'
71
72test_expect_success 'replace with non-match' \
73 'git-config-set core.penguin kingpin !blue'
74
75test_expect_success 'replace with non-match (actually matching)' \
76 'git-config-set core.penguin "very blue" !kingpin'
77
78cat > expect << EOF
79#
80# This is the config file
81#
82
83[core]
84 penguin = very blue
85 Movie = BadPhysics
86 UPPERCASE = true
87 penguin = kingpin
88[Cores]
89 WhatEver = Second
90EOF
91
92test_expect_success 'non-match result' 'cmp .git/config expect'
93
94cat > .git/config << EOF
95[beta] ; silly comment # another comment
96noIndent= sillyValue ; 'nother silly comment
97
98# empty line
99 ; comment
100 haha ="beta" # last silly comment
101haha = hello
102 haha = bello
103[nextSection] noNewline = ouch
104EOF
105
106cp .git/config .git/config2
107
108test_expect_success 'multiple unset' \
109 'git-config-set --unset-all beta.haha'
110
111cat > expect << EOF
112[beta] ; silly comment # another comment
113noIndent= sillyValue ; 'nother silly comment
114
115# empty line
116 ; comment
117[nextSection] noNewline = ouch
118EOF
119
120test_expect_success 'multiple unset is correct' 'cmp .git/config expect'
121
122mv .git/config2 .git/config
123
124test_expect_success '--replace-all' \
125 'git-config-set --replace-all beta.haha gamma'
126
127cat > expect << EOF
128[beta] ; silly comment # another comment
129noIndent= sillyValue ; 'nother silly comment
130
131# empty line
132 ; comment
133 haha = gamma
134[nextSection] noNewline = ouch
135EOF
136
137test_expect_success 'all replaced' 'cmp .git/config expect'
138
139git-config-set beta.haha alpha
140
141cat > expect << EOF
142[beta] ; silly comment # another comment
143noIndent= sillyValue ; 'nother silly comment
144
145# empty line
146 ; comment
147 haha = alpha
148[nextSection] noNewline = ouch
149EOF
150
151test_expect_success 'really mean test' 'cmp .git/config expect'
152
153git-config-set nextsection.nonewline wow
154
155cat > expect << EOF
156[beta] ; silly comment # another comment
157noIndent= sillyValue ; 'nother silly comment
158
159# empty line
160 ; comment
161 haha = alpha
162[nextSection]
163 nonewline = wow
164EOF
165
166test_expect_success 'really really mean test' 'cmp .git/config expect'
167
168test_expect_success 'get value' 'test alpha = $(git-config-set beta.haha)'
169git-config-set --unset beta.haha
170
171cat > expect << EOF
172[beta] ; silly comment # another comment
173noIndent= sillyValue ; 'nother silly comment
174
175# empty line
176 ; comment
177[nextSection]
178 nonewline = wow
179EOF
180
181test_expect_success 'unset' 'cmp .git/config expect'
182
183git-config-set nextsection.NoNewLine "wow2 for me" "for me$"
184
185cat > expect << EOF
186[beta] ; silly comment # another comment
187noIndent= sillyValue ; 'nother silly comment
188
189# empty line
190 ; comment
191[nextSection]
192 nonewline = wow
193 NoNewLine = wow2 for me
194EOF
195
196test_expect_success 'multivar' 'cmp .git/config expect'
197
198test_expect_success 'non-match' \
199 'git-config-set --get nextsection.nonewline !for'
200
201test_expect_success 'non-match value' \
202 'test wow = $(git-config-set --get nextsection.nonewline !for)'
203
204test_expect_failure 'ambiguous get' \
205 'git-config-set --get nextsection.nonewline'
206
207test_expect_success 'get multivar' \
208 'git-config-set --get-all nextsection.nonewline'
209
210git-config-set nextsection.nonewline "wow3" "wow$"
211
212cat > expect << EOF
213[beta] ; silly comment # another comment
214noIndent= sillyValue ; 'nother silly comment
215
216# empty line
217 ; comment
218[nextSection]
219 nonewline = wow3
220 NoNewLine = wow2 for me
221EOF
222
223test_expect_success 'multivar replace' 'cmp .git/config expect'
224
225test_expect_failure 'ambiguous value' 'git-config-set nextsection.nonewline'
226
227test_expect_failure 'ambiguous unset' \
228 'git-config-set --unset nextsection.nonewline'
229
230test_expect_failure 'invalid unset' \
231 'git-config-set --unset somesection.nonewline'
232
233git-config-set --unset nextsection.nonewline "wow3$"
234
235cat > expect << EOF
236[beta] ; silly comment # another comment
237noIndent= sillyValue ; 'nother silly comment
238
239# empty line
240 ; comment
241[nextSection]
242 NoNewLine = wow2 for me
243EOF
244
245test_expect_success 'multivar unset' 'cmp .git/config expect'
246
247test_expect_failure 'invalid key' 'git-config-set inval.2key blabla'
248
249test_expect_success 'correct key' 'git-config-set 123456.a123 987'
250
251test_expect_success 'hierarchical section' \
252 'git-config-set 1.2.3.alpha beta'
253
254cat > expect << EOF
255[beta] ; silly comment # another comment
256noIndent= sillyValue ; 'nother silly comment
257
258# empty line
259 ; comment
260[nextSection]
261 NoNewLine = wow2 for me
262[123456]
263 a123 = 987
264[1.2.3]
265 alpha = beta
266EOF
267
268test_expect_success 'hierarchical section value' 'cmp .git/config expect'
269
270test_done
271