t1300-repo-config.sh 23.9 KB
Newer Older
1 2 3 4 5
#!/bin/sh
#
# Copyright (c) 2005 Johannes Schindelin
#

6
test_description='Test git config in different settings'
7 8 9

. ./test-lib.sh

10 11 12
test_expect_success 'clear default config' '
	rm -f .git/config
'
13 14 15 16 17

cat > expect << EOF
[core]
	penguin = little blue
EOF
18 19 20 21
test_expect_success 'initial' '
	git config core.penguin "little blue" &&
	test_cmp expect .git/config
'
22 23 24 25 26 27

cat > expect << EOF
[core]
	penguin = little blue
	Movie = BadPhysics
EOF
28 29 30 31
test_expect_success 'mixed case' '
	git config Core.Movie BadPhysics &&
	test_cmp expect .git/config
'
32 33 34 35 36 37 38 39

cat > expect << EOF
[core]
	penguin = little blue
	Movie = BadPhysics
[Cores]
	WhatEver = Second
EOF
40
test_expect_success 'similar section' '
R
Ramkumar Ramachandra 已提交
41
	git config Cores.WhatEver Second &&
42 43
	test_cmp expect .git/config
'
44 45 46 47 48 49 50 51 52

cat > expect << EOF
[core]
	penguin = little blue
	Movie = BadPhysics
	UPPERCASE = true
[Cores]
	WhatEver = Second
EOF
53 54 55 56
test_expect_success 'uppercase section' '
	git config CORE.UPPERCASE true &&
	test_cmp expect .git/config
'
57

J
Jeff King 已提交
58 59 60
test_expect_success 'replace with non-match' '
	git config core.penguin kingpin !blue
'
61

J
Jeff King 已提交
62 63 64
test_expect_success 'replace with non-match (actually matching)' '
	git config core.penguin "very blue" !kingpin
'
65 66 67 68 69 70 71 72 73 74 75

cat > expect << EOF
[core]
	penguin = very blue
	Movie = BadPhysics
	UPPERCASE = true
	penguin = kingpin
[Cores]
	WhatEver = Second
EOF

76
test_expect_success 'non-match result' 'test_cmp expect .git/config'
77

78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
test_expect_success 'find mixed-case key by canonical name' '
	echo Second >expect &&
	git config cores.whatever >actual &&
	test_cmp expect actual
'

test_expect_success 'find mixed-case key by non-canonical name' '
	echo Second >expect &&
	git config CoReS.WhAtEvEr >actual &&
	test_cmp expect actual
'

test_expect_success 'subsections are not canonicalized by git-config' '
	cat >>.git/config <<-\EOF &&
	[section.SubSection]
	key = one
	[section "SubSection"]
	key = two
	EOF
	echo one >expect &&
	git config section.subsection.key >actual &&
	test_cmp expect actual &&
	echo two >expect &&
	git config section.SubSection.key >actual &&
	test_cmp expect actual
'
104

105 106 107 108 109 110 111 112
cat > .git/config <<\EOF
[alpha]
bar = foo
[beta]
baz = multiple \
lines
EOF

J
Jeff King 已提交
113 114 115
test_expect_success 'unset with cont. lines' '
	git config --unset beta.baz
'
116 117 118 119 120 121 122

cat > expect <<\EOF
[alpha]
bar = foo
[beta]
EOF

123
test_expect_success 'unset with cont. lines is correct' 'test_cmp expect .git/config'
124

125 126 127 128 129 130 131
cat > .git/config << EOF
[beta] ; silly comment # another comment
noIndent= sillyValue ; 'nother silly comment

# empty line
		; comment
		haha   ="beta" # last silly comment
132 133
haha = hello
	haha = bello
134 135 136
[nextSection] noNewline = ouch
EOF

137 138
cp .git/config .git/config2

J
Jeff King 已提交
139 140 141
test_expect_success 'multiple unset' '
	git config --unset-all beta.haha
'
142 143 144 145 146 147 148 149 150 151

cat > expect << EOF
[beta] ; silly comment # another comment
noIndent= sillyValue ; 'nother silly comment

# empty line
		; comment
[nextSection] noNewline = ouch
EOF

J
Jeff King 已提交
152 153 154
test_expect_success 'multiple unset is correct' '
	test_cmp expect .git/config
'
155

156 157 158 159 160 161 162 163
cp .git/config2 .git/config

test_expect_success '--replace-all missing value' '
	test_must_fail git config --replace-all beta.haha &&
	test_cmp .git/config2 .git/config
