git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 1/7] t1300: test "set all" mode with value_regex

From
Junio C Hamano <gitster@pobox.com>
Date
Nov 22, 2020, 03:31 UTC
Message-ID
<xmqqlfeuqd8d.fsf@gitster.c.googlers.com>
In-Reply-To
<20201121222734.GG389879@camp.crustytoothpaste.net>
"brian m. carlson" <sandals@crustytoothpaste.net> writes:
Show 8 quoted lines
>> So that got a bit off-track, but I think:
>> 
>>   - t1300 already is very much like this, so it's not a new thing
>> 
>>   - but I would be happy not to see it go further in that direction,
>>     even if it means inconsistency with the rest of the script
>
> I agree we shouldn't make things worse.

I started looking at early parts of t1300 and here is how far I managed to get before I can no longer keep staring the existing tests without vomitting.

I am reasonably happy with the "let's keep the vanilla untouched one in .git/config-initial, refrain from using [core] and other sections that MUST be in the initial configuration for testing, and use a wrapper that reads expected addition to the initial one from the standard input for validation" approach I came up with, but I am not happy with the name 'compare_expect'; 'validate_config_result' might be a better name.

In any case, the reason I am sending this out early is if people find this approach to clean things up a sensible one. If we can find concensus, perhaps I (or somebody else---hint, hint) can find time to do the #leftoverbits following the approach after the ds/config-literal-value and ds/maintenance-part-3 topics graduate to 'master'.

 t/t1300-config.sh | 139 ++++++++++++++++++++++++++++--------------------------
 1 file changed, 71 insertions(+), 68 deletions(-)
diff --git c/t/t1300-config.sh w/t/t1300-config.sh
index df13afaffd..c33520d7fa 100755
--- c/t/t1300-config.sh
+++ w/t/t1300-config.sh
@@ -7,80 +7,84 @@ test_description='Test git config in different settings'
 
 . ./test-lib.sh
 
-test_expect_success 'clear default config' '
-	rm -f .git/config
+test_expect_success 'save away default config' '
+	cp .git/config .git/config-initial
 '
 
-cat > expect << EOF
-[core]
-	penguin = little blue
-EOF
-test_expect_success 'initial' '
-	git config core.penguin "little blue" &&
+compare_expect () {
+	{
+		cat .git/config-initial &&
+		sed -e 's/^[|]//'
+	} >expect &&
 	test_cmp expect .git/config
+}
+
+test_expect_success 'initial' '
+	git config configtest.penguin "little blue" &&
+	compare_expect <<-\EOF
+	[configtest]
+	|	penguin = little blue
+	EOF
 '
 
-cat > expect << EOF
-[core]
-	penguin = little blue
-	Movie = BadPhysics
-EOF
 test_expect_success 'mixed case' '
-	git config Core.Movie BadPhysics &&
-	test_cmp expect .git/config
+	git config ConfigTest.Movie BadPhysics &&
+	compare_expect <<-\EOF
+	[configtest]
+	|	penguin = little blue
+	|	Movie = BadPhysics
+	EOF
 '
 
-cat > expect << EOF
-[core]
-	penguin = little blue
-	Movie = BadPhysics
-[Cores]
-	WhatEver = Second
-EOF
 test_expect_success 'similar section' '
-	git config Cores.WhatEver Second &&
-	test_cmp expect .git/config
+	git config ConfigTests.WhatEver Second &&
+	compare_expect <<-\EOF
+	[configtest]
+	|	penguin = little blue
+	|	Movie = BadPhysics
+	[ConfigTests]
+	|	WhatEver = Second
+	EOF
 '
 
-cat > expect << EOF
-[core]
-	penguin = little blue
-	Movie = BadPhysics
-	UPPERCASE = true
-[Cores]
-	WhatEver = Second
-EOF
 test_expect_success 'uppercase section' '
-	git config CORE.UPPERCASE true &&
-	test_cmp expect .git/config
+	git config CONFIGTEST.UPPERCASE true &&
+	compare_expect <<-\EOF
+	[configtest]
+	|	penguin = little blue
+	|	Movie = BadPhysics
+	|	UPPERCASE = true
+	[ConfigTests]
+	|	WhatEver = Second
+	EOF
 '
 
 test_expect_success 'replace with non-match' '
