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

Re: [PATCH] i18n: make GETTEXT_POISON a runtime option

From
Junio C Hamano <gitster@pobox.com>
Date
Oct 24, 2018, 05:45 UTC
Message-ID
<xmqqefcfoq2a.fsf@gitster-ct.c.googlers.com>
In-Reply-To
<20181023210154.32507-1-avarab@gmail.com>
Ævar Arnfjörð Bjarmason  <avarab@gmail.com> writes:
Show 10 quoted lines
> Notes on the implementation:
>
>  * The only reason we need a new "git-sh-i18n--helper" and the
>    corresponding "test-tool gettext-poison" is to expose
>    git_env_bool() to shellscripts, since git-sh-i18n and friends need
>    to inspect the $GIT_TEST_GETTEXT_POISON variable.
>
>    We only call these if $GIT_TEST_GETTEXT_POISON is set, or in the
>    test suite, and this code can go away for non-test code once the
>    last i18n-using shellscript is rewritten in C.

Makes me wonder if we want to teach "git config" a new "--env-bool" option that can be used by third-party scripts. Or would it be just the matter of writing

	git config --default=false --type=bool "$GIT_WHATEVER_ENV"
in these third-party scripts and we do not need to add such a thing?
Show 8 quoted lines
>  * The reason for not doing:
>
>        test_lazy_prereq GETTEXT_POISON 'test-tool gettext-poison'
>        test_lazy_prereq C_LOCALE_OUTPUT '! test-tool gettext-poison'
>
>    In test-lib.sh is because there's some interpolation problem with
>    that syntax which makes t6040-tracking-info.sh fail. Hence using
>    the simpler test_set_prereq.

s/In/in/, as you haven't finished the sentence yet. But more importantly, what is this "some interpolation problem"? Are you saying that test_lazy_prereq implementation is somehow broken and cannot take certain strings? If so, perhaps we want to fix that, and people other than you can help to do so, once you let them know what the problem is.

> See also
> https://public-inbox.org/git/871s8gd32p.fsf@evledraar.gmail.com/ for
> more discussion.

"See also [*1*] for more discussion" as you've already have reference below.