'

rm .git/config2
164

J
Jeff King 已提交
165 166 167
test_expect_success '--replace-all' '
	git config --replace-all beta.haha gamma
'
168 169 170 171 172 173 174 175 176 177 178

cat > expect << EOF
[beta] ; silly comment # another comment
noIndent= sillyValue ; 'nother silly comment

# empty line
		; comment
	haha = gamma
[nextSection] noNewline = ouch
EOF

J
Jeff King 已提交
179 180 181
test_expect_success 'all replaced' '
	test_cmp expect .git/config
'
182 183 184 185 186 187 188 189 190 191

cat > expect << EOF
[beta] ; silly comment # another comment
noIndent= sillyValue ; 'nother silly comment

# empty line
		; comment
	haha = alpha
[nextSection] noNewline = ouch
EOF
192 193 194 195
test_expect_success 'really mean test' '
	git config beta.haha alpha &&
	test_cmp expect .git/config
'
196 197 198 199 200 201 202 203 204 205 206

cat > expect << EOF
[beta] ; silly comment # another comment
noIndent= sillyValue ; 'nother silly comment

# empty line
		; comment
	haha = alpha
[nextSection]
	nonewline = wow
EOF
207 208 209 210
test_expect_success 'really really mean test' '
	git config nextsection.nonewline wow &&
	test_cmp expect .git/config
'
211

J
Jeff King 已提交
212 213 214 215 216
test_expect_success 'get value' '
	echo alpha >expect &&
	git config beta.haha >actual &&
	test_cmp expect actual
'
217 218 219 220 221 222 223 224 225 226

cat > expect << EOF
[beta] ; silly comment # another comment
noIndent= sillyValue ; 'nother silly comment

# empty line
		; comment
[nextSection]
	nonewline = wow
EOF
227 228 229 230
test_expect_success 'unset' '
	git config --unset beta.haha &&
	test_cmp expect .git/config
'
231 232 233 234 235 236 237 238 239 240 241

cat > expect << EOF
[beta] ; silly comment # another comment
noIndent= sillyValue ; 'nother silly comment

# empty line
		; comment
[nextSection]
	nonewline = wow
	NoNewLine = wow2 for me
EOF
242 243 244 245
test_expect_success 'multivar' '
	git config nextsection.NoNewLine "wow2 for me" "for me$" &&
	test_cmp expect .git/config
'
246

J
Jeff King 已提交
247 248 249
test_expect_success 'non-match' '
	git config --get nextsection.nonewline !for
'
250

J
Jeff King 已提交
251 252 253 254 255
test_expect_success 'non-match value' '
	echo wow >expect &&
	git config --get nextsection.nonewline !for >actual &&
	test_cmp expect actual
'
256

257 258 259 260
test_expect_success 'multi-valued get returns final one' '
	echo "wow2 for me" >expect &&
	git config --get nextsection.nonewline >actual &&
	test_cmp expect actual
J
Junio C Hamano 已提交
261
'
262

263 264 265 266 267 268 269
test_expect_success 'multi-valued get-all returns all' '
	cat >expect <<-\EOF &&
	wow
	wow2 for me
	EOF
	git config --get-all nextsection.nonewline >actual &&
	test_cmp expect actual
J
Jeff King 已提交
270
'
271

272 273 274 275 276 277 278 279 280 281
cat > expect << EOF
[beta] ; silly comment # another comment
noIndent= sillyValue ; 'nother silly comment

# empty line
		; comment
[nextSection]
	nonewline = wow3
	NoNewLine = wow2 for me
EOF
282 283 284 285
test_expect_success 'multivar replace' '
	git config nextsection.nonewline "wow3" "wow$" &&
	test_cmp expect .git/config
'
286

J
Junio C Hamano 已提交
287
test_expect_success 'ambiguous unset' '
288
	test_must_fail git config --unset nextsection.nonewline
J
Junio C Hamano 已提交
289
'
290

J
Junio C Hamano 已提交
291
test_expect_success 'invalid unset' '
292
	test_must_fail git config --unset somesection.nonewline
J
Junio C Hamano 已提交
293
'
294 295 296 297 298 299 300 301 302 303 304

cat > expect << EOF
[beta] ; silly comment # another comment
noIndent= sillyValue ; 'nother silly comment

# empty line
		; comment
[nextSection]
	NoNewLine = wow2 for me
EOF

305 306 307 308
test_expect_success 'multivar unset' '
	git config --unset nextsection.nonewline "wow3$" &&
	test_cmp expect .git/config
