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

[PATCH 5/6] t1500: avoid setting environment variables outside of tests

From
Eric Sunshine <sunshine@sunshineco.com>
Date
May 10, 2016, 05:20 UTC
Message-ID
<20160510052055.32924-6-sunshine@sunshineco.com>
In-Reply-To
<20160510052055.32924-1-sunshine@sunshineco.com>

Ideally, each test should be responsible for setting up state it needs rather than relying upon transient global state. Toward this end, teach test_rev_parse() to accept a "-g <dir>" option to allow callers to specify the value of the GIT_DIR environment variable explicitly, and take advantage of this new option to avoid polluting the global scope with GIT_DIR assignments.

Regarding the implementation: Typically, tests avoid polluting the global state by wrapping transient environment variable assignments within a subshell, however, this technique can not be used here since test_config() and test_unconfig() need to know GIT_DIR, as well, but neither function can be used within a subshell. Consequently, GIT_DIR is cleared manually via sane_unset().

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
---
 t/t1500-rev-parse.sh | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)
diff --git a/t/t1500-rev-parse.sh b/t/t1500-rev-parse.sh
index c058aa4..525e6d3 100755
--- a/t/t1500-rev-parse.sh
+++ b/t/t1500-rev-parse.sh
@@ -7,11 +7,13 @@ test_description='test git rev-parse'
 test_rev_parse () {
 	dir=
 	bare=
+	env=
 	while :
 	do
 		case "$1" in
 		-C) dir="-C $2"; shift; shift ;;
 		-b) bare="$2"; shift; shift ;;
+		-g) env="GIT_DIR=$2; export GIT_DIR"; shift; shift ;;
 		-*) error "test_rev_parse: unrecognized option '$1'" ;;
 		*) break ;;
 		esac
@@ -36,6 +38,8 @@ test_rev_parse () {
 	do
 		expect="$1"
 		test_expect_success "$name: $o" '
+			test_when_finished "sane_unset GIT_DIR" &&
+			eval $env &&
 			$bare &&
 			echo "$expect" >expect &&
 			git $dir rev-parse --$o >actual &&
@@ -61,22 +65,19 @@ test_rev_parse -b t 'core.bare = true' true false false
 test_rev_parse -b u 'core.bare undefined' false false true
 
 test_expect_success 'setup non-local database ../.git' 'mkdir work'
-GIT_DIR=../.git
-export GIT_DIR
 
-test_rev_parse -C work -b f 'GIT_DIR=../.git, core.bare = false' false false true ''
+test_rev_parse -C work -g ../.git -b f 'GIT_DIR=../.git, core.bare = false' false false true ''
 
-test_rev_parse -C work -b t 'GIT_DIR=../.git, core.bare = true' true false false ''
+test_rev_parse -C work -g ../.git -b t 'GIT_DIR=../.git, core.bare = true' true false false ''
 
-test_rev_parse -C work -b u 'GIT_DIR=../.git, core.bare undefined' false false true ''
+test_rev_parse -C work -g ../.git -b u 'GIT_DIR=../.git, core.bare undefined' false false true ''
 
 test_expect_success 'setup non-local database ../repo.git' 'mv .git repo.git'
-GIT_DIR=../repo.git
 
-test_rev_parse -C work -b f 'GIT_DIR=../repo.git, core.bare = false' false false true ''
+test_rev_parse -C work -g ../repo.git -b f 'GIT_DIR=../repo.git, core.bare = false' false false true ''
 
-test_rev_parse -C work -b t 'GIT_DIR=../repo.git, core.bare = true' true false false ''
+test_rev_parse -C work -g ../repo.git -b t 'GIT_DIR=../repo.git, core.bare = true' true false false ''
 
-test_rev_parse -C work -b u 'GIT_DIR=../repo.git, core.bare undefined' false false true ''
+test_rev_parse -C work -g ../repo.git -b u 'GIT_DIR=../repo.git, core.bare undefined' false false true ''
 
 test_done
-- 
2.8.2.530.g51d527d
Previous: Junio C HamanoNext: Jeff King
Message 8 of 24 in “modernize t1500”
  1. 0/6 modernize t1500Eric Sunshine, May 10, 2016
  2. 1/6 t1500: test_rev_parse: facilitate future test enhancementsEric Sunshine, May 10, 2016
  3. 2/6 t1500: reduce dependence upon global stateEric Sunshine, May 10, 2016
  4. 3/6 t1500: avoid changing working directory outside of testsEric Sunshine, May 10, 2016
  5. 4/6 t1500: avoid setting configuration options outside of testsEric Sunshine, May 10, 2016
  6. Eric SunshineMay 10, 2016
  7. Junio C HamanoMay 10, 2016
  8. 5/6 t1500: avoid setting environment variables outside of testsEric Sunshine, May 10, 2016
  9. Jeff KingMay 10, 2016
  10. Eric SunshineMay 10, 2016
  11. Junio C HamanoMay 10, 2016
  12. Eric SunshineMay 10, 2016
  13. Eric SunshineMay 10, 2016
  14. Jeff KingMay 10, 2016
  15. Junio C HamanoMay 10, 2016
  16. SZEDER GáborMay 10, 2016
  17. Junio C HamanoMay 10, 2016
  18. Eric SunshineMay 10, 2016
  19. 6/6 t1500: be considerate to future potential testsEric Sunshine, May 10, 2016
  20. Junio C HamanoMay 10, 2016
  21. Junio C HamanoMay 10, 2016
  22. Junio C HamanoMay 10, 2016
  23. Eric SunshineMay 16, 2016
  24. Junio C HamanoMay 16, 2016

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.