]> git.ipfire.org Git - thirdparty/git.git/commitdiff
tests: remove support for GIT_TEST_GETTEXT_POISON
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Wed, 20 Jan 2021 18:27:58 +0000 (19:27 +0100)
committerJunio C Hamano <gitster@pobox.com>
Thu, 21 Jan 2021 23:50:01 +0000 (15:50 -0800)
This removes the ability to inject "poison" gettext() messages via the
GIT_TEST_GETTEXT_POISON special test setup.

I initially added this as a compile-time option in bb946bba761 (i18n:
add GETTEXT_POISON to simulate unfriendly translator, 2011-02-22), and
most recently modified to be toggleable at runtime in
6cdccfce1e0 (i18n: make GETTEXT_POISON a runtime option, 2018-11-08)..

The reason for its removal is that the trade-off of maintaining it
v.s. what it's getting us has long since flipped. When gettext was
integrated in 5e9637c6297 (i18n: add infrastructure for translating
Git with gettext, 2011-11-18) there was understandable concern on the
Git ML that in marking messages for translation en-masse we'd
inadvertently mark plumbing messages. The GETTEXT_POISON facility was
a way to smoke those out via our test suite.

Nowadays however we're done (or almost entirely done) with any marking
of messages for translation. New messages are usually marked by their
authors, who'll know whether it makes sense to translate them or
not. If not any errors in marking the messages are much more likely to
be spotted in review than in the the initial deluge of i18n patches in
the 2011-2012 era.

So let's just remove this. This leaves the test suite in a state where
we still have a lot of test_i18n, C_LOCALE_OUTPUT
etc. uses. Subsequent commits will remove those too.

The change to t/lib-rebase.sh is a selective revert of the relevant
part of f2d17068fd (i18n: rebase-interactive: mark comments of squash
for translation, 2016-06-17), and the comment in
t/t3406-rebase-message.sh is from c7108bf9ed (i18n: rebase: mark
messages for translation, 2012-07-25).

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
14 files changed:
Documentation/MyFirstContribution.txt
config.c
gettext.c
gettext.h
git-sh-i18n.sh
po/README
t/README
t/lib-gettext.sh
t/lib-rebase.sh
t/t0017-env-helper.sh
t/t0205-gettext-poison.sh [deleted file]
t/t3406-rebase-message.sh
t/test-lib-functions.sh
t/test-lib.sh

index 7c9a037cc21f2b7f3adc97b6ae1133a3238d8bee..af0a9da62ebb991e912f2fda131ba13b03e4390f 100644 (file)
@@ -664,7 +664,7 @@ mention the right animal somewhere:
 ----
 test_expect_success 'runs correctly with no args and good output' '
        git psuh >actual &&
-       test_i18ngrep Pony actual
+       grep Pony actual
 '
 ----
 
index 1137bd73aff07c77e9b73a0b4c1d193cd38d88de..a8dec9a2479aa8ad149aa0adb6de494de19b66a8 100644 (file)
--- a/config.c
+++ b/config.c
@@ -996,15 +996,6 @@ static void die_bad_number(const char *name, const char *value)
        if (!value)
                value = "";
 
-       if (!strcmp(name, "GIT_TEST_GETTEXT_POISON"))
-               /*
-                * We explicitly *don't* use _() here since it would
-                * cause an infinite loop with _() needing to call
-                * use_gettext_poison(). This is why marked up
-                * translations with N_() above.
-                */
-               die(bad_numeric, value, name, error_type);
-
        if (!(cf && cf->name))
                die(_(bad_numeric), value, name, _(error_type));
 
index 35d2c1218db2e27a6ac07fbf3c1244987e3e3021..308c4b3129495b7401a374eb86abdbb5fb3a1c2d 100644 (file)
--- a/gettext.c
+++ b/gettext.c
@@ -65,14 +65,6 @@ const char *get_preferred_languages(void)
        return NULL;
 }
 
