Merge branch 'sg/test-bool-env'

Recently we have declared that GIT_TEST_* variables take the
usual boolean values (it used to be that some used "non-empty
means true" and taking GIT_TEST_VAR=YesPlease as true); make
sure we notice and fail when non-bool strings are given to
these variables.

* sg/test-bool-env:
  t5608-clone-2gb.sh: turn GIT_TEST_CLONE_2GB into a bool
  tests: add 'test_bool_env' to catch non-bool GIT_TEST_* values
This commit is contained in:
Junio C Hamano 2019-12-05 12:52:48 -08:00
Родитель fd952307ec a85efb5985
Коммит e0f9ec9027
10 изменённых файлов: 84 добавлений и 13 удалений

Просмотреть файл

@ -156,7 +156,7 @@ fi
export DEVELOPER=1
export DEFAULT_TEST_TARGET=prove
export GIT_TEST_CLONE_2GB=YesPlease
export GIT_TEST_CLONE_2GB=true
case "$jobname" in
linux-clang|linux-gcc)

Просмотреть файл

@ -982,6 +982,15 @@ library for your script to use.
output to the downstream---unlike the real version, it generates
only up to 99 lines.
- test_bool_env <env-variable-name> <default-value>
Given the name of an environment variable with a bool value,
normalize its value to a 0 (true) or 1 (false or empty string)
return code. Return with code corresponding to the given default
value if the variable is unset.
Abort the test script if either the value of the variable or the
default are not valid bool values.
Prerequisites
-------------

Просмотреть файл

@ -15,7 +15,7 @@
#
# test_done
if ! git env--helper --type=bool --default=true --exit-code GIT_TEST_GIT_DAEMON
if ! test_bool_env GIT_TEST_GIT_DAEMON true
then
skip_all="git-daemon testing disabled (unset GIT_TEST_GIT_DAEMON to enable)"
test_done

Просмотреть файл