'
309

310
test_expect_success 'invalid key' 'test_must_fail git config inval.2key blabla'
311

312
test_expect_success 'correct key' 'git config 123456.a123 987'
313

J
Jeff King 已提交
314 315 316
test_expect_success 'hierarchical section' '
	git config Version.1.2.3eX.Alpha beta
'
317 318 319 320 321 322 323 324 325 326 327

cat > expect << EOF
[beta] ; silly comment # another comment
noIndent= sillyValue ; 'nother silly comment

# empty line
		; comment
[nextSection]
	NoNewLine = wow2 for me
[123456]
	a123 = 987
L
Linus Torvalds 已提交
328 329
[Version "1.2.3eX"]
	Alpha = beta
330 331
EOF

J
Jeff King 已提交
332 333 334
test_expect_success 'hierarchical section value' '
	test_cmp expect .git/config
'
335

336 337 338 339
cat > expect << EOF
beta.noindent=sillyValue
nextsection.nonewline=wow2 for me
123456.a123=987
J
Junio C Hamano 已提交
340
version.1.2.3eX.alpha=beta
341 342
EOF

J
Jeff King 已提交
343 344 345 346
test_expect_success 'working --list' '
	git config --list > output &&
	test_cmp expect output
'
347 348 349 350 351 352 353 354
cat > expect << EOF
EOF

test_expect_success '--list without repo produces empty output' '
	git --git-dir=nonexistent config --list >output &&
	test_cmp expect output
'

355 356 357 358 359
cat > expect << EOF
beta.noindent sillyValue
nextsection.nonewline wow2 for me
EOF

J
Jeff King 已提交
360 361 362 363
test_expect_success '--get-regexp' '
	git config --get-regexp in >output &&
	test_cmp expect output
'
364

365 366 367 368 369
cat > expect << EOF
wow2 for me
wow4 for you
EOF

370 371 372 373 374
test_expect_success '--add' '
	git config --add nextsection.nonewline "wow4 for you" &&
	git config --get-all nextsection.nonewline > output &&
	test_cmp expect output
'
375

376 377 378
cat > .git/config << EOF
[novalue]
	variable
379 380
[emptyvalue]
	variable =
381 382
EOF

J
Jeff King 已提交
383 384 385
test_expect_success 'get variable with no value' '
	git config --get novalue.variable ^$
'
386

J
Jeff King 已提交
387 388 389
test_expect_success 'get variable with empty value' '
	git config --get emptyvalue.variable ^$
'
390

391 392
echo novalue.variable > expect

J
Jeff King 已提交
393 394 395 396
test_expect_success 'get-regexp variable with no value' '
	git config --get-regexp novalue > output &&
	test_cmp expect output
'
397

398 399
echo 'novalue.variable true' > expect

J
Jeff King 已提交
400 401 402 403
test_expect_success 'get-regexp --bool variable with no value' '
	git config --bool --get-regexp novalue > output &&
	test_cmp expect output
'
404

405 406
echo 'emptyvalue.variable ' > expect

J
Jeff King 已提交
407 408 409 410
test_expect_success 'get-regexp variable with empty value' '
	git config --get-regexp emptyvalue > output &&
	test_cmp expect output
'
411 412 413

echo true > expect

J
Jeff King 已提交
414 415 416 417
test_expect_success 'get bool variable with no value' '
	git config --bool novalue.variable > output &&
	test_cmp expect output
'
418 419 420

echo false > expect

J
Jeff King 已提交
421 422 423 424
test_expect_success 'get bool variable with empty value' '
	git config --bool emptyvalue.variable > output &&
	test_cmp expect output
'
425

426 427
test_expect_success 'no arguments, but no crash' '
	test_must_fail git config >output 2>&1 &&
428
	test_i18ngrep usage output
429
'
430

431 432 433 434 435 436 437 438 439 440 441 442
cat > .git/config << EOF
[a.b]
	c = d
EOF

cat > expect << EOF
[a.b]
	c = d
[a]
	x = y
EOF

443 444 445 446
test_expect_success 'new section is partial match of another' '
	git config a.x y &&
	test_cmp expect .git/config
'
447 448 449 450 451 452 453 454 455 456 457

cat > expect << EOF
[a.b]
	c = d
[a]
	x = y
	b = c
[b]
	x = y
EOF

458 459 460 461 462
test_expect_success 'new variable inserts into proper section' '
	git config b.x y &&
	git config a.b c &&
	test_cmp expect .git/config