-int use_gettext_poison(void)
-{
-       static int poison_requested = -1;
-       if (poison_requested == -1)
-               poison_requested = git_env_bool("GIT_TEST_GETTEXT_POISON", 0);
-       return poison_requested;
-}
-
 #ifndef NO_GETTEXT
 static int test_vsnprintf(const char *fmt, ...)
 {
@@ -181,8 +173,6 @@ void git_setup_gettext(void)
        if (!podir)
                podir = p = system_path(GIT_LOCALE_PATH);
 
-       use_gettext_poison(); /* getenv() reentrancy paranoia */
-
        if (!is_directory(podir)) {
                free(p);
                return;
index bee52eb11347da9336e9f1906f7973aa0e224d3b..c8b34fd61229e39fc99fd29a2135de86c2b6dac3 100644 (file)
--- a/gettext.h
+++ b/gettext.h
 
 #define FORMAT_PRESERVING(n) __attribute__((format_arg(n)))
 
-int use_gettext_poison(void);
-
 #ifndef NO_GETTEXT
 void git_setup_gettext(void);
 int gettext_width(const char *s);
 #else
 static inline void git_setup_gettext(void)
 {
-       use_gettext_poison(); /* getenv() reentrancy paranoia */
 }
 static inline int gettext_width(const char *s)
 {
@@ -48,14 +45,12 @@ static inline FORMAT_PRESERVING(1) const char *_(const char *msgid)
 {
        if (!*msgid)
                return "";
-       return use_gettext_poison() ? "# GETTEXT POISON #" : gettext(msgid);
+       return gettext(msgid);
 }
 
 static inline FORMAT_PRESERVING(1) FORMAT_PRESERVING(2)
 const char *Q_(const char *msgid, const char *plu, unsigned long n)
 {
-       if (use_gettext_poison())
-               return "# GETTEXT POISON #";
        return ngettext(msgid, plu, n);
 }
 
index 8eef60b43fd47a4a679c5c77ae2f9c5ab5907951..e3d9f4836db14e5834372a8bb61ee3c27c82f34f 100644 (file)
@@ -17,12 +17,7 @@ export TEXTDOMAINDIR
 
 # First decide what scheme to use...
 GIT_INTERNAL_GETTEXT_SH_SCHEME=fallthrough
-if test -n "$GIT_TEST_GETTEXT_POISON" &&
-           git env--helper --type=bool --default=0 --exit-code \
-               GIT_TEST_GETTEXT_POISON
-then
-       GIT_INTERNAL_GETTEXT_SH_SCHEME=poison
-elif test -n "@@USE_GETTEXT_SCHEME@@"
+if test -n "@@USE_GETTEXT_SCHEME@@"
 then
        GIT_INTERNAL_GETTEXT_SH_SCHEME="@@USE_GETTEXT_SCHEME@@"
 elif test -n "$GIT_INTERNAL_GETTEXT_TEST_FALLBACKS"
@@ -63,21 +58,6 @@ gettext_without_eval_gettext)
                )
        }
        ;;