-	git config core.penguin kingpin !blue
+	git config configtest.penguin kingpin !blue
 '
 
 test_expect_success 'replace with non-match (actually matching)' '
-	git config core.penguin "very blue" !kingpin
+	git config configtest.penguin "very blue" !kingpin
 '
 
-cat > expect << EOF
-[core]
-	penguin = very blue
-	Movie = BadPhysics
-	UPPERCASE = true
-	penguin = kingpin
-[Cores]
-	WhatEver = Second
-EOF
-
-test_expect_success 'non-match result' 'test_cmp expect .git/config'
+test_expect_success 'non-match result' '
+	compare_expect <<-\EOF
+	[configtest]
+	|	penguin = very blue
+	|	Movie = BadPhysics
+	|	UPPERCASE = true
+	|	penguin = kingpin
+	[ConfigTests]
+	|	WhatEver = Second
+	EOF
+'
 
 test_expect_success 'find mixed-case key by canonical name' '
-	test_cmp_config Second cores.whatever
+	test_cmp_config Second configtests.whatever
 '
 
 test_expect_success 'find mixed-case key by non-canonical name' '
-	test_cmp_config Second CoReS.WhAtEvEr
+	test_cmp_config Second CoNfIgTeSts.WhAtEvEr
 '
 
 test_expect_success 'subsections are not canonicalized by git-config' '
@@ -94,28 +98,27 @@ test_expect_success 'subsections are not canonicalized by git-config' '
 	test_cmp_config two section.SubSection.key
 '
 
-cat > .git/config <<\EOF
-[alpha]
-bar = foo
-[beta]
-baz = multiple \
-lines
-foo = bar
-EOF
-
 test_expect_success 'unset with cont. lines' '
-	git config --unset beta.baz
+	{
+		cat .git/config-initial &&
+		cat <<-\EOF
+		[alpha]
+		bar = foo
+		[beta]
+		baz = multiple \
+		lines
+		foo = bar
+		EOF
+	} >.git/config &&
+	git config --unset beta.baz &&
+	compare_expect <<-\EOF
+	[alpha]
+	bar = foo
+	[beta]
+	foo = bar
+	EOF
 '
 
-cat > expect <<\EOF
-[alpha]
-bar = foo
-[beta]
-foo = bar
-EOF
-
-test_expect_success 'unset with cont. lines is correct' 'test_cmp expect .git/config'
-
 cat > .git/config << EOF
 [beta] ; silly comment # another comment
 noIndent= sillyValue ; 'nother silly comment