'
463

J
Jeff King 已提交
464 465 466
test_expect_success 'alternative GIT_CONFIG (non-existing file should fail)' '
	test_must_fail git config --file non-existing-config -l
'
A
Alex Riesen 已提交
467

468 469 470 471 472 473 474 475 476
cat > other-config << EOF
[ein]
	bahn = strasse
EOF

cat > expect << EOF
ein.bahn=strasse
EOF

477
test_expect_success 'alternative GIT_CONFIG' '
478
	GIT_CONFIG=other-config git config --list >output &&
479 480
	test_cmp expect output
'
481

J
Jeff King 已提交
482
test_expect_success 'alternative GIT_CONFIG (--file)' '
483
	git config --file other-config --list >output &&
J
Jeff King 已提交
484 485
	test_cmp expect output
'
A
Alex Riesen 已提交
486

487 488 489 490 491 492 493 494 495 496 497 498 499
test_expect_success 'alternative GIT_CONFIG (--file=-)' '
	git config --file - --list <other-config >output &&
	test_cmp expect output
'

test_expect_success 'setting a value in stdin is an error' '
	test_must_fail git config --file - some.value foo
'

test_expect_success 'editing stdin is an error' '
	test_must_fail git config --file - --edit
'

500 501 502 503
test_expect_success 'refer config from subdirectory' '
	mkdir x &&
	(
		cd x &&
J
Jeff King 已提交
504
		echo strasse >expect &&
505 506 507 508 509 510
		git config --get --file ../other-config ein.bahn >actual &&
		test_cmp expect actual
	)

'

511 512 513 514 515 516 517 518
test_expect_success 'refer config from subdirectory via GIT_CONFIG' '
	(
		cd x &&
		GIT_CONFIG=../other-config git config --get ein.bahn >actual &&
		test_cmp expect actual
	)
'

519 520 521 522 523 524 525
cat > expect << EOF
[ein]
	bahn = strasse
[anwohner]
	park = ausweis
EOF

526 527 528 529
test_expect_success '--set in alternative GIT_CONFIG' '
	GIT_CONFIG=other-config git config anwohner.park ausweis &&
	test_cmp expect other-config
'
530

531 532 533 534 535 536 537 538 539 540 541
cat > .git/config << EOF
# Hallo
	#Bello
[branch "eins"]
	x = 1
[branch.eins]
	y = 1
	[branch "1 234 blabl/a"]
weird
EOF

J
Jeff King 已提交
542 543 544
test_expect_success 'rename section' '
	git config --rename-section branch.eins branch.zwei
'
545 546 547 548 549 550 551 552 553 554 555 556

cat > expect << EOF
# Hallo
	#Bello
[branch "zwei"]
	x = 1
[branch "zwei"]
	y = 1
	[branch "1 234 blabl/a"]
weird
EOF

J
Jeff King 已提交
557 558 559
test_expect_success 'rename succeeded' '
	test_cmp expect .git/config
'
560

J
Jeff King 已提交
561
test_expect_success 'rename non-existing section' '
562 563
	test_must_fail git config --rename-section \
		branch."world domination" branch.drei
J
Junio C Hamano 已提交
564
'
565

J
Jeff King 已提交
566 567 568
test_expect_success 'rename succeeded' '
	test_cmp expect .git/config
'
569

J
Jeff King 已提交
570 571 572
test_expect_success 'rename another section' '
	git config --rename-section branch."1 234 blabl/a" branch.drei
'
573 574 575 576 577 578 579 580 581 582 583 584

cat > expect << EOF
# Hallo
	#Bello
[branch "zwei"]
	x = 1
[branch "zwei"]
	y = 1
[branch "drei"]
weird
EOF

J
Jeff King 已提交
585 586 587
test_expect_success 'rename succeeded' '
	test_cmp expect .git/config
'
588 589 590 591 592

cat >> .git/config << EOF
[branch "vier"] z = 1
EOF

J
Jeff King 已提交
593 594 595
test_expect_success 'rename a section with a var on the same line' '
	git config --rename-section branch.vier branch.zwei
'
596 597 598 599 600 601 602 603 604 605 606 607 608 609

cat > expect << EOF
# Hallo
	#Bello
[branch "zwei"]
	x = 1
[branch "zwei"]
	y = 1
[branch "drei"]
weird
[branch "zwei"]
	z = 1
EOF

J
Jeff King 已提交
610 611 612
test_expect_success 'rename succeeded' '
	test_cmp expect .git/config