@ -69,7 +69,7 @@ svn_cmd () {
maybe_start_httpd () {
loc=${1-svn}
if git env--helper --type=bool --default=false --exit-code GIT_TEST_SVN_HTTPD
if test_bool_env GIT_TEST_SVN_HTTPD false
then
. "$TEST_DIRECTORY"/lib-httpd.sh
LIB_HTTPD_SVN="$loc"
@ -104,7 +104,7 @@ EOF
}
require_svnserve () {
if ! git env--helper --type=bool --default=false --exit-code GIT_TEST_SVNSERVE
if ! test_bool_env GIT_TEST_SVNSERVE false
then
skip_all='skipping svnserve test. (set $GIT_TEST_SVNSERVE to enable)'
test_done

Просмотреть файл

@ -41,7 +41,7 @@ then
test_done
fi
if ! git env--helper --type=bool --default=true --exit-code GIT_TEST_HTTPD
if ! test_bool_env GIT_TEST_HTTPD true
then
skip_all="Network testing disabled (unset GIT_TEST_HTTPD to enable)"
test_done

Просмотреть файл

@ -917,6 +917,40 @@ test_expect_success 'test_oid can look up data for SHA-256' '
test "$hexsz" -eq 64
'
test_expect_success 'test_bool_env' '
(
sane_unset envvar &&
test_bool_env envvar true &&
! test_bool_env envvar false &&
envvar= &&
export envvar &&
! test_bool_env envvar true &&
! test_bool_env envvar false &&
envvar=true &&
test_bool_env envvar true &&
test_bool_env envvar false &&
envvar=false &&
! test_bool_env envvar true &&
! test_bool_env envvar false &&
envvar=invalid &&
# When encountering an invalid bool value, test_bool_env
# prints its error message to the original stderr of the
# test script, hence the redirection of fd 7, and aborts
# with "exit 1", hence the subshell.
! ( test_bool_env envvar true ) 7>err &&
grep "error: test_bool_env requires bool values" err &&
envvar=true &&
! ( test_bool_env envvar invalid ) 7>err &&
grep "error: test_bool_env requires bool values" err
)
'
################################################################
# Basics of the basics

Просмотреть файл

@ -267,7 +267,7 @@ test_expect_success 'ls-remote --symref omits filtered-out matches' '
'
test_lazy_prereq GIT_DAEMON '
git env--helper --type=bool --default=true --exit-code GIT_TEST_GIT_DAEMON
test_bool_env GIT_TEST_GIT_DAEMON true
'
# This test spawns a daemon, so run it only if the user would be OK with

Просмотреть файл

@ -3,7 +3,7 @@
test_description='Test cloning a repository larger than 2 gigabyte'
. ./test-lib.sh
if test -z "$GIT_TEST_CLONE_2GB"
if ! test_bool_env GIT_TEST_CLONE_2GB false
then
say 'Skipping expensive 2GB clone test; enable it with GIT_TEST_CLONE_2GB=t'
else

Просмотреть файл

@ -1186,6 +1186,34 @@ perl () {
command "$PERL_PATH" "$@" 2>&7
} 7>&2 2>&4
# Given the name of an environment variable with a bool value, normalize
# its value to a 0 (true) or 1 (false or empty string) return code.
#
# test_bool_env GIT_TEST_HTTPD <default-value>
#
# Return with code corresponding to the given default value if the variable
# is unset.
# Abort the test script if either the value of the variable or the default
# are not valid bool values.
test_bool_env () {
if test $# != 2
then
BUG "test_bool_env requires two parameters (variable name and default value)"
fi
git env--helper --type=bool --default="$2" --exit-code "$1"
ret=$?
case $ret in
0|1) # unset or valid bool value
;;
*) # invalid bool value or something unexpected
error >&7 "test_bool_env requires bool values both for \$$1 and for the default fallback"
;;
esac
return $ret
}
# Exit the test suite, either by skipping all remaining tests or by
# exiting with an error. If our prerequisite variable $1 falls back
# on a default assume we were opportunistically trying to set up some
@ -1194,7 +1222,7 @@ perl () {
# The error/skip message should be given by $2.
#
test_skip_or_die () {
if ! git env--helper --type=bool --default=false --exit-code $1
if ! test_bool_env "$1" false
then
skip_all=$2
test_done

Просмотреть файл

@ -1406,19 +1406,19 @@ yes () {
# The GIT_TEST_FAIL_PREREQS code hooks into test_set_prereq(), and
# thus needs to be set up really early, and set an internal variable
# for convenience so the hot test_set_prereq() codepath doesn't need
# to call "git env--helper". Only do that work if needed by seeing if
# GIT_TEST_FAIL_PREREQS is set at all.
# to call "git env--helper" (via test_bool_env). Only do that work
# if needed by seeing if GIT_TEST_FAIL_PREREQS is set at all.
GIT_TEST_FAIL_PREREQS_INTERNAL=
if test -n "$GIT_TEST_FAIL_PREREQS"
then
if git env--helper --type=bool --default=0 --exit-code GIT_TEST_FAIL_PREREQS
if test_bool_env GIT_TEST_FAIL_PREREQS false
then
GIT_TEST_FAIL_PREREQS_INTERNAL=true
test_set_prereq FAIL_PREREQS
fi
else
test_lazy_prereq FAIL_PREREQS '
git env--helper --type=bool --default=0 --exit-code GIT_TEST_FAIL_PREREQS
test_bool_env GIT_TEST_FAIL_PREREQS false
'
fi
@ -1477,7 +1477,7 @@ then
fi
test_lazy_prereq C_LOCALE_OUTPUT '
! git env--helper --type=bool --default=0 --exit-code GIT_TEST_GETTEXT_POISON
! test_bool_env GIT_TEST_GETTEXT_POISON false
'
if test -z "$GIT_TEST_CHECK_CACHE_TREE"