tests: replace test_tristate with "git env--helper"
The test_tristate helper introduced in 83d842dc8c ("tests: turn on
network daemon tests by default", 2014-02-10) can now be better
implemented with "git env--helper" to give the variables in question
the standard boolean behavior.
The reason for the "tristate" was to have all of false/true/auto,
where "auto" meant either "false" or "true" depending on what the
fallback was. With the --default option to "git env--helper" we can
simply have e.g. GIT_TEST_HTTPD where we know if it's true because the
user asked explicitly ("true"), or true implicitly ("auto").
This breaks backwards compatibility for explicitly setting "auto" for
these variables, but I don't think anyone cares. That was always
intended to be internal.
This means the test_normalize_bool() code in test-lib-functions.sh
goes away in addition to test_tristate(). We still need the
test_skip_or_die() helper, but now it takes the variable name instead
of the value, and uses "git env--bool" to distinguish a default "true"
from an explicit "true" (in those "explicit true" cases we want to
fail the test in question).
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
			
			
				maint
			
			
		
							parent
							
								
									423b05e102
								
							
						
					
					
						commit
						3b072c577b
					
				|  | @ -15,8 +15,7 @@ | |||
| # | ||||
| #	test_done | ||||
|  | ||||
| test_tristate GIT_TEST_GIT_DAEMON | ||||
| if test "$GIT_TEST_GIT_DAEMON" = false | ||||
| if ! git env--helper --type=bool --default=true --exit-code GIT_TEST_GIT_DAEMON | ||||
| then | ||||
| 	skip_all="git-daemon testing disabled (unset GIT_TEST_GIT_DAEMON to enable)" | ||||
| 	test_done | ||||
|  | @ -24,7 +23,7 @@ fi | |||
|  | ||||
| if test_have_prereq !PIPE | ||||
| then | ||||
| 	test_skip_or_die $GIT_TEST_GIT_DAEMON "file system does not support FIFOs" | ||||
| 	test_skip_or_die GIT_TEST_GIT_DAEMON "file system does not support FIFOs" | ||||
| fi | ||||
|  | ||||
| test_set_port LIB_GIT_DAEMON_PORT | ||||
|  | @ -73,7 +72,7 @@ start_git_daemon() { | |||
| 		kill "$GIT_DAEMON_PID" | ||||
| 		wait "$GIT_DAEMON_PID" | ||||
| 		unset GIT_DAEMON_PID | ||||
| 		test_skip_or_die $GIT_TEST_GIT_DAEMON \ | ||||
| 		test_skip_or_die GIT_TEST_GIT_DAEMON \ | ||||
| 			"git daemon failed to start" | ||||
| 	fi | ||||
| } | ||||
|  |  | |||
|  | @ -69,14 +69,12 @@ svn_cmd () { | |||
| maybe_start_httpd () { | ||||
| 	loc=${1-svn} | ||||
|  | ||||
| 	test_tristate GIT_SVN_TEST_HTTPD | ||||
| 	case $GIT_SVN_TEST_HTTPD in | ||||
| 	true) | ||||
| 	if git env--helper --type=bool --default=false --exit-code GIT_TEST_HTTPD | ||||
| 	then | ||||
| 		. "$TEST_DIRECTORY"/lib-httpd.sh | ||||
| 		LIB_HTTPD_SVN="$loc" | ||||
| 		start_httpd | ||||
| 		;; | ||||
| 	esac | ||||
| 	fi | ||||
| } | ||||
|  | ||||
| convert_to_rev_db () { | ||||
|  | @ -106,8 +104,7 @@ EOF | |||
| } | ||||
|  | ||||
| require_svnserve () { | ||||
| 	test_tristate GIT_TEST_SVNSERVE | ||||
| 	if ! test "$GIT_TEST_SVNSERVE" = true | ||||
| 	if ! git env--helper --type=bool --default=false --exit-code GIT_TEST_SVNSERVE | ||||
| 	then | ||||
| 		skip_all='skipping svnserve test. (set $GIT_TEST_SVNSERVE to enable)' | ||||
| 		test_done | ||||
|  |  | |||
|  | @ -41,15 +41,14 @@ then | |||
| 	test_done | ||||
| fi | ||||
|  | ||||
| test_tristate GIT_TEST_HTTPD | ||||
| if test "$GIT_TEST_HTTPD" = false | ||||
| if ! git env--helper --type=bool --default=true --exit-code GIT_TEST_HTTPD | ||||
| then | ||||
| 	skip_all="Network testing disabled (unset GIT_TEST_HTTPD to enable)" | ||||
| 	test_done | ||||
| fi | ||||
|  | ||||
| if ! test_have_prereq NOT_ROOT; then | ||||
| 	test_skip_or_die $GIT_TEST_HTTPD \ | ||||
| 	test_skip_or_die GIT_TEST_HTTPD \ | ||||
| 		"Cannot run httpd tests as root" | ||||
| fi | ||||
|  | ||||
|  | @ -95,7 +94,7 @@ GIT_TRACE=$GIT_TRACE; export GIT_TRACE | |||
|  | ||||
| if ! test -x "$LIB_HTTPD_PATH" | ||||
| then | ||||
| 	test_skip_or_die $GIT_TEST_HTTPD "no web server found at '$LIB_HTTPD_PATH'" | ||||
| 	test_skip_or_die GIT_TEST_HTTPD "no web server found at '$LIB_HTTPD_PATH'" | ||||
| fi | ||||
|  | ||||
| HTTPD_VERSION=$($LIB_HTTPD_PATH -v | \ | ||||
|  | @ -107,19 +106,19 @@ then | |||
| 	then | ||||
| 		if ! test $HTTPD_VERSION -ge 2 | ||||
| 		then | ||||
| 			test_skip_or_die $GIT_TEST_HTTPD \ | ||||
| 			test_skip_or_die GIT_TEST_HTTPD \ | ||||
| 				"at least Apache version 2 is required" | ||||
| 		fi | ||||
| 		if ! test -d "$DEFAULT_HTTPD_MODULE_PATH" | ||||
| 		then | ||||
| 			test_skip_or_die $GIT_TEST_HTTPD \ | ||||
| 			test_skip_or_die GIT_TEST_HTTPD \ | ||||
| 				"Apache module directory not found" | ||||
| 		fi | ||||
|  | ||||
| 		LIB_HTTPD_MODULE_PATH="$DEFAULT_HTTPD_MODULE_PATH" | ||||
| 	fi | ||||
| else | ||||
| 	test_skip_or_die $GIT_TEST_HTTPD \ | ||||
| 	test_skip_or_die GIT_TEST_HTTPD \ | ||||
| 		"Could not identify web server at '$LIB_HTTPD_PATH'" | ||||
| fi | ||||
|  | ||||
|  | @ -184,7 +183,7 @@ start_httpd() { | |||
| 	if test $? -ne 0 | ||||
| 	then | ||||
| 		cat "$HTTPD_ROOT_PATH"/error.log >&4 2>/dev/null | ||||
| 		test_skip_or_die $GIT_TEST_HTTPD "web server setup failed" | ||||
| 		test_skip_or_die GIT_TEST_HTTPD "web server setup failed" | ||||
| 	fi | ||||
| } | ||||
|  | ||||
|  |  | |||
|  | @ -267,8 +267,7 @@ test_expect_success 'ls-remote --symref omits filtered-out matches' ' | |||
| ' | ||||
|  | ||||
| test_lazy_prereq GIT_DAEMON ' | ||||
| 	test_tristate GIT_TEST_GIT_DAEMON && | ||||
| 	test "$GIT_TEST_GIT_DAEMON" != false | ||||
| 	git env--helper --type=bool --default=true --exit-code GIT_TEST_GIT_DAEMON | ||||
| ' | ||||
|  | ||||
| # This test spawns a daemon, so run it only if the user would be OK with | ||||
|  |  | |||
|  | @ -1035,62 +1035,20 @@ perl () { | |||
| 	command "$PERL_PATH" "$@" 2>&7 | ||||
| } 7>&2 2>&4 | ||||
|  | ||||
| # Is the value one of the various ways to spell a boolean true/false? | ||||
| test_normalize_bool () { | ||||
| 	git -c magic.variable="$1" config --bool magic.variable 2>/dev/null | ||||
| } | ||||
|  | ||||
| # Given a variable $1, normalize the value of it to one of "true", | ||||
| # "false", or "auto" and store the result to it. | ||||
| # | ||||
| #     test_tristate GIT_TEST_HTTPD | ||||
| # | ||||
| # A variable set to an empty string is set to 'false'. | ||||
| # A variable set to 'false' or 'auto' keeps its value. | ||||
| # Anything else is set to 'true'. | ||||
| # An unset variable defaults to 'auto'. | ||||
| # | ||||
| # The last rule is to allow people to set the variable to an empty | ||||
| # string and export it to decline testing the particular feature | ||||
| # for versions both before and after this change.  We used to treat | ||||
| # both unset and empty variable as a signal for "do not test" and | ||||
| # took any non-empty string as "please test". | ||||
|  | ||||
| test_tristate () { | ||||
| 	if eval "test x\"\${$1+isset}\" = xisset" | ||||
| 	then | ||||
| 		# explicitly set | ||||
| 		eval " | ||||
| 			case \"\$$1\" in | ||||
| 			'')	$1=false ;; | ||||
| 			auto)	;; | ||||
| 			*)	$1=\$(test_normalize_bool \$$1 || echo true) ;; | ||||
| 			esac | ||||
| 		" | ||||
| 	else | ||||
| 		eval "$1=auto" | ||||
| 	fi | ||||
| } | ||||
|  | ||||
| # Exit the test suite, either by skipping all remaining tests or by | ||||
| # exiting with an error. If "$1" is "auto", we then we assume we were | ||||
| # opportunistically trying to set up some tests and we skip. If it is | ||||
| # "true", then we report a failure. | ||||
| # exiting with an error. If our prerequisite variable $1 falls back | ||||
| # on a default assume we were opportunistically trying to set up some | ||||
| # tests and we skip. If it is explicitly "true", then we report a failure. | ||||
| # | ||||
| # The error/skip message should be given by $2. | ||||
| # | ||||
| test_skip_or_die () { | ||||
| 	case "$1" in | ||||
| 	auto) | ||||
| 	if ! git env--helper --mode-bool --variable=$1 --default=0 --exit-code --quiet | ||||
| 	then | ||||
| 		skip_all=$2 | ||||
| 		test_done | ||||
| 		;; | ||||
| 	true) | ||||
| 		error "$2" | ||||
| 		;; | ||||
| 	*) | ||||
| 		error "BUG: test tristate is '$1' (real error: $2)" | ||||
| 	esac | ||||
| 	fi | ||||
| 	error "$2" | ||||
| } | ||||
|  | ||||
| # The following mingw_* functions obey POSIX shell syntax, but are actually | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Ævar Arnfjörð Bjarmason
						Ævar Arnfjörð Bjarmason