Skip to content

Commit cc5e1bf

Browse files
dschogitster
authored andcommitted
gettext: avoid initialization if the locale dir is not present
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. To be clear, Git for Windows *needs* to be compiled with localization, for the following reasons: - to allow users to copy add-on localization in case they want it, and - to fix the nasty error message BUG: your vsnprintf is broken (returned -1) by using libgettext's override of vsnprintf() that does not share the behavior of msvcrt.dll's version of vsnprintf(). So let's be smart about it and skip setting up gettext if the locale directory is not even present. Since localization might be missing for not-yet-supported locales, this will not break anything. Signed-off-by: Johannes Schindelin <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 86e2545 commit cc5e1bf

File tree

1 file changed

+3
-0
lines changed

1 file changed

+3
-0
lines changed

gettext.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,9 @@ void git_setup_gettext(void)
163163
if (!podir)
164164
podir = system_path(GIT_LOCALE_PATH);
165165

166+
if (!is_directory(podir))
167+
return;
168+
166169
bindtextdomain("git", podir);
167170
setlocale(LC_MESSAGES, "");
168171
setlocale(LC_TIME, "");

0 commit comments

Comments
 (0)