'
613

614 615 616 617 618 619 620 621
test_expect_success 'renaming empty section name is rejected' '
	test_must_fail git config --rename-section branch.zwei ""
'

test_expect_success 'renaming to bogus section is rejected' '
	test_must_fail git config --rename-section branch.zwei "bogus name"
'

622 623 624 625
cat >> .git/config << EOF
  [branch "zwei"] a = 1 [branch "vier"]
EOF

J
Jeff King 已提交
626 627 628
test_expect_success 'remove section' '
	git config --remove-section branch.zwei
'
629 630 631 632 633 634 635 636

cat > expect << EOF
# Hallo
	#Bello
[branch "drei"]
weird
EOF

J
Jeff King 已提交
637 638 639
test_expect_success 'section was removed properly' '
	test_cmp expect .git/config
'
640

641 642 643 644 645 646 647 648 649
cat > expect << EOF
[gitcvs]
	enabled = true
	dbname = %Ggitcvs2.%a.%m.sqlite
[gitcvs "ext"]
	dbname = %Ggitcvs1.%a.%m.sqlite
EOF

test_expect_success 'section ending' '
650
	rm -f .git/config &&
651 652 653
	git config gitcvs.enabled true &&
	git config gitcvs.ext.dbname %Ggitcvs1.%a.%m.sqlite &&
	git config gitcvs.dbname %Ggitcvs2.%a.%m.sqlite &&
654
	test_cmp expect .git/config
655 656 657

'

658
test_expect_success numbers '
659 660
	git config kilo.gram 1k &&
	git config mega.ton 1m &&
J
Jeff King 已提交
661 662 663 664 665
	echo 1024 >expect &&
	echo 1048576 >>expect &&
	git config --int --get kilo.gram >actual &&
	git config --int --get mega.ton >>actual &&
	test_cmp expect actual
666 667
'

668 669 670 671 672 673 674
test_expect_success '--int is at least 64 bits' '
	git config giga.watts 121g &&
	echo 129922760704 >expect &&
	git config --int --get giga.watts >actual &&
	test_cmp expect actual
'

675 676
test_expect_success 'invalid unit' '
	git config aninvalid.unit "1auto" &&
J
Jeff King 已提交
677 678 679
	echo 1auto >expect &&
	git config aninvalid.unit >actual &&
	test_cmp expect actual &&
680 681
	cat >expect <<-\EOF
	fatal: bad numeric config value '\''1auto'\'' for '\''aninvalid.unit'\'' in .git/config: invalid unit
J
Jeff King 已提交
682 683
	EOF
	test_must_fail git config --int --get aninvalid.unit 2>actual &&
684
	test_i18ncmp expect actual
685 686
'

687 688 689 690 691 692 693 694 695 696 697 698 699
cat > expect << EOF
true
false
true
false
true
false
true
false
EOF

test_expect_success bool '

700 701 702 703 704 705 706 707
	git config bool.true1 01 &&
	git config bool.true2 -1 &&
	git config bool.true3 YeS &&
	git config bool.true4 true &&
	git config bool.false1 000 &&
	git config bool.false2 "" &&
	git config bool.false3 nO &&
	git config bool.false4 FALSE &&
708 709 710
	rm -f result &&
	for i in 1 2 3 4
	do
711 712
	    git config --bool --get bool.true$i >>result
	    git config --bool --get bool.false$i >>result
713
        done &&
J
Jeff King 已提交
714
	test_cmp expect result'
715

J
Junio C Hamano 已提交
716
test_expect_success 'invalid bool (--get)' '
717

718
	git config bool.nobool foobar &&
719
	test_must_fail git config --bool --get bool.nobool'
720

J
Junio C Hamano 已提交
721
test_expect_success 'invalid bool (set)' '
722

723
	test_must_fail git config --bool bool.nobool foobar'
724 725 726 727 728 729 730 731 732 733 734 735 736 737 738

cat > expect <<\EOF
[bool]
	true1 = true
	true2 = true
	true3 = true
	true4 = true
	false1 = false
	false2 = false
	false3 = false
	false4 = false
EOF

test_expect_success 'set --bool' '

739
	rm -f .git/config &&
740 741 742 743 744 745 746 747
	git config --bool bool.true1 01 &&
	git config --bool bool.true2 -1 &&
	git config --bool bool.true3 YeS &&
	git config --bool bool.true4 true &&
	git config --bool bool.false1 000 &&
	git config --bool bool.false2 "" &&
	git config --bool bool.false3 nO &&
	git config --bool bool.false4 FALSE &&