Previous: brian m. carlsonNext: Jeff King
Message 9 of 72 in “config: add --literal-value option”
  1. 0/7 config: add --literal-value optionDerrick Stolee via GitGitGadget, Nov 19, 2020
  2. 1/7 t1300: test "set all" mode with value_regexDerrick Stolee via GitGitGadget, Nov 19, 2020
  3. Junio C HamanoNov 19, 2020
  4. brian m. carlsonNov 20, 2020
  5. Junio C HamanoNov 20, 2020
  6. Jeff KingNov 20, 2020
  7. Junio C HamanoNov 20, 2020
  8. brian m. carlsonNov 21, 2020
  9. Junio C HamanoNov 22, 2020
  10. Jeff KingNov 24, 2020
  11. Junio C HamanoNov 24, 2020
  12. 2/7 t1300: add test for --replace-all with value_regexDerrick Stolee via GitGitGadget, Nov 19, 2020
  13. 5/7 config: plumb --literal-value into config APIDerrick Stolee via GitGitGadget, Nov 19, 2020
  14. Junio C HamanoNov 19, 2020
  15. 4/7 config: add --literal-value option, un-implementedDerrick Stolee via GitGitGadget, Nov 19, 2020
  16. Junio C HamanoNov 19, 2020
  17. Martin ÅgrenNov 20, 2020
  18. 3/7 config: convert multi_replace to flagsDerrick Stolee via GitGitGadget, Nov 19, 2020
  19. Junio C HamanoNov 19, 2020
  20. 7/7 maintenance: use 'git config --literal-value'Derrick Stolee via GitGitGadget, Nov 19, 2020
  21. Junio C HamanoNov 19, 2020
  22. 6/7 config: implement --literal-value with --get*Derrick Stolee via GitGitGadget, Nov 19, 2020
  23. Ævar Arnfjörð BjarmasonNov 20, 2020
  24. Derrick StoleeNov 20, 2020
  25. Junio C HamanoNov 20, 2020
  26. Derrick StoleeNov 20, 2020
  27. Junio C HamanoNov 20, 2020
  28. Ævar Arnfjörð BjarmasonNov 24, 2020
  29. 0/7 config: add --fixed-value optionDerrick Stolee via GitGitGadget, Nov 23, 2020
  30. 1/7 t1300: test "set all" mode with value_regexDerrick Stolee via GitGitGadget, Nov 23, 2020
  31. Emily ShafferNov 23, 2020
  32. 2/7 t1300: add test for --replace-all with value_regexDerrick Stolee via GitGitGadget, Nov 23, 2020
  33. Emily ShafferNov 23, 2020
  34. 4/7 config: add --fixed-value option, un-implementedDerrick Stolee via GitGitGadget, Nov 23, 2020
  35. Junio C HamanoNov 23, 2020
  36. Emily ShafferNov 23, 2020
  37. Junio C HamanoNov 23, 2020
  38. Derrick StoleeNov 25, 2020
  39. Derrick StoleeNov 25, 2020
  40. Eric SunshineNov 25, 2020
  41. Junio C HamanoNov 25, 2020
  42. Junio C HamanoNov 25, 2020
  43. 3/7 config: convert multi_replace to flagsDerrick Stolee via GitGitGadget, Nov 23, 2020
  44. Emily ShafferNov 23, 2020
  45. 5/7 config: plumb --fixed-value into config APIDerrick Stolee via GitGitGadget, Nov 23, 2020
  46. Emily ShafferNov 23, 2020
  47. Eric SunshineNov 24, 2020
  48. Derrick StoleeNov 25, 2020
  49. Eric SunshineNov 25, 2020
  50. 6/7 config: implement --fixed-value with --get*Derrick Stolee via GitGitGadget, Nov 23, 2020
  51. Junio C HamanoNov 23, 2020
  52. Emily ShafferNov 23, 2020
  53. 7/7 maintenance: use 'git config --fixed-value'Derrick Stolee via GitGitGadget, Nov 23, 2020
  54. Junio C HamanoNov 23, 2020
  55. Emily ShafferNov 23, 2020
  56. Junio C HamanoNov 23, 2020
  57. Junio C HamanoNov 23, 2020
  58. 0/8 config: add --fixed-value optionDerrick Stolee via GitGitGadget, Nov 25, 2020
  59. 3/8 t1300: test "set all" mode with value-patternDerrick Stolee via GitGitGadget, Nov 25, 2020
  60. 4/8 t1300: add test for --replace-all with value-patternDerrick Stolee via GitGitGadget, Nov 25, 2020
  61. 6/8 config: plumb --fixed-value into config APIDerrick Stolee via GitGitGadget, Nov 25, 2020
  62. 8/8 maintenance: use 'git config --fixed-value'Derrick Stolee via GitGitGadget, Nov 25, 2020
  63. Junio C HamanoNov 25, 2020
  64. 5/8 config: add --fixed-value option, un-implementedDerrick Stolee via GitGitGadget, Nov 25, 2020
  65. Eric SunshineNov 25, 2020
  66. 2/8 config: replace 'value_regex' with 'value_pattern'Derrick Stolee via GitGitGadget, Nov 25, 2020
  67. Eric SunshineNov 25, 2020
  68. 1/8 config: convert multi_replace to flagsDerrick Stolee via GitGitGadget, Nov 25, 2020
  69. 7/8 config: implement --fixed-value with --get*Derrick Stolee via GitGitGadget, Nov 25, 2020
  70. Junio C HamanoNov 25, 2020
  71. Derrick StoleeNov 26, 2020
  72. Junio C HamanoDec 1, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.