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

Re: [PATCH 1/3] gettext: avoid initialization if the locale dir is not present

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Apr 20, 2018, 09:59 UTC
Message-ID
<87o9iedwqn.fsf@evledraar.gmail.com>
In-Reply-To
<6be8678b7d6b4d9116ea4666a0b28ff4dd938690.1524211375.git.johannes.schindelin@gmx.de>
On Fri, Apr 20 2018, Johannes Schindelin wrote:
Show 35 quoted lines
> The runtime of a simple `git.exe version` call on Windows is currently
> dominated by the gettext setup, adding a whopping ~150ms to the ~210ms
> total.
>
> Given that this cost is added to each and every git.exe invocation goes
> through common-main's invocation of git_setup_gettext(), and given that
> scripts have to call git.exe dozens, if not hundreds, of times, this is
> a substantial performance penalty.
>
> This is particularly pointless when considering that Git for Windows
> ships without localization (to keep the installer's size to a bearable
> ~34MB): all that time setting up gettext is for naught.
>
> So let's be smart about it and skip setting up gettext if the locale
> directory is not even present.
>
> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> ---
>  gettext.c | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/gettext.c b/gettext.c
> index baba28343c3..701355d66e7 100644
> --- a/gettext.c
> +++ b/gettext.c
> @@ -163,6 +163,9 @@ void git_setup_gettext(void)
>  	if (!podir)
>  		podir = system_path(GIT_LOCALE_PATH);
>
> +	if (!is_directory(podir))
> +		return;
> +
>  	bindtextdomain("git", podir);
>  	setlocale(LC_MESSAGES, "");
>  	setlocale(LC_TIME, "");

I wish we could fix the root cause and just make gettext faster (or ship with a small shimmy of our own), but leaving that aside, I don't see how this patch makes sense.

If you don't ship git for windows with gettext or a podir, then compile with NO_GETTEXT, then we won't even compile this function you're patching here. See line 30 and beyond of gettext.h.

Are you instead compiling git for windows with gettext support with an optional add-on package for i18n, so then this podir conditional would pass?

In any case, if this is actually the desired behavior I think it's worth clearly explaining the interaction with NO_GETTEXT in the commit message, and if you *actually* don't want NO_GETTEXT I think it's useful to guard this with something like MAYBE_GETTEXT on top, so this code doesn't unintentionally hide installation errors on other platforms. I.e. something like:

	int have_podir = is_directory(podir);
	if (!have_podir)
#ifdef MAYBE_GETTEXT
		return;
#else
		BUG("Broken installation, can't find '%s'!", podir);
#endif
Previous: Johannes SchindelinNext: Martin Ågren
Message 3 of 21 in “Some add-on patches on top of dj/runtime-prefix”
  1. 0/3 Some add-on patches on top of dj/runtime-prefixJohannes Schindelin, Apr 20, 2018
  2. 1/3 gettext: avoid initialization if the locale dir is not presentJohannes Schindelin, Apr 20, 2018
  3. Ævar Arnfjörð BjarmasonApr 20, 2018
  4. Martin ÅgrenApr 20, 2018
  5. Ævar Arnfjörð BjarmasonApr 20, 2018
  6. Johannes SchindelinApr 20, 2018
  7. Ævar Arnfjörð BjarmasonApr 21, 2018
  8. Johannes SchindelinApr 21, 2018
  9. 2/3 git_setup_gettext: plug memory leakJohannes Schindelin, Apr 20, 2018
  10. 3/3 Avoid multiple PREFIX definitionsJohannes Schindelin, Apr 20, 2018
  11. Philip OakleyApr 22, 2018
  12. 0/3 Some add-on patches on top of dj/runtime-prefixJohannes Schindelin, Apr 21, 2018
  13. 1/3 gettext: avoid initialization if the locale dir is not presentJohannes Schindelin, Apr 21, 2018
  14. 2/3 git_setup_gettext: plug memory leakJohannes Schindelin, Apr 21, 2018
  15. 3/3 Avoid multiple PREFIX definitionsJohannes Schindelin, Apr 21, 2018
  16. Junio C HamanoApr 24, 2018
  17. Junio C HamanoApr 24, 2018
  18. Junio C HamanoApr 24, 2018
  19. Johannes SchindelinApr 24, 2018
  20. Junio C HamanoApr 25, 2018
  21. Johannes SchindelinApr 25, 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.