git-sh-i18n: restructure the logic to compute gettext.sh scheme

Instead of having a single long and complex chain of commands to decide
what to do and carry out the decision, split the code so that we first
decide which scheme to use, and in the second section define what exactly
is done by the chosen scheme. It makes the code much easier to follow and
update.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Junio C Hamano
2012-01-23 14:02:55 -08:00
parent 2dccad3c6f
commit 42f16113ee

View File

@ -16,27 +16,34 @@ else
fi fi
export TEXTDOMAINDIR export TEXTDOMAINDIR
if test -z "$GIT_GETTEXT_POISON" # First decide what scheme to use...
GIT_INTERNAL_GETTEXT_SH_SCHEME=fallthrough
if test -n "$GIT_INTERNAL_GETTEXT_TEST_FALLBACKS"
then then
if test -z "$GIT_INTERNAL_GETTEXT_TEST_FALLBACKS" && type gettext.sh >/dev/null 2>&1 : no probing necessary
elif test -n "$GIT_GETTEXT_POISON"
then then
# This is GNU libintl's gettext.sh, we don't need to do anything GIT_INTERNAL_GETTEXT_SH_SCHEME=poison
# else than setting up the environment and loading gettext.sh elif type gettext.sh >/dev/null 2>&1
then
# GNU libintl's gettext.sh
GIT_INTERNAL_GETTEXT_SH_SCHEME=gnu GIT_INTERNAL_GETTEXT_SH_SCHEME=gnu
export GIT_INTERNAL_GETTEXT_SH_SCHEME elif test "$(gettext -h 2>&1)" = "-h"
# Try to use libintl's gettext.sh, or fall back to English if we
# can't.
. gettext.sh
elif test -z "$GIT_INTERNAL_GETTEXT_TEST_FALLBACKS" && test "$(gettext -h 2>&1)" = "-h"
then then
# We don't have gettext.sh, but there's a gettext binary in our # gettext binary exists but no gettext.sh. likely to be a gettext
# path. This is probably Solaris or something like it which has a # binary on a Solaris or something that is not GNU libintl and
# gettext implementation that isn't GNU libintl. # lack eval_gettext.
GIT_INTERNAL_GETTEXT_SH_SCHEME=solaris GIT_INTERNAL_GETTEXT_SH_SCHEME=gettext_without_eval_gettext
fi
export GIT_INTERNAL_GETTEXT_SH_SCHEME export GIT_INTERNAL_GETTEXT_SH_SCHEME
# ... and then follow that decision.
case "$GIT_INTERNAL_GETTEXT_SH_SCHEME" in
gnu)
# Use libintl's gettext.sh, or fall back to English if we can't.
. gettext.sh
;;
gettext_without_eval_gettext)
# Solaris has a gettext(1) but no eval_gettext(1) # Solaris has a gettext(1) but no eval_gettext(1)
eval_gettext () { eval_gettext () {
gettext "$1" | ( gettext "$1" | (
@ -44,15 +51,19 @@ then
git sh-i18n--envsubst "$1" git sh-i18n--envsubst "$1"
) )
} }
;;
poison)
# Emit garbage so that tests that incorrectly rely on translatable
# strings will fail.
gettext () {
printf "%s" "# GETTEXT POISON #"
}
else eval_gettext () {
# Since gettext.sh isn't available we'll have to define our own printf "%s" "# GETTEXT POISON #"
# dummy pass-through functions. }
;;
# Tell our tests that we don't have the real gettext.sh *)
GIT_INTERNAL_GETTEXT_SH_SCHEME=fallthrough
export GIT_INTERNAL_GETTEXT_SH_SCHEME
gettext () { gettext () {
printf "%s" "$1" printf "%s" "$1"
} }
@ -63,22 +74,8 @@ then
git sh-i18n--envsubst "$1" git sh-i18n--envsubst "$1"
) )
} }
fi ;;
else esac
# Emit garbage under GETTEXT_POISON=YesPlease. Unlike the C tests
# this relies on an environment variable
GIT_INTERNAL_GETTEXT_SH_SCHEME=poison
export GIT_INTERNAL_GETTEXT_SH_SCHEME
gettext () {
printf "%s" "# GETTEXT POISON #"
}
eval_gettext () {
printf "%s" "# GETTEXT POISON #"
}
fi
# Git-specific wrapper functions # Git-specific wrapper functions
gettextln () { gettextln () {