Skip to content

Commit

Permalink
Merge branch 'skip-gettext-when-possible'
Browse files Browse the repository at this point in the history
This topic branch allows us to skip the gettext initialization
when the locale directory does not even exist.

This saves 150ms out of 210ms for a simply `git version` call on
Windows, and it most likely will help scripts that call out to
`git.exe` hundreds of times.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
  • Loading branch information
dscho committed Mar 20, 2017
2 parents c2474dc + 96acecc commit 24e8a39
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 8 deletions.
4 changes: 3 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,7 @@ lib = lib
# DESTDIR =
pathsep = :

localedir_relative = $(patsubst $(prefix)/%,%,$(localedir))
mandir_relative = $(patsubst $(prefix)/%,%,$(mandir))
infodir_relative = $(patsubst $(prefix)/%,%,$(infodir))
htmldir_relative = $(patsubst $(prefix)/%,%,$(htmldir))
Expand Down Expand Up @@ -1603,6 +1604,7 @@ bindir_relative_SQ = $(subst ','\'',$(bindir_relative))
mandir_relative_SQ = $(subst ','\'',$(mandir_relative))
infodir_relative_SQ = $(subst ','\'',$(infodir_relative))
localedir_SQ = $(subst ','\'',$(localedir))
localedir_relative_SQ = $(subst ','\'',$(localedir_relative))
gitexecdir_SQ = $(subst ','\'',$(gitexecdir))
template_dir_SQ = $(subst ','\'',$(template_dir))
htmldir_relative_SQ = $(subst ','\'',$(htmldir_relative))
Expand Down Expand Up @@ -2039,7 +2041,7 @@ attr.sp attr.s attr.o: EXTRA_CPPFLAGS = \

gettext.sp gettext.s gettext.o: GIT-PREFIX
gettext.sp gettext.s gettext.o: EXTRA_CPPFLAGS = \
-DGIT_LOCALE_PATH='"$(localedir_SQ)"'
-DGIT_LOCALE_PATH='"$(localedir_relative_SQ)"'

http-push.sp http.sp http-walker.sp remote-curl.sp imap-send.sp: SPARSE_FLAGS += \
-DCURL_DISABLE_TYPECHECK
Expand Down
4 changes: 2 additions & 2 deletions common-main.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,10 @@ int main(int argc, const char **argv)
*/
sanitize_stdfds();

git_setup_gettext();

git_extract_argv0_path(argv[0]);

git_setup_gettext();

restore_sigpipe_to_default();

return cmd_main(argc, argv);
Expand Down
20 changes: 15 additions & 5 deletions gettext.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
#include "gettext.h"
#include "strbuf.h"
#include "utf8.h"
#include "cache.h"
#include "exec_cmd.h"

#ifndef NO_GETTEXT
# include <locale.h>
Expand Down Expand Up @@ -160,14 +162,22 @@ static void init_gettext_charset(const char *domain)
void git_setup_gettext(void)
{
const char *podir = getenv("GIT_TEXTDOMAINDIR");
char *p = NULL;

if (!podir)
podir = GIT_LOCALE_PATH;
bindtextdomain("git", podir);
setlocale(LC_MESSAGES, "");
setlocale(LC_TIME, "");
init_gettext_charset("git");
textdomain("git");
if (!is_absolute_path(podir))
podir = p = system_path(podir);

if (is_directory(podir)) {
bindtextdomain("git", podir);
setlocale(LC_MESSAGES, "");
setlocale(LC_TIME, "");
init_gettext_charset("git");
textdomain("git");
}

free(p);
}

/* return the number of columns of string 's' in current locale */
Expand Down

0 comments on commit 24e8a39

Please sign in to comment.