-poison)
-       # Emit garbage so that tests that incorrectly rely on translatable
-       # strings will fail.
-       gettext () {
-               printf "%s" "# GETTEXT POISON #"
-       }
-
-       eval_gettext () {
-               printf "%s" "# GETTEXT POISON #"
-       }
-
-       eval_ngettext () {
-               printf "%s" "# GETTEXT POISON #"
-       }
-       ;;
 *)
        gettext () {
                printf "%s" "$1"
index 07595d369b0ab3cd3a90cef74cae81661f9cb95f..efd5baaf1d84e511eabf8988aa78361a2b19b626 100644 (file)
--- a/po/README
+++ b/po/README
@@ -284,23 +284,5 @@ Perl:
 Testing marked strings
 ----------------------
 
-Even if you've correctly marked porcelain strings for translation
-something in the test suite might still depend on the US English
-version of the strings, e.g. to grep some error message or other
-output.
-
-To smoke out issues like these, Git tested with a translation mode that
-emits gibberish on every call to gettext. To use it run the test suite
-with it, e.g.:
-
-    cd t && GIT_TEST_GETTEXT_POISON=true prove -j 9 ./t[0-9]*.sh
-
-If tests break with it you should inspect them manually and see if
-what you're translating is sane, i.e. that you're not translating
-plumbing output.
-
-If not you should replace calls to grep with test_i18ngrep, or
-test_cmp calls with test_i18ncmp. If that's not enough you can skip
-the whole test by making it depend on the C_LOCALE_OUTPUT
-prerequisite. See existing test files with this prerequisite for
-examples.
+Git's tests are run under LANG=C LC_ALL=C. So the tests do not need be
+changed to account for translations as they're added.
index c730a7077057d4104a8d4f18737309a2e2dcbdf4..9a9dded033c1c47733b666026b139ec8b860722c 100644 (file)
--- a/t/README
+++ b/t/README
@@ -358,12 +358,6 @@ whether this mode is active, and e.g. skip some tests that are hard to
 refactor to deal with it. The "SYMLINKS" prerequisite is currently
 excluded as so much relies on it, but this might change in the future.
 
-GIT_TEST_GETTEXT_POISON=<boolean> turns all strings marked for
-translation into gibberish if true. Used for spotting those tests that
-need to be marked with a C_LOCALE_OUTPUT prerequisite when adding more
-strings for translation. See "Testing marked strings" in po/README for
-details.
-
 GIT_TEST_SPLIT_INDEX=<boolean> forces split-index mode on the whole
 test suite. Accept any boolean values that are accepted by git-config.
 
index 2139b427ca1ced9ba0342ef33d634c9b054ade5e..cc6bb2cdeaae7b5bb23211c0d9c37c9deb39e14f 100644 (file)
@@ -17,7 +17,7 @@ else
        . "$GIT_BUILD_DIR"/git-sh-i18n
 fi
 
-if test_have_prereq GETTEXT && test_have_prereq C_LOCALE_OUTPUT
+if test_have_prereq GETTEXT
 then
        # is_IS.UTF-8 on Solaris and FreeBSD, is_IS.utf8 on Debian
        is_IS_locale=$(locale -a 2>/dev/null |
index b72c051f4761609246263c18f5e55a65f0ee9a8f..172d7459ff09b7e619101e2f88e951babea0e9ce 100644 (file)
@@ -29,7 +29,6 @@ set_fake_editor () {
        */COMMIT_EDITMSG)
                test -z "$EXPECT_HEADER_COUNT" ||
                        test "$EXPECT_HEADER_COUNT" = "$(sed -n '1s/^# This is a combination of \(.*\) commits\./\1/p' < "$1")" ||
-                       test "# # GETTEXT POISON #" = "$(sed -n '1p' < "$1")" ||
                        exit
                test -z "$FAKE_COMMIT_MESSAGE" || echo "$FAKE_COMMIT_MESSAGE" > "$1"
                test -z "$FAKE_COMMIT_AMEND" || echo "$FAKE_COMMIT_AMEND" >> "$1"
index c1ecf6aeac672056613c558fd27daaf6337ac1a6..4a159f99e44342d04f2810e2f136637c51f5e400 100755 (executable)
@@ -86,14 +86,14 @@ test_expect_success 'env--helper reads config thanks to trace2' '
        git config -f home/cycle include.path .gitconfig &&
 
        test_must_fail \
-               env HOME="$(pwd)/home" GIT_TEST_GETTEXT_POISON=false \
+               env HOME="$(pwd)/home" \
                git config -l 2>err &&
        grep "exceeded maximum include depth" err &&
 
        test_must_fail \
-               env HOME="$(pwd)/home" GIT_TEST_GETTEXT_POISON=true \
-               git -C cycle env--helper --type=bool --default=0 --exit-code GIT_TEST_GETTEXT_POISON 2>err &&
-       grep "# GETTEXT POISON #" err
+               env HOME="$(pwd)/home" GIT_TEST_ENV_HELPER=true \
+               git -C cycle env--helper --type=bool --default=0 --exit-code GIT_TEST_ENV_HELPER 2>err &&
+       grep "exceeded maximum include depth" err
 '
 
 test_done
diff --git a/t/t0205-gettext-poison.sh b/t/t0205-gettext-poison.sh
deleted file mode 100755 (executable)
index f9fa16a..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/bin/sh
-#
-# Copyright (c) 2010 Ævar Arnfjörð Bjarmason
-#
-
-test_description='Gettext Shell poison'
-
-GIT_TEST_GETTEXT_POISON=true
-export GIT_TEST_GETTEXT_POISON
-. ./lib-gettext.sh
-
-test_expect_success 'sanity: $GIT_INTERNAL_GETTEXT_SH_SCHEME" is poison' '
-    test "$GIT_INTERNAL_GETTEXT_SH_SCHEME" = "poison"
-'
-
-test_expect_success 'gettext: our gettext() fallback has poison semantics' '
-    printf "# GETTEXT POISON #" >expect &&
-    gettext "test" >actual &&
-    test_cmp expect actual &&
-    printf "# GETTEXT POISON #" >expect &&
-    gettext "test more words" >actual &&
-    test_cmp expect actual
-'
-
-test_expect_success 'eval_gettext: our eval_gettext() fallback has poison semantics' '
-    printf "# GETTEXT POISON #" >expect &&
-    eval_gettext "test" >actual &&
-    test_cmp expect actual &&
-    printf "# GETTEXT POISON #" >expect &&
-    eval_gettext "test more words" >actual &&
-    test_cmp expect actual
-'
-
-test_expect_success "gettext: invalid GIT_TEST_GETTEXT_POISON value doesn't infinitely loop" "
-       test_must_fail env GIT_TEST_GETTEXT_POISON=xyz git version 2>error &&
-       grep \"fatal: bad numeric config value 'xyz' for 'GIT_TEST_GETTEXT_POISON': invalid unit\" error
-"
-
-test_done
index 4afc528165998e3e16d9a444a936f7f46f861335..6340e9bc729e36b9fa6466d6ac5c92aed58ade18 100755 (executable)
@@ -64,13 +64,6 @@ test_expect_success 'rebase -n overrides config rebase.stat config' '
        ! grep "^ fileX |  *1 +$" diffstat.txt
 '
 
-# Output to stderr:
-#
-#     "Does not point to a valid commit: invalid-ref"
-#
-# NEEDSWORK: This "grep" is fine in real non-C locales, but
-# GIT_TEST_GETTEXT_POISON poisons the refname along with the enclosing
-# error message.
 test_expect_success 'rebase --onto outputs the invalid ref' '
        test_must_fail git rebase --onto invalid-ref HEAD HEAD 2>err &&
        test_i18ngrep "invalid-ref" err
index 999982fe4a9bd6714bf466c59f3627bafe142405..c7b1d857c46a9580df7a4aa8e868182ddf629907 100644 (file)
@@ -988,19 +988,16 @@ test_cmp_bin () {
        cmp "$@"
 }
 
-# Use this instead of test_cmp to compare files that contain expected and
-# actual output from git commands that can be translated.  When running
-# under GIT_TEST_GETTEXT_POISON this pretends that the command produced expected
-# results.
+# Wrapper for test_cmp which used to be used for
+# GIT_TEST_GETTEXT_POISON=false. Only here as a shim for other
+# in-flight changes. Should not be used and will be removed soon.
 test_i18ncmp () {
-       ! test_have_prereq C_LOCALE_OUTPUT || test_cmp "$@"
+       test_cmp "$@"
 }
 
-# Use this instead of "grep expected-string actual" to see if the
-# output from a git command that can be translated either contains an
-# expected string, or does not contain an unwanted one.  When running
-# under GIT_TEST_GETTEXT_POISON this pretends that the command produced expected
-# results.
+# Wrapper for grep which used to be used for
+# GIT_TEST_GETTEXT_POISON=false. Only here as a shim for other
+# in-flight changes. Should not be used and will be removed soon.
 test_i18ngrep () {
        eval "last_arg=\${$#}"
 
@@ -1013,12 +1010,6 @@ test_i18ngrep () {
                BUG "too few parameters to test_i18ngrep"
        fi
 
-       if test_have_prereq !C_LOCALE_OUTPUT
-       then
-               # pretend success
-               return 0
-       fi
-
        if test "x!" = "x$1"
        then
                shift
index 9fa7c1d0f6d1c8c23642a7bc81ad4fb2f8a82275..c1ff5db2c17fa30179c7d7690eeb753d38e76e47 100644 (file)
@@ -404,15 +404,6 @@ TZ=UTC
 export LANG LC_ALL PAGER TZ
 EDITOR=:
 
-# GIT_TEST_GETTEXT_POISON should not influence git commands executed
-# during initialization of test-lib and the test repo. Back it up,
-# unset and then restore after initialization is finished.
-if test -n "$GIT_TEST_GETTEXT_POISON"
-then
-       GIT_TEST_GETTEXT_POISON_ORIG=$GIT_TEST_GETTEXT_POISON
-       unset GIT_TEST_GETTEXT_POISON
-fi
-
 # A call to "unset" with no arguments causes at least Solaris 10
 # /usr/xpg4/bin/sh and /bin/ksh to bail out.  So keep the unsets
 # deriving from the command substitution clustered with the other
@@ -1529,16 +1520,10 @@ test -n "$USE_LIBPCRE1" && test_set_prereq LIBPCRE1
 test -n "$USE_LIBPCRE2" && test_set_prereq LIBPCRE2
 test -z "$NO_GETTEXT" && test_set_prereq GETTEXT
 
-if test -n "$GIT_TEST_GETTEXT_POISON_ORIG"
-then
-       GIT_TEST_GETTEXT_POISON=$GIT_TEST_GETTEXT_POISON_ORIG
-       export GIT_TEST_GETTEXT_POISON
-       unset GIT_TEST_GETTEXT_POISON_ORIG
-fi
-
-test_lazy_prereq C_LOCALE_OUTPUT '
-       ! test_bool_env GIT_TEST_GETTEXT_POISON false
-'
+# Used to be used for GIT_TEST_GETTEXT_POISON=false. Only here as a
+# shim for other in-flight changes. Should not be used and will be
+# removed soon.
+test_set_prereq C_LOCALE_OUTPUT
 
 if test -z "$GIT_TEST_CHECK_CACHE_TREE"
 then