Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Commits on Nov 26, 2013
  1. @jrn @gitster

    remove #!interpreter line from shell libraries

    jrn authored gitster committed
    In a shell snippet meant to be sourced by other shell scripts, an
    opening #! line does more harm than good.
    The harm:
     - When the shell library is sourced, the interpreter and options from
       the #! line are not used.  Specifying a particular shell can
       confuse the reader into thinking it is safe for the shell library
       to rely on idiosyncrasies of that shell.
     - Using #! instead of a plain comment drops a helpful visual clue
       that this is a shell library and not a self-contained script.
     - Tools such as lintian can use a #! line to tell when an
       installation script has failed by forgetting to set a script
       executable.  This check does not work if shell libraries also start
       with a #! line.
    The good:
     - Text editors notice the #! line and use it for syntax highlighting
       if you try to edit the installed scripts (without ".sh" suffix) in
    The use of the #! for file type detection is not needed because Git's
    shell libraries are meant to be edited in source form (with ".sh"
    suffix).  Replace the opening #! lines with comments.
    This involves tweaking the test harness's valgrind support to find
    shell libraries by looking for "# " in the first line instead of "#!"
    (see v1.7.6-rc3~7, 2011-06-17).
    Suggested by Russ Allbery through lintian.  Thanks to Jeff King and
    Clemens Buchacher for further analysis.
    Tested by searching for non-executable scripts with #! line:
    	find . -name .git -prune -o -type f -not -executable |
    	while read file
    		read line <"$file"
    		case $line in
    			echo "$file"
    The only remaining scripts found are templates for shell scripts
    (, and sample input used in tests
    Signed-off-by: Jonathan Nieder <>
    Signed-off-by: Junio C Hamano <>
Commits on Mar 12, 2012
  1. @gitster

    i18n: fix auto detection of gettext scheme for shell scripts

    gitster authored
    A new code added by ad17ea7 (add a Makefile switch to avoid gettext
    translation in shell scripts, 2012-01-23) tried to optionally force
    a gettext scheme to "fallthrough", but ended up forcing it to everybody.
    Signed-off-by: Junio C Hamano <>
Commits on Jan 23, 2012
  1. @raalkml @gitster

    add a Makefile switch to avoid gettext translation in shell scripts

    raalkml authored gitster committed
    Some systems have (GNU gettext) installed, but it is either
    broken or misconfigured in such a way so its output is not usable.  In
    case the users of these systems are unable or not interested in fixing
    them, setting the new Makefile switch should help:
        make USE_GETTEXT_SCHEME=fallthrough
    This will replace the translation routines with fallthrough versions,
    that does not use gettext from the platform.
    Signed-off-by: Alex Riesen <>
    Signed-off-by: Junio C Hamano <>
  2. @gitster

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

    gitster authored
    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
    Signed-off-by: Junio C Hamano <>
Commits on Dec 6, 2011
  1. @avar @gitster

    i18n: add infrastructure for translating Git with gettext

    avar authored gitster committed
    Change the skeleton implementation of i18n in Git to one that can show
    localized strings to users for our C, Shell and Perl programs using
    either GNU libintl or the Solaris gettext implementation.
    This new internationalization support is enabled by default. If
    gettext isn't available, or if Git is compiled with
    NO_GETTEXT=YesPlease, Git falls back on its current behavior of
    showing interface messages in English. When using the autoconf script
    we'll auto-detect if the gettext libraries are installed and act
    This change is somewhat large because as well as adding a C, Shell and
    Perl i18n interface we're adding a lot of tests for them, and for
    those tests to work we need a skeleton PO file to actually test
    translations. A minimal Icelandic translation is included for this
    purpose. Icelandic includes multi-byte characters which makes it easy
    to test various edge cases, and it's a language I happen to
    The rest of the commit message goes into detail about various
    sub-parts of this commit.
    = Installation
    Gettext .mo files will be installed and looked for in the standard
    $(prefix)/share/locale path. GIT_TEXTDOMAINDIR can also be set to
    override that, but that's only intended to be used to test Git itself.
    = Perl
    Perl code that's to be localized should use the new Git::I18n
    module. It imports a __ function into the caller's package by default.
    Instead of using the high level Locale::TextDomain interface I've
    opted to use the low-level (equivalent to the C interface)
    Locale::Messages module, which Locale::TextDomain itself uses.
    Locale::TextDomain does a lot of redundant work we don't need, and
    some of it would potentially introduce bugs. It tries to set the
    $TEXTDOMAIN based on package of the caller, and has its own
    hardcoded paths where it'll search for messages.
    I found it easier just to completely avoid it rather than try to
    circumvent its behavior. In any case, this is an issue wholly
    internal Git::I18N. Its guts can be changed later if that's deemed
    See <> for
    a further elaboration on this topic.
    = Shell
    Shell code that's to be localized should use the git-sh-i18n
    library. It's basically just a wrapper for the system's
    If isn't available we'll fall back on gettext(1) if it's
    available. The latter is available without the former on Solaris,
    which has its own non-GNU gettext implementation. We also need to
    emulate eval_gettext() there.
    If neither are present we'll use a dumb printf(1) fall-through
    = About libcharset.h and langinfo.h
    We use libcharset to query the character set of the current locale if
    it's available. I.e. we'll use it instead of nl_langinfo if
    The GNU gettext manual recommends using langinfo.h's
    nl_langinfo(CODESET) to acquire the current character set, but on
    systems that have libcharset.h's locale_charset() using the latter is
    either saner, or the only option on those systems.
    GNU and Solaris have a nl_langinfo(CODESET), FreeBSD can use either,
    but MinGW and some others need to use libcharset.h's locale_charset()
    This patch is based on work by Jeff Epler <> who
    did the initial Makefile / C work, and a lot of comments from the Git
    mailing list, including Jonathan Nieder, Jakub Narebski, Johannes
    Sixt, Erik Faye-Lund, Peter Krefting, Junio C Hamano, Thomas Rast and
    [jc: squashed a small Makefile fix from Ramsay]
    Signed-off-by: Ævar Arnfjörð Bjarmason <>
    Signed-off-by: Ramsay Jones <>
    Signed-off-by: Junio C Hamano <>
Commits on Aug 8, 2011
  1. @jonseymour @gitster

    gettext: add gettextln, eval_gettextln to encode common idiom

    jonseymour authored gitster committed
    Currently, if you want to use gettext or eval_gettext to format a message
    you may have to add a separate echo statement and a surrounding subshell
    in order to interpolate the required trailing new line.
    This patch introduces two new helper functions, gettextln and eval_gettextln
    which append a trailing newline to the gettext output.
    This allows constructions of the form:
    	if test -s "$GIT_DIR/BISECT_START"
    			gettext "You need to give me at least one good and one bad revisions.
    (You can use \"git bisect bad\" and \"git bisect good\" for that.)" &&
    		) >&2
    to be expressed more concisely as:
    	if test -s "$GIT_DIR/BISECT_START"
    		gettextln "You need to give me at least one good and one bad revisions.
    (You can use \"git bisect bad\" and \"git bisect good\" for that.)" >&2
    Acked-by: Ævar Arnfjörð Bjarmason <>
    Signed-off-by: Jon Seymour <>
    Signed-off-by: Junio C Hamano <>
Commits on May 15, 2011
  1. @avar @gitster add GIT_GETTEXT_POISON support

    avar authored gitster committed
    Change to support the GIT_GETTEXT_POISON environment
    variable like gettext.c does, this ensures that tests that use will fail under GETTEXT_POISON=YesPlease if they rely
    on Git's C locale messages without declaring that they do.
    Signed-off-by: Ævar Arnfjörð Bjarmason <>
    Signed-off-by: Junio C Hamano <>
  2. @avar @gitster add no-op gettext() and eval_gettext() wrappers

    avar authored gitster committed
    Add a no-op wrapper library for Git's shell scripts. To split up the
    gettext series I'm first submitting patches to gettextize the source
    tree before I add any of the Makefile and Shell library changes needed
    to actually use them.
    Signed-off-by: Ævar Arnfjörð Bjarmason <>
    Signed-off-by: Junio C Hamano <>
Something went wrong with that request. Please try again.