git-sh-i18n.shon commit completion: simplify tests using test_completion_long() (a1be444)
   1#!/bin/sh
   2#
   3# Copyright (c) 2010 Ævar Arnfjörð Bjarmason
   4#
   5# This is Git's interface to gettext.sh. See po/README for usage
   6# instructions.
   7
   8# Export the TEXTDOMAIN* data that we need for Git
   9TEXTDOMAIN=git
  10export TEXTDOMAIN
  11if test -z "$GIT_TEXTDOMAINDIR"
  12then
  13        TEXTDOMAINDIR="@@LOCALEDIR@@"
  14else
  15        TEXTDOMAINDIR="$GIT_TEXTDOMAINDIR"
  16fi
  17export TEXTDOMAINDIR
  18
  19# First decide what scheme to use...
  20GIT_INTERNAL_GETTEXT_SH_SCHEME=fallthrough
  21if test -n "@@USE_GETTEXT_SCHEME@@"
  22then
  23        GIT_INTERNAL_GETTEXT_SH_SCHEME="@@USE_GETTEXT_SCHEME@@"
  24elif test -n "$GIT_INTERNAL_GETTEXT_TEST_FALLBACKS"
  25then
  26        : no probing necessary
  27elif test -n "$GIT_GETTEXT_POISON"
  28then
  29        GIT_INTERNAL_GETTEXT_SH_SCHEME=poison
  30elif type gettext.sh >/dev/null 2>&1
  31then
  32        # GNU libintl's gettext.sh
  33        GIT_INTERNAL_GETTEXT_SH_SCHEME=gnu
  34elif test "$(gettext -h 2>&1)" = "-h"
  35then
  36        # gettext binary exists but no gettext.sh. likely to be a gettext
  37        # binary on a Solaris or something that is not GNU libintl and
  38        # lack eval_gettext.
  39        GIT_INTERNAL_GETTEXT_SH_SCHEME=gettext_without_eval_gettext
  40fi
  41export GIT_INTERNAL_GETTEXT_SH_SCHEME
  42
  43# ... and then follow that decision.
  44case "$GIT_INTERNAL_GETTEXT_SH_SCHEME" in
  45gnu)
  46        # Use libintl's gettext.sh, or fall back to English if we can't.
  47        . gettext.sh
  48        ;;
  49gettext_without_eval_gettext)
  50        # Solaris has a gettext(1) but no eval_gettext(1)
  51        eval_gettext () {
  52                gettext "$1" | (
  53                        export PATH $(git sh-i18n--envsubst --variables "$1");
  54                        git sh-i18n--envsubst "$1"
  55                )
  56        }
  57        ;;
  58poison)
  59        # Emit garbage so that tests that incorrectly rely on translatable
  60        # strings will fail.
  61        gettext () {
  62                printf "%s" "# GETTEXT POISON #"
  63        }
  64
  65        eval_gettext () {
  66                printf "%s" "# GETTEXT POISON #"
  67        }
  68        ;;
  69*)
  70        gettext () {
  71                printf "%s" "$1"
  72        }
  73
  74        eval_gettext () {
  75                printf "%s" "$1" | (
  76                        export PATH $(git sh-i18n--envsubst --variables "$1");
  77                        git sh-i18n--envsubst "$1"
  78                )
  79        }
  80        ;;
  81esac
  82
  83# Git-specific wrapper functions
  84gettextln () {
  85        gettext "$1"
  86        echo
  87}
  88
  89eval_gettextln () {
  90        eval_gettext "$1"
  91        echo
  92}