Ævar Arnfjörð Bjarmason 6cdccfce1e i18n: make GETTEXT_POISON a runtime option
Change the GETTEXT_POISON compile-time + runtime GIT_GETTEXT_POISON
test parameter to only be a GIT_TEST_GETTEXT_POISON=<non-empty?>
runtime parameter, to be consistent with other parameters documented
in "Running tests with special setups" in t/README.

When I added GETTEXT_POISON in bb946bba76 ("i18n: add GETTEXT_POISON
to simulate unfriendly translator", 2011-02-22) I was concerned with
ensuring that the _() function would get constant folded if NO_GETTEXT
was defined, and likewise that GETTEXT_POISON would be compiled out
unless it was defined.

But as the benchmark in my [1] shows doing a one-off runtime
getenv("GIT_TEST_[...]") is trivial, and since GETTEXT_POISON was
originally added the GIT_TEST_* env variables have become the common
idiom for turning on special test setups.

So change GETTEXT_POISON to work the same way. Now the
GETTEXT_POISON=YesPlease compile-time option is gone, and running the
tests with GIT_TEST_GETTEXT_POISON=[YesPlease|] can be toggled on/off
without recompiling.

This allows for conditionally amending tests to test with/without
poison, similar to what 859fdc0c3c ("commit-graph: define
GIT_TEST_COMMIT_GRAPH", 2018-08-29) did for GIT_TEST_COMMIT_GRAPH. Do
some of that, now we e.g. always run the t0205-gettext-poison.sh test.

I did enough there to remove the GETTEXT_POISON prerequisite, but its
inverse C_LOCALE_OUTPUT is still around, and surely some tests using
it can be converted to e.g. always set GIT_TEST_GETTEXT_POISON=.

Notes on the implementation:

 * We still compile a dedicated GETTEXT_POISON build in Travis
   CI. Perhaps this should be revisited and integrated into the
   "linux-gcc" build, see ae59a4e44f ("travis: run tests with
   GIT_TEST_SPLIT_INDEX", 2018-01-07) for prior art in that area. Then
   again maybe not, see [2].

 * We now skip a test in t0000-basic.sh under
   GIT_TEST_GETTEXT_POISON=YesPlease that wasn't skipped before. This
   test relies on C locale output, but due to an edge case in how the
   previous implementation of GETTEXT_POISON worked (reading it from
   GIT-BUILD-OPTIONS) wasn't enabling poison correctly. Now it does,
   and needs to be skipped.

 * The getenv() function is not reentrant, so out of paranoia about
   code of the form:

       printf(_("%s"), getenv("some-env"));

   call use_gettext_poison() in our early setup in git_setup_gettext()
   so we populate the "poison_requested" variable in a codepath that's
   won't suffer from that race condition.

 * We error out in the Makefile if you're still saying
   GETTEXT_POISON=YesPlease to prompt users to change their
   invocation.

 * We should not print out poisoned messages during the test
   initialization itself to keep it more readable, so the test library
   hides the variable if set in $GIT_TEST_GETTEXT_POISON_ORIG during
   setup. See [3].

See also [4] for more on the motivation behind this patch, and the
history of the GETTEXT_POISON facility.

1. https://public-inbox.org/git/871s8gd32p.fsf@evledraar.gmail.com/
2. https://public-inbox.org/git/20181102163725.GY30222@szeder.dev/
3. https://public-inbox.org/git/20181022202241.18629-2-szeder.dev@gmail.com/
4. https://public-inbox.org/git/878t2pd6yu.fsf@evledraar.gmail.com/

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2018-11-09 11:25:19 +09:00
2018-11-02 11:04:59 +09:00
2018-11-02 11:04:59 +09:00
2018-08-02 13:54:58 -07:00
2018-11-02 11:04:53 +09:00
2018-10-16 16:16:01 +09:00
2018-08-20 12:41:32 -07:00
2018-08-20 11:33:53 -07:00
2018-10-19 13:34:02 +09:00
2018-08-20 12:41:32 -07:00
2018-09-12 15:15:34 -07:00
2018-09-12 15:15:34 -07:00
2018-07-26 10:12:51 -07:00
2018-10-19 13:34:02 +09:00
2018-10-19 13:34:02 +09:00
2018-11-02 11:04:53 +09:00
2018-10-19 13:34:02 +09:00
2018-11-02 11:04:53 +09:00
2018-10-19 13:34:02 +09:00
2018-10-30 15:43:47 +09:00
2018-11-02 11:04:55 +09:00
2018-11-02 11:04:55 +09:00
2018-10-19 13:34:03 +09:00
2018-08-29 11:32:49 -07:00
2018-08-20 12:41:32 -07:00
2018-10-19 13:34:02 +09:00
2018-10-19 13:34:02 +09:00
2018-10-19 13:34:02 +09:00
2018-10-19 13:34:02 +09:00
2018-09-17 13:53:57 -07:00
2018-09-17 13:53:57 -07:00
2018-10-30 15:43:48 +09:00
2018-09-27 11:52:33 -07:00
2018-11-02 11:04:53 +09:00
2018-08-20 11:33:50 -07:00
2018-07-16 14:27:39 -07:00
2018-10-19 13:34:02 +09:00
2018-08-29 11:32:49 -07:00
2018-05-30 21:51:28 +09:00
2018-10-30 15:43:39 +09:00
2018-10-19 13:34:02 +09:00
2018-09-17 13:53:57 -07:00
2018-08-29 13:05:35 -07:00
2018-10-19 13:34:02 +09:00
2018-10-19 13:34:02 +09:00
2018-08-29 11:32:49 -07:00
2018-08-20 15:31:40 -07:00
2018-08-29 11:32:49 -07:00
2018-09-17 13:53:52 -07:00
2018-10-04 11:12:14 -07:00
2018-10-04 11:12:14 -07:00
2018-06-01 15:06:37 +09:00
2018-10-19 13:34:02 +09:00
2018-07-18 12:20:28 -07:00
2018-09-17 13:53:54 -07:00
2018-08-15 15:08:23 -07:00
2018-10-19 13:34:02 +09:00
2018-09-17 13:53:52 -07:00
2018-10-30 15:43:39 +09:00
2018-10-30 15:43:39 +09:00
2018-11-02 11:04:53 +09:00
2018-08-20 15:31:40 -07:00
2018-10-19 13:34:02 +09:00
2018-09-17 13:53:57 -07:00
2018-10-19 13:34:02 +09:00
2018-06-01 15:06:37 +09:00
2018-11-02 11:04:54 +09:00
2018-11-02 11:04:54 +09:00
2018-09-27 11:53:39 -07:00
2018-09-17 13:53:54 -07:00
2018-10-19 13:34:02 +09:00
2018-08-02 15:30:39 -07:00
2018-08-15 11:52:09 -07:00
2018-05-30 21:51:28 +09:00
2018-10-19 13:34:02 +09:00
2018-08-15 15:08:25 -07:00
2018-08-20 12:41:32 -07:00
2018-07-18 12:20:28 -07:00
2018-10-19 13:34:02 +09:00

Git - fast, scalable, distributed revision control system

Git is a fast, scalable, distributed revision control system with an unusually rich command set that provides both high-level operations and full access to internals.

Git is an Open Source project covered by the GNU General Public License version 2 (some parts of it are under different licenses, compatible with the GPLv2). It was originally written by Linus Torvalds with help of a group of hackers around the net.

Please read the file INSTALL for installation instructions.

Many Git online resources are accessible from https://git-scm.com/ including full documentation and Git related tools.

See Documentation/gittutorial.txt to get started, then see Documentation/giteveryday.txt for a useful minimum set of commands, and Documentation/git-.txt for documentation of each command. If git has been correctly installed, then the tutorial can also be read with man gittutorial or git help tutorial, and the documentation of each command with man git-<commandname> or git help <commandname>.

CVS users may also want to read Documentation/gitcvs-migration.txt (man gitcvs-migration or git help cvs-migration if git is installed).

The user discussion and development of Git take place on the Git mailing list -- everyone is welcome to post bug reports, feature requests, comments and patches to git@vger.kernel.org (read Documentation/SubmittingPatches for instructions on patch submission). To subscribe to the list, send an email with just "subscribe git" in the body to majordomo@vger.kernel.org. The mailing list archives are available at https://public-inbox.org/git/, http://marc.info/?l=git and other archival sites.

Issues which are security relevant should be disclosed privately to the Git Security mailing list git-security@googlegroups.com.

The maintainer frequently sends the "What's cooking" reports that list the current status of various development topics to the mailing list. The discussion following them give a good reference for project status, development direction and remaining tasks.

The name "git" was given by Linus Torvalds when he wrote the very first version. He described the tool as "the stupid content tracker" and the name as (depending on your mood):

  • random three-letter combination that is pronounceable, and not actually used by any common UNIX command. The fact that it is a mispronunciation of "get" may or may not be relevant.
  • stupid. contemptible and despicable. simple. Take your pick from the dictionary of slang.
  • "global information tracker": you're in a good mood, and it actually works for you. Angels sing, and a light suddenly fills the room.
  • "goddamn idiotic truckload of sh*t": when it breaks
Description
Git Source Code Mirror - This is a publish-only repository but pull requests can be turned into patches to the mailing list via GitGitGadget (https://gitgitgadget.github.io/). Please follow Documentation/SubmittingPatches procedure for any of your improvements.
Readme 734 MiB
Languages
C 50.5%
Shell 38.7%
Perl 4.5%
Tcl 3.2%
Python 0.8%
Other 2.1%