Show 25 quoted lines
>
> 1. https://public-inbox.org/git/871s8gd32p.fsf@evledraar.gmail.com/
>
> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
> ---
>
> Here's a polished version of that. I think it makes sense to queue
> this up before any other refactoring of GETTEXT_POISON, and some patch
> to unconditionally preserve format specifiers as I suggested upthread
> could go on top of this.
> ...
> +int cmd_sh_i18n__helper(int argc, const char **argv, const char *prefix)
> +{
> +	int poison = -1;
> +	struct option options[] = {
> +		OPT_BOOL(0, "git-test-gettext-poison", &poison,
> +			 N_("is GIT_TEST_GETTEXT_POISON in effect?")),
> +		OPT_END()
> +	};
> +
> +	argc = parse_options(argc, argv, NULL, options,
> +			     builtin_sh_i18n_helper_usage, PARSE_OPT_KEEP_ARGV0);
> +
> +	if (poison != -1)
> +		return !git_env_bool("GIT_TEST_GETTEXT_POISON", 0);

Hmm? If "--[no-]git-test-gettext-poison" is given, poison is either 0 or 1, and we return the value we read from the environment? What convoluted way to implement the option is that, or is there anything subtle that I am not getting?

If the "default" parameter to git_env_bool() were poison, and then the option was renamed to "--get-git-text-gettext-poison", then I sort of understand the code, though (it's like "git config" with "--default" option).

But if there is nothing subtle, it may make sense to implement this as an opt-cmdmode instead.

Show 13 quoted lines
> diff --git a/po/README b/po/README
> index fef4c0f0b5..dba46c4a40 100644
> --- a/po/README
> +++ b/po/README
> @@ -289,16 +289,11 @@ 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 can be compiled with gettext poison
> -support, at the top-level:
> +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.:

s/these Git tested/these, Git can be tested/; even though the comma is not a new issue you introduced.

Previous: Ævar Arnfjörð BjarmasonNext: Jeff King
Message 20 of 49 in “Poison gettext with the Ook language”
  1. Poison gettext with the Ook languageNguyễn Thái Ngọc Duy, Oct 22, 2018
  2. SZEDER GáborOct 22, 2018
  3. 1/8 test-lib.sh: preserve GIT_GETTEXT_POISON from the environmentSZEDER Gábor, Oct 22, 2018
  4. 2/8 gettext: don't poison if GIT_GETTEXT_POISON is set but emptySZEDER Gábor, Oct 22, 2018
  5. Ævar Arnfjörð BjarmasonOct 22, 2018
  6. 3/8 lib-rebase: loosen GETTEXT_POISON check in fake editorSZEDER Gábor, Oct 22, 2018
  7. 4/8 gettext: #ifdef away GETTEXT POISON-related code from _() and Q_()SZEDER Gábor, Oct 22, 2018
  8. 5/8 gettext: put "# GETTEXT POISON #" string literal into a macroSZEDER Gábor, Oct 22, 2018
  9. 6/8 gettext: use an enum for the mode of GETTEXT POISONingSZEDER Gábor, Oct 22, 2018
  10. 7/8 gettext: introduce GIT_GETTEXT_POISON=scrambledSZEDER Gábor, Oct 22, 2018
  11. Duy NguyenOct 23, 2018
  12. 8/8 travis-ci: run GETTEXT POISON build job in scrambled mode, tooSZEDER Gábor, Oct 22, 2018
  13. Duy NguyenOct 23, 2018
  14. Jakub NarebskiOct 27, 2018
  15. Johannes SchindelinOct 22, 2018
  16. Ævar Arnfjörð BjarmasonOct 22, 2018
  17. Ævar Arnfjörð BjarmasonOct 22, 2018
  18. Junio C HamanoOct 22, 2018
  19. i18n: make GETTEXT_POISON a runtime optionÆvar Arnfjörð Bjarmason, Oct 23, 2018
  20. Junio C HamanoOct 24, 2018
  21. Jeff KingOct 24, 2018
  22. Junio C HamanoOct 25, 2018
  23. Jeff KingOct 25, 2018
  24. Ramsay JonesOct 25, 2018
  25. Jeff KingOct 25, 2018
  26. Ævar Arnfjörð BjarmasonOct 26, 2018
  27. Jeff KingOct 27, 2018
  28. Ævar Arnfjörð BjarmasonOct 27, 2018
  29. i18n: make GETTEXT_POISON a runtime optionÆvar Arnfjörð Bjarmason, Oct 24, 2018
  30. i18n: make GETTEXT_POISON a runtime optionÆvar Arnfjörð Bjarmason, Nov 1, 2018
  31. Junio C HamanoNov 2, 2018
  32. SZEDER GáborNov 2, 2018
  33. Ævar Arnfjörð BjarmasonNov 8, 2018
  34. SZEDER GáborNov 8, 2018
  35. Junio C HamanoNov 8, 2018
  36. Eric SunshineNov 8, 2018
  37. 0/2 i18n: make GETTEXT_POISON a runtime optionÆvar Arnfjörð Bjarmason, Nov 8, 2018
  38. 1/2 i18n: make GETTEXT_POISON a runtime optionÆvar Arnfjörð Bjarmason, Nov 8, 2018
  39. 2/2 Makefile: ease dynamic-gettext-poison transitionÆvar Arnfjörð Bjarmason, Nov 8, 2018
  40. Johannes SchindelinOct 23, 2018
  41. Ævar Arnfjörð BjarmasonOct 23, 2018
  42. Johannes SchindelinOct 23, 2018
  43. Duy NguyenOct 23, 2018
  44. Ævar Arnfjörð BjarmasonOct 23, 2018
  45. Duy NguyenOct 24, 2018
  46. Ævar Arnfjörð BjarmasonOct 24, 2018
  47. Junio C HamanoOct 25, 2018
  48. Jeff KingOct 25, 2018
  49. Junio C HamanoOct 27, 2018

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.