J
Jeff King 已提交
748
	test_cmp expect .git/config'
749 750 751 752 753 754 755 756 757 758

cat > expect <<\EOF
[int]
	val1 = 1
	val2 = -1
	val3 = 5242880
EOF

test_expect_success 'set --int' '

759
	rm -f .git/config &&
760 761 762
	git config --int int.val1 01 &&
	git config --int int.val2 -1 &&
	git config --int int.val3 5m &&
J
Jeff King 已提交
763 764
	test_cmp expect .git/config
'
765

J
Jeff King 已提交
766 767 768 769
test_expect_success 'get --bool-or-int' '
	cat >.git/config <<-\EOF &&
	[bool]
	true1
J
Junio C Hamano 已提交
770
	true2 = true
J
Jeff King 已提交
771 772
	false = false
	[int]
J
Junio C Hamano 已提交
773 774 775
	int1 = 0
	int2 = 1
	int3 = -1
J
Jeff King 已提交
776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793
	EOF
	cat >expect <<-\EOF &&
	true
	true
	false
	0
	1
	-1
	EOF
	{
		git config --bool-or-int bool.true1 &&
		git config --bool-or-int bool.true2 &&
		git config --bool-or-int bool.false &&
		git config --bool-or-int int.int1 &&
		git config --bool-or-int int.int2 &&
		git config --bool-or-int int.int3
	} >actual &&
	test_cmp expect actual
J
Junio C Hamano 已提交
794 795 796 797 798 799 800 801 802 803 804 805 806 807 808
'

cat >expect <<\EOF
[bool]
	true1 = true
	false1 = false
	true2 = true
	false2 = false
[int]
	int1 = 0
	int2 = 1
	int3 = -1
EOF

test_expect_success 'set --bool-or-int' '
809
	rm -f .git/config &&
J
Junio C Hamano 已提交
810 811 812 813 814 815 816 817 818 819
	git config --bool-or-int bool.true1 true &&
	git config --bool-or-int bool.false1 false &&
	git config --bool-or-int bool.true2 yes &&
	git config --bool-or-int bool.false2 no &&
	git config --bool-or-int int.int1 0 &&
	git config --bool-or-int int.int2 1 &&
	git config --bool-or-int int.int3 -1 &&
	test_cmp expect .git/config
'

820 821 822 823 824 825 826
cat >expect <<\EOF
[path]
	home = ~/
	normal = /dev/null
	trailingtilde = foo~
EOF

P
Pat Thoyts 已提交
827
test_expect_success NOT_MINGW 'set --path' '
828
	rm -f .git/config &&
829 830 831 832 833
	git config --path path.home "~/" &&
	git config --path path.normal "/dev/null" &&
	git config --path path.trailingtilde "foo~" &&
	test_cmp expect .git/config'

P
Pat Thoyts 已提交
834
if test_have_prereq NOT_MINGW && test "${HOME+set}"
835 836 837 838
then
	test_set_prereq HOMEVAR
fi

839 840 841 842 843 844
cat >expect <<EOF
$HOME/
/dev/null
foo~
EOF

845
test_expect_success HOMEVAR 'get --path' '
846 847 848 849 850 851
	git config --get --path path.home > result &&
	git config --get --path path.normal >> result &&
	git config --get --path path.trailingtilde >> result &&
	test_cmp expect result
'

852 853 854 855 856
cat >expect <<\EOF
/dev/null
foo~
EOF

P
Pat Thoyts 已提交
857
test_expect_success NOT_MINGW 'get --path copes with unset $HOME' '
858 859 860 861 862 863 864 865 866 867 868
	(
		unset HOME;
		test_must_fail git config --get --path path.home \
			>result 2>msg &&
		git config --get --path path.normal >>result &&
		git config --get --path path.trailingtilde >>result
	) &&
	grep "[Ff]ailed to expand.*~/" msg &&
	test_cmp expect result
'

869 870 871 872 873
test_expect_success 'get --path barfs on boolean variable' '
	echo "[path]bool" >.git/config &&
	test_must_fail git config --get --path path.bool
'

874 875 876 877 878 879 880
cat > expect << EOF
[quote]
	leading = " test"
	ending = "test "
	semicolon = "test;test"
	hash = "test#test"
EOF
881
test_expect_success 'quoting' '
882
	rm -f .git/config &&
