mirror of
https://github.com/git/git.git
synced 2024-05-19 09:26:09 +02:00
6cdccfce1e
Change the GETTEXT_POISON compile-time + runtime GIT_GETTEXT_POISON test parameter to only be a GIT_TEST_GETTEXT_POISON=<non-empty?> runtime parameter, to be consistent with other parameters documented in "Running tests with special setups" in t/README. When I added GETTEXT_POISON inbb946bba76
("i18n: add GETTEXT_POISON to simulate unfriendly translator", 2011-02-22) I was concerned with ensuring that the _() function would get constant folded if NO_GETTEXT was defined, and likewise that GETTEXT_POISON would be compiled out unless it was defined. But as the benchmark in my [1] shows doing a one-off runtime getenv("GIT_TEST_[...]") is trivial, and since GETTEXT_POISON was originally added the GIT_TEST_* env variables have become the common idiom for turning on special test setups. So change GETTEXT_POISON to work the same way. Now the GETTEXT_POISON=YesPlease compile-time option is gone, and running the tests with GIT_TEST_GETTEXT_POISON=[YesPlease|] can be toggled on/off without recompiling. This allows for conditionally amending tests to test with/without poison, similar to what859fdc0c3c
("commit-graph: define GIT_TEST_COMMIT_GRAPH", 2018-08-29) did for GIT_TEST_COMMIT_GRAPH. Do some of that, now we e.g. always run the t0205-gettext-poison.sh test. I did enough there to remove the GETTEXT_POISON prerequisite, but its inverse C_LOCALE_OUTPUT is still around, and surely some tests using it can be converted to e.g. always set GIT_TEST_GETTEXT_POISON=. Notes on the implementation: * We still compile a dedicated GETTEXT_POISON build in Travis CI. Perhaps this should be revisited and integrated into the "linux-gcc" build, seeae59a4e44f
("travis: run tests with GIT_TEST_SPLIT_INDEX", 2018-01-07) for prior art in that area. Then again maybe not, see [2]. * We now skip a test in t0000-basic.sh under GIT_TEST_GETTEXT_POISON=YesPlease that wasn't skipped before. This test relies on C locale output, but due to an edge case in how the previous implementation of GETTEXT_POISON worked (reading it from GIT-BUILD-OPTIONS) wasn't enabling poison correctly. Now it does, and needs to be skipped. * The getenv() function is not reentrant, so out of paranoia about code of the form: printf(_("%s"), getenv("some-env")); call use_gettext_poison() in our early setup in git_setup_gettext() so we populate the "poison_requested" variable in a codepath that's won't suffer from that race condition. * We error out in the Makefile if you're still saying GETTEXT_POISON=YesPlease to prompt users to change their invocation. * We should not print out poisoned messages during the test initialization itself to keep it more readable, so the test library hides the variable if set in $GIT_TEST_GETTEXT_POISON_ORIG during setup. See [3]. See also [4] for more on the motivation behind this patch, and the history of the GETTEXT_POISON facility. 1. https://public-inbox.org/git/871s8gd32p.fsf@evledraar.gmail.com/ 2. https://public-inbox.org/git/20181102163725.GY30222@szeder.dev/ 3. https://public-inbox.org/git/20181022202241.18629-2-szeder.dev@gmail.com/ 4. https://public-inbox.org/git/878t2pd6yu.fsf@evledraar.gmail.com/ Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
59 lines
1.6 KiB
Bash
59 lines
1.6 KiB
Bash
# Initialization and Icelandic locale for basic git i18n tests,
|
|
# which source this scriptlet instead of ./test-lib.sh.
|
|
#
|
|
# Copyright (c) 2010 Ævar Arnfjörð Bjarmason
|
|
#
|
|
|
|
. ./test-lib.sh
|
|
|
|
GIT_TEXTDOMAINDIR="$GIT_BUILD_DIR/po/build/locale"
|
|
GIT_PO_PATH="$GIT_BUILD_DIR/po"
|
|
export GIT_TEXTDOMAINDIR GIT_PO_PATH
|
|
|
|
. "$GIT_BUILD_DIR"/git-sh-i18n
|
|
|
|
if test_have_prereq GETTEXT && test_have_prereq C_LOCALE_OUTPUT
|
|
then
|
|
# is_IS.UTF-8 on Solaris and FreeBSD, is_IS.utf8 on Debian
|
|
is_IS_locale=$(locale -a 2>/dev/null |
|
|
sed -n '/^is_IS\.[uU][tT][fF]-*8$/{
|
|
p
|
|
q
|
|
}')
|
|
# is_IS.ISO8859-1 on Solaris and FreeBSD, is_IS.iso88591 on Debian
|
|
is_IS_iso_locale=$(locale -a 2>/dev/null |
|
|
sed -n '/^is_IS\.[iI][sS][oO]8859-*1$/{
|
|
p
|
|
q
|
|
}')
|
|
|
|
# Export them as an environment variable so the t0202/test.pl Perl
|
|
# test can use it too
|
|
export is_IS_locale is_IS_iso_locale
|
|
|
|
if test -n "$is_IS_locale" &&
|
|
test $GIT_INTERNAL_GETTEXT_SH_SCHEME != "fallthrough"
|
|
then
|
|
# Some of the tests need the reference Icelandic locale
|
|
test_set_prereq GETTEXT_LOCALE
|
|
|
|
# Exporting for t0202/test.pl
|
|
GETTEXT_LOCALE=1
|
|
export GETTEXT_LOCALE
|
|
say "# lib-gettext: Found '$is_IS_locale' as an is_IS UTF-8 locale"
|
|
else
|
|
say "# lib-gettext: No is_IS UTF-8 locale available"
|
|
fi
|
|
|
|
if test -n "$is_IS_iso_locale" &&
|
|
test $GIT_INTERNAL_GETTEXT_SH_SCHEME != "fallthrough"
|
|
then
|
|
# Some of the tests need the reference Icelandic locale
|
|
test_set_prereq GETTEXT_ISO_LOCALE
|
|
|
|
say "# lib-gettext: Found '$is_IS_iso_locale' as an is_IS ISO-8859-1 locale"
|
|
else
|
|
say "# lib-gettext: No is_IS ISO-8859-1 locale available"
|
|
fi
|
|
fi
|