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

[PATCH v3 4/6] tests: only automatically unset matching values from test_config

From
Jacob Keller <jacob.keller@gmail.com>
Date
Jun 17, 2022, 00:20 UTC
Message-ID
<20220617002036.1577-5-jacob.keller@gmail.com>
In-Reply-To
<20220617002036.1577-1-jacob.keller@gmail.com>
From: Jacob Keller <jacob.e.keller@intel.com>

The test_config function is used to set a configuration value and then ensure that its unset at the end of the test using test_unconfig. This currently unsets all configurations with the specified name regardless of whether they match a value.

The git config command can optionally only unset keys which have specific values. Add support for this by using the 2 argument form, and add handling for the --fixed-value option.

Pass --fixed-value and both the key and value to the test_unconfig call from test_config. This ensures that test_config will only setup a trigger to remove the matching values instead of removing all configurations of the specified key.

Directly using test_unconfig will still unset all values by default, unless a 2nd value-pattern parameter is provided. This matches the behavior of git config and allows some control over the behavior.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
---
 t/test-lib-functions.sh | 36 +++++++++++++++++++++++++++++++++---
 1 file changed, 33 insertions(+), 3 deletions(-)
diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh
index e518b89bf128..9957eb2e6c30 100644
--- a/t/test-lib-functions.sh
+++ b/t/test-lib-functions.sh
@@ -506,15 +506,18 @@ test_modebits () {
 			  -e 's|^\(......\)S|\1-|' -e 's|^\(......\)s|\1x|'
 }
 
-# Usage: test_unconfig [options] <name>
+# Usage: test_unconfig [options] <name> <value-pattern>
 #   -C <dir>:
 #	Run all git commits in directory <dir>
 #   --global:
 #	Modify the global configuration instead of repository.
+#   --fixed-value:
+#	Match the value pattern as a fixed string instead of a regex.
 #
 # Unset a configuration variable, but don't fail if it doesn't exist.
 test_unconfig () {
 	global=
+	fixed=
 	config_dir=
 	while test $# != 0
 	do
@@ -526,6 +529,9 @@ test_unconfig () {
 		--global)
 			global=--global
 			;;
+		--fixed-value)
+			fixed=--fixed-value
+			;;
 		-*)
 			BUG "invalid test_unconfig option: $1"
 			;;
@@ -535,7 +541,20 @@ test_unconfig () {
 		esac
 		shift
 	done
-	git ${config_dir:+-C "$config_dir"} config $global --unset-all "$1"
+
+	case "$#" in
+	1)
+		# Only enable --fixed-value if we have two parameters
+		fixed=
+		;;
+	2)
+		;;
+	*)
+		BUG "test_unconfig requires 1 or 2 positional arguments"
+		;;
+	esac
+
+	git ${config_dir:+-C "$config_dir"} config $global $fixed --unset-all "$1" "$2"
 	config_status=$?
 	case "$config_status" in
 	5) # ok, nothing to unset
@@ -575,7 +594,18 @@ test_config () {
 		esac
 		shift
 	done
-	test_when_finished "test_unconfig ${config_dir:+-C '$config_dir'} $global '$1'" &&
+
+	case "$#" in
+	1)
+		;;
+	2)
+		;;
+	*)
+		BUG "test_config requires 1 or 2 positional arguments"
+		;;
+	esac
+
+	test_when_finished "test_unconfig ${config_dir:+-C '$config_dir'} --fixed-value $global '$1' '$2'" &&
 	git ${config_dir:+-C "$config_dir"} config $global "$1" "$2"
 }
 
-- 
2.36.1
Previous: Jacob KellerNext: Jacob Keller
Message 5 of 7 in “remote: handle negative refspecs with show”
  1. 0/6 remote: handle negative refspecs with showJacob Keller, Jun 17, 2022
  2. 1/6 remote: handle negative refspecs in git remote showJacob Keller, Jun 17, 2022
  3. 3/6 tests: handle --global directly in test_config/test_unconfigJacob Keller, Jun 17, 2022
  4. 2/6 t5505: remove sub shell use in favor of git -CJacob Keller, Jun 17, 2022
  5. 4/6 tests: only automatically unset matching values from test_configJacob Keller, Jun 17, 2022
  6. 6/6 remote: add test for negative refspec with pruneJacob Keller, Jun 17, 2022
  7. 5/6 t5505: use test_config where appropriateJacob Keller, Jun 17, 2022

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.