883 884 885 886 887 888
	git config quote.leading " test" &&
	git config quote.ending "test " &&
	git config quote.semicolon "test;test" &&
	git config quote.hash "test#test" &&
	test_cmp expect .git/config
'
889

J
Junio C Hamano 已提交
890
test_expect_success 'key with newline' '
891
	test_must_fail git config "key.with
J
Junio C Hamano 已提交
892
newline" 123'
893

894
test_expect_success 'value with newline' 'git config key.sub value.with\\\
895 896
newline'

897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912
cat > .git/config <<\EOF
[section]
	; comment \
	continued = cont\
inued
	noncont   = not continued ; \
	quotecont = "cont;\
inued"
EOF

cat > expect <<\EOF
section.continued=continued
section.noncont=not continued
section.quotecont=cont;inued
EOF

913 914
test_expect_success 'value continued on next line' '
	git config --list > result &&
J
Jeff King 已提交
915
	test_cmp result expect
916
'
917

918 919 920 921 922 923 924 925 926 927
cat > .git/config <<\EOF
[section "sub=section"]
	val1 = foo=bar
	val2 = foo\nbar
	val3 = \n\n
	val4 =
	val5
EOF

cat > expect <<\EOF
A
Alex Riesen 已提交
928 929 930 931
section.sub=section.val1
foo=barQsection.sub=section.val2
foo
barQsection.sub=section.val3
932 933


A
Alex Riesen 已提交
934 935
Qsection.sub=section.val4
Qsection.sub=section.val5Q
936
EOF
937 938 939 940 941
test_expect_success '--null --list' '
	git config --null --list | nul_to_q >result &&
	echo >>result &&
	test_cmp expect result
'
942

943 944 945 946 947
test_expect_success '--null --get-regexp' '
	git config --null --get-regexp "val[0-9]" | nul_to_q >result &&
	echo >>result &&
	test_cmp expect result
'
948

949 950
test_expect_success 'inner whitespace kept verbatim' '
	git config section.val "foo 	  bar" &&
J
Jeff King 已提交
951 952 953
	echo "foo 	  bar" >expect &&
	git config section.val >actual &&
	test_cmp expect actual
954 955
'

956
test_expect_success SYMLINKS 'symlinked configuration' '
957 958 959 960 961 962 963 964
	ln -s notyet myconfig &&
	GIT_CONFIG=myconfig git config test.frotz nitfol &&
	test -h myconfig &&
	test -f notyet &&
	test "z$(GIT_CONFIG=notyet git config test.frotz)" = znitfol &&
	GIT_CONFIG=myconfig git config test.xyzzy rezrov &&
	test -h myconfig &&
	test -f notyet &&
J
Jeff King 已提交
965 966 967 968 969 970 971 972 973
	cat >expect <<-\EOF &&
	nitfol
	rezrov
	EOF
	{
		GIT_CONFIG=notyet git config test.frotz &&
		GIT_CONFIG=notyet git config test.xyzzy
	} >actual &&
	test_cmp expect actual
974 975
'

976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996
test_expect_success 'nonexistent configuration' '
	(
		GIT_CONFIG=doesnotexist &&
		export GIT_CONFIG &&
		test_must_fail git config --list &&
		test_must_fail git config test.xyzzy
	)
'

test_expect_success SYMLINKS 'symlink to nonexistent configuration' '
	ln -s doesnotexist linktonada &&
	ln -s linktonada linktolinktonada &&
	(
		GIT_CONFIG=linktonada &&
		export GIT_CONFIG &&
		test_must_fail git config --list &&
		GIT_CONFIG=linktolinktonada &&
		test_must_fail git config --list
	)
'

997 998 999 1000 1001 1002 1003 1004
test_expect_success 'check split_cmdline return' "
	git config alias.split-cmdline-fix 'echo \"' &&
	test_must_fail git split-cmdline-fix &&
	echo foo > foo &&
	git add foo &&
	git commit -m 'initial commit' &&
	git config branch.master.mergeoptions 'echo \"' &&
	test_must_fail git merge master
J
Jeff King 已提交
1005
"
1006

1007
test_expect_success 'git -c "key=value" support' '
J
Jeff King 已提交
1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018
	cat >expect <<-\EOF &&
	value
	value
	true
	EOF
	{
		git -c core.name=value config core.name &&
		git -c foo.CamelCase=value config foo.camelcase &&
		git -c foo.flag config --bool foo.flag
	} >actual &&
	test_cmp expect actual &&
1019 1020 1021 1022 1023 1024 1025 1026 1027 1028
	test_must_fail git -c name=value config core.name
'

test_expect_success 'key sanity-checking' '
	test_must_fail git config foo=bar &&
	test_must_fail git config foo=.bar &&
	test_must_fail git config foo.ba=r &&
	test_must_fail git config foo.1bar &&
	test_must_fail git config foo."ba
				z".bar &&
1029 1030 1031 1032
	test_must_fail git config . false &&
	test_must_fail git config .foo false &&
	test_must_fail git config foo. false &&
	test_must_fail git config .foo. false &&
1033 1034
	git config foo.bar true &&
	git config foo."ba =z".bar false
1035 1036
'

1037
test_expect_success 'git -c works with aliases of builtins' '
1038 1039 1040 1041 1042 1043
	git config alias.checkconfig "-c foo.check=bar config foo.check" &&
	echo bar >expect &&
	git checkconfig >actual &&
	test_cmp expect actual
'

1044 1045 1046 1047 1048 1049
test_expect_success 'git -c does not split values on equals' '
	echo "value with = in it" >expect &&
	git -c core.foo="value with = in it" config core.foo >actual &&
	test_cmp expect actual
'

1050 1051 1052 1053 1054 1055 1056 1057
test_expect_success 'git -c dies on bogus config' '
	test_must_fail git -c core.bare=foo rev-parse
'

test_expect_success 'git -c complains about empty key' '
	test_must_fail git -c "=foo" rev-parse
'

1058 1059 1060 1061
test_expect_success 'git -c complains about empty key and value' '
	test_must_fail git -c "" rev-parse
'

1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078
test_expect_success 'git config --edit works' '
	git config -f tmp test.value no &&
	echo test.value=yes >expect &&
	GIT_EDITOR="echo [test]value=yes >" git config -f tmp --edit &&
	git config -f tmp --list >actual &&
	test_cmp expect actual
'

test_expect_success 'git config --edit respects core.editor' '
	git config -f tmp test.value no &&
	echo test.value=yes >expect &&
	test_config core.editor "echo [test]value=yes >" &&
	git config -f tmp --edit &&
	git config -f tmp --list >actual &&
	test_cmp expect actual
'

1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109
# malformed configuration files
test_expect_success 'barf on syntax error' '
	cat >.git/config <<-\EOF &&
	# broken section line
	[section]
	key garbage
	EOF
	test_must_fail git config --get section.key >actual 2>error &&
	grep " line 3 " error
'

test_expect_success 'barf on incomplete section header' '
	cat >.git/config <<-\EOF &&
	# broken section line
	[section
	key = value
	EOF
	test_must_fail git config --get section.key >actual 2>error &&
	grep " line 2 " error
'

test_expect_success 'barf on incomplete string' '
	cat >.git/config <<-\EOF &&
	# broken section line
	[section]
	key = "value string
	EOF
	test_must_fail git config --get section.key >actual 2>error &&
	grep " line 3 " error
'

1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134
test_expect_success 'urlmatch' '
	cat >.git/config <<-\EOF &&
	[http]
		sslVerify
	[http "https://weak.example.com"]
		sslVerify = false
		cookieFile = /tmp/cookie.txt
	EOF

	echo true >expect &&
	git config --bool --get-urlmatch http.SSLverify https://good.example.com >actual &&
	test_cmp expect actual &&

	echo false >expect &&
	git config --bool --get-urlmatch http.sslverify https://weak.example.com >actual &&
	test_cmp expect actual &&

	{
		echo http.cookiefile /tmp/cookie.txt &&
		echo http.sslverify false
	} >expect &&
	git config --get-urlmatch HTTP https://weak.example.com >actual &&
	test_cmp expect actual
'

1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169
# good section hygiene
test_expect_failure 'unsetting the last key in a section removes header' '
	cat >.git/config <<-\EOF &&
	# some generic comment on the configuration file itself
	# a comment specific to this "section" section.
	[section]
	# some intervening lines
	# that should also be dropped

	key = value
	# please be careful when you update the above variable
	EOF

	cat >expect <<-\EOF &&
	# some generic comment on the configuration file itself
	EOF

	git config --unset section.key &&
	test_cmp expect .git/config
'

test_expect_failure 'adding a key into an empty section reuses header' '
	cat >.git/config <<-\EOF &&
	[section]
	EOF

	q_to_tab >expect <<-\EOF &&
	[section]
	Qkey = value
	EOF

	git config section.key value
	test_cmp expect .git/config
'

1170
test_done