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:
@ -16,27 +16,34 @@ else
|
||||
fi
|
||||
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
|
||||
if test -z "$GIT_INTERNAL_GETTEXT_TEST_FALLBACKS" && type gettext.sh >/dev/null 2>&1
|
||||
then
|
||||
# This is GNU libintl's gettext.sh, we don't need to do anything
|
||||
# else than setting up the environment and loading gettext.sh
|
||||
: no probing necessary
|
||||
elif test -n "$GIT_GETTEXT_POISON"
|
||||
then
|
||||
GIT_INTERNAL_GETTEXT_SH_SCHEME=poison
|
||||
elif type gettext.sh >/dev/null 2>&1
|
||||
then
|
||||
# GNU libintl's gettext.sh
|
||||
GIT_INTERNAL_GETTEXT_SH_SCHEME=gnu
|
||||
export GIT_INTERNAL_GETTEXT_SH_SCHEME
|
||||
elif test "$(gettext -h 2>&1)" = "-h"
|
||||
then
|
||||
# gettext binary exists but no gettext.sh. likely to be a gettext
|
||||
# binary on a Solaris or something that is not GNU libintl and
|
||||
# lack eval_gettext.
|
||||
GIT_INTERNAL_GETTEXT_SH_SCHEME=gettext_without_eval_gettext
|
||||
fi
|
||||
export GIT_INTERNAL_GETTEXT_SH_SCHEME
|
||||
|
||||
# Try to use libintl's gettext.sh, or fall back to English if we
|
||||
# can't.
|
||||
# ... 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
|
||||
|
||||
elif test -z "$GIT_INTERNAL_GETTEXT_TEST_FALLBACKS" && test "$(gettext -h 2>&1)" = "-h"
|
||||
then
|
||||
# We don't have gettext.sh, but there's a gettext binary in our
|
||||
# path. This is probably Solaris or something like it which has a
|
||||
# gettext implementation that isn't GNU libintl.
|
||||
GIT_INTERNAL_GETTEXT_SH_SCHEME=solaris
|
||||
export GIT_INTERNAL_GETTEXT_SH_SCHEME
|
||||
|
||||
;;
|
||||
gettext_without_eval_gettext)
|
||||
# Solaris has a gettext(1) but no eval_gettext(1)
|
||||
eval_gettext () {
|
||||
gettext "$1" | (
|
||||
@ -44,15 +51,19 @@ then
|
||||
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
|
||||
# Since gettext.sh isn't available we'll have to define our own
|
||||
# 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
|
||||
|
||||
eval_gettext () {
|
||||
printf "%s" "# GETTEXT POISON #"
|
||||
}
|
||||
;;
|
||||
*)
|
||||
gettext () {
|
||||
printf "%s" "$1"
|
||||
}
|
||||
@ -63,22 +74,8 @@ then
|
||||
git sh-i18n--envsubst "$1"
|
||||
)
|
||||
}
|
||||
fi
|
||||
else
|
||||
# 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
|
||||
;;
|
||||
esac
|
||||
|
||||
# Git-specific wrapper functions
|
||||
gettextln () {
|
||||
|
Reference in New Issue
Block a user