Merge branch 'bp/rename-test-env-var'
authorJunio C Hamano <gitster@pobox.com>
Fri, 19 Oct 2018 04:34:03 +0000 (13:34 +0900)
committerJunio C Hamano <gitster@pobox.com>
Fri, 19 Oct 2018 04:34:03 +0000 (13:34 +0900)
Some environment variables that control the runtime options of Git
used during tests are getting renamed for consistency.

* bp/rename-test-env-var:
t0000: do not get self-test disrupted by environment warnings
preload-index: update GIT_FORCE_PRELOAD_TEST support
read-cache: update TEST_GIT_INDEX_VERSION support
fsmonitor: update GIT_TEST_FSMONITOR support
preload-index: use git_env_bool() not getenv() for customization
t/README: correct spelling of "uncommon"

1  2 
Makefile
preload-index.c
t/README
t/t0000-basic.sh
t/t1700-split-index.sh
t/t7519-status-fsmonitor.sh
t/test-lib.sh
diff --combined Makefile
index 5bf1af369ec46421c68b9194bbb9938e2ba2933f,9e84ef02f7cf72c039aad3187e3fca327d52ef9b..d18ab0fe78d7a9ffdfa4068bf9ffbe5d79a56434
+++ b/Makefile
@@@ -400,7 -400,7 +400,7 @@@ all:
  # (defaults to "man") if you want to have a different default when
  # "git help" is called without a parameter specifying the format.
  #
- # Define TEST_GIT_INDEX_VERSION to 2, 3 or 4 to run the test suite
+ # Define GIT_TEST_INDEX_VERSION to 2, 3 or 4 to run the test suite
  # with a different indexfile format version.  If it isn't set the index
  # file format used is index-v[23].
  #
@@@ -709,9 -709,7 +709,9 @@@ TEST_BUILTINS_OBJS += test-date.
  TEST_BUILTINS_OBJS += test-delta.o
  TEST_BUILTINS_OBJS += test-drop-caches.o
  TEST_BUILTINS_OBJS += test-dump-cache-tree.o
 +TEST_BUILTINS_OBJS += test-dump-fsmonitor.o
  TEST_BUILTINS_OBJS += test-dump-split-index.o
 +TEST_BUILTINS_OBJS += test-dump-untracked-cache.o
  TEST_BUILTINS_OBJS += test-example-decorate.o
  TEST_BUILTINS_OBJS += test-genrandom.o
  TEST_BUILTINS_OBJS += test-hashmap.o
@@@ -722,21 -720,17 +722,21 @@@ TEST_BUILTINS_OBJS += test-match-trees.
  TEST_BUILTINS_OBJS += test-mergesort.o
  TEST_BUILTINS_OBJS += test-mktemp.o
  TEST_BUILTINS_OBJS += test-online-cpus.o
 +TEST_BUILTINS_OBJS += test-parse-options.o
  TEST_BUILTINS_OBJS += test-path-utils.o
 +TEST_BUILTINS_OBJS += test-pkt-line.o
  TEST_BUILTINS_OBJS += test-prio-queue.o
 +TEST_BUILTINS_OBJS += test-reach.o
  TEST_BUILTINS_OBJS += test-read-cache.o
 +TEST_BUILTINS_OBJS += test-read-midx.o
  TEST_BUILTINS_OBJS += test-ref-store.o
  TEST_BUILTINS_OBJS += test-regex.o
  TEST_BUILTINS_OBJS += test-repository.o
  TEST_BUILTINS_OBJS += test-revision-walking.o
  TEST_BUILTINS_OBJS += test-run-command.o
  TEST_BUILTINS_OBJS += test-scrap-cache-tree.o
 -TEST_BUILTINS_OBJS += test-sha1-array.o
  TEST_BUILTINS_OBJS += test-sha1.o
 +TEST_BUILTINS_OBJS += test-sha1-array.o
  TEST_BUILTINS_OBJS += test-sigchain.o
  TEST_BUILTINS_OBJS += test-strcmp-offset.o
  TEST_BUILTINS_OBJS += test-string-list.o
@@@ -744,13 -738,14 +744,13 @@@ TEST_BUILTINS_OBJS += test-submodule-co
  TEST_BUILTINS_OBJS += test-subprocess.o
  TEST_BUILTINS_OBJS += test-urlmatch-normalization.o
  TEST_BUILTINS_OBJS += test-wildmatch.o
 +TEST_BUILTINS_OBJS += test-windows-named-pipe.o
  TEST_BUILTINS_OBJS += test-write-cache.o
  
 -TEST_PROGRAMS_NEED_X += test-dump-fsmonitor
 -TEST_PROGRAMS_NEED_X += test-dump-untracked-cache
 +# Do not add more tests here unless they have extra dependencies. Add
 +# them in TEST_BUILTINS_OBJS above.
  TEST_PROGRAMS_NEED_X += test-fake-ssh
  TEST_PROGRAMS_NEED_X += test-line-buffer
 -TEST_PROGRAMS_NEED_X += test-parse-options
 -TEST_PROGRAMS_NEED_X += test-pkt-line
  TEST_PROGRAMS_NEED_X += test-svn-fe
  TEST_PROGRAMS_NEED_X += test-tool
  
@@@ -840,7 -835,6 +840,7 @@@ LIB_OBJS += column.
  LIB_OBJS += combine-diff.o
  LIB_OBJS += commit.o
  LIB_OBJS += commit-graph.o
 +LIB_OBJS += commit-reach.o
  LIB_OBJS += compat/obstack.o
  LIB_OBJS += compat/terminal.o
  LIB_OBJS += config.o
@@@ -853,7 -847,6 +853,7 @@@ LIB_OBJS += csum-file.
  LIB_OBJS += ctype.o
  LIB_OBJS += date.o
  LIB_OBJS += decorate.o
 +LIB_OBJS += delta-islands.o
  LIB_OBJS += diffcore-break.o
  LIB_OBJS += diffcore-delta.o
  LIB_OBJS += diffcore-order.o
@@@ -887,7 -880,6 +887,7 @@@ LIB_OBJS += linear-assignment.
  LIB_OBJS += help.o
  LIB_OBJS += hex.o
  LIB_OBJS += ident.o
 +LIB_OBJS += interdiff.o
  LIB_OBJS += json-writer.o
  LIB_OBJS += kwset.o
  LIB_OBJS += levenshtein.o
@@@ -908,7 -900,6 +908,7 @@@ LIB_OBJS += merge.
  LIB_OBJS += merge-blobs.o
  LIB_OBJS += merge-recursive.o
  LIB_OBJS += mergesort.o
 +LIB_OBJS += midx.o
  LIB_OBJS += name-hash.o
  LIB_OBJS += negotiator/default.o
  LIB_OBJS += negotiator/skipping.o
@@@ -1069,7 -1060,6 +1069,7 @@@ BUILTIN_OBJS += builtin/merge-recursive
  BUILTIN_OBJS += builtin/merge-tree.o
  BUILTIN_OBJS += builtin/mktag.o
  BUILTIN_OBJS += builtin/mktree.o
 +BUILTIN_OBJS += builtin/multi-pack-index.o
  BUILTIN_OBJS += builtin/mv.o
  BUILTIN_OBJS += builtin/name-rev.o
  BUILTIN_OBJS += builtin/notes.o
@@@ -1796,7 -1786,6 +1796,7 @@@ ifndef 
        QUIET_MSGFMT   = @echo '   ' MSGFMT $@;
        QUIET_GCOV     = @echo '   ' GCOV $@;
        QUIET_SP       = @echo '   ' SP $<;
 +      QUIET_HDR      = @echo '   ' HDR $<;
        QUIET_RC       = @echo '   ' RC $@;
        QUIET_SUBDIR0  = +@subdir=
        QUIET_SUBDIR1  = ;$(NO_SUBDIR) echo '   ' SUBDIR $$subdir; \
@@@ -2610,8 -2599,8 +2610,8 @@@ endi
  ifdef GIT_INTEROP_MAKE_OPTS
        @echo GIT_INTEROP_MAKE_OPTS=\''$(subst ','\'',$(subst ','\'',$(GIT_INTEROP_MAKE_OPTS)))'\' >>$@+
  endif
- ifdef TEST_GIT_INDEX_VERSION
-       @echo TEST_GIT_INDEX_VERSION=\''$(subst ','\'',$(subst ','\'',$(TEST_GIT_INDEX_VERSION)))'\' >>$@+
+ ifdef GIT_TEST_INDEX_VERSION
+       @echo GIT_TEST_INDEX_VERSION=\''$(subst ','\'',$(subst ','\'',$(GIT_TEST_INDEX_VERSION)))'\' >>$@+
  endif
        @if cmp $@+ $@ >/dev/null 2>&1; then $(RM) $@+; else mv $@+ $@; fi
  
@@@ -2679,17 -2668,6 +2679,17 @@@ $(SP_OBJ): %.sp: %.c GIT-CFLAGS FORC
  .PHONY: sparse $(SP_OBJ)
  sparse: $(SP_OBJ)
  
 +GEN_HDRS := command-list.h unicode-width.h
 +EXCEPT_HDRS := $(GEN_HDRS) compat% xdiff%
 +CHK_HDRS = $(filter-out $(EXCEPT_HDRS),$(patsubst ./%,%,$(LIB_H)))
 +HCO = $(patsubst %.h,%.hco,$(CHK_HDRS))
 +
 +$(HCO): %.hco: %.h FORCE
 +      $(QUIET_HDR)$(CC) -include git-compat-util.h -I. -o /dev/null -c -xc $<
 +
 +.PHONY: hdr-check $(HCO)
 +hdr-check: $(HCO)
 +
  .PHONY: style
  style:
        git clang-format --style file --diff --extensions c,h
diff --combined preload-index.c
index f7365761f4725d6f7ddbb6d8c9c8fe92488de6ce,a850e197c29db6bdffe7c167329e1ee12842ae50..16dc5ad868ff0d69a49a30d9130779997267c63b
@@@ -5,6 -5,7 +5,7 @@@
  #include "pathspec.h"
  #include "dir.h"
  #include "fsmonitor.h"
+ #include "config.h"
  
  #ifdef NO_PTHREADS
  static void preload_index(struct index_state *index,
@@@ -78,16 -79,16 +79,16 @@@ static void preload_index(struct index_
  {
        int threads, i, work, offset;
        struct thread_data data[MAX_PARALLEL];
 -      uint64_t start = getnanotime();
  
        if (!core_preload_index)
                return;
  
        threads = index->cache_nr / THREAD_COST;
-       if ((index->cache_nr > 1) && (threads < 2) && getenv("GIT_FORCE_PRELOAD_TEST"))
+       if ((index->cache_nr > 1) && (threads < 2) && git_env_bool("GIT_TEST_PRELOAD_INDEX", 0))
                threads = 2;
        if (threads < 2)
                return;
 +      trace_performance_enter();
        if (threads > MAX_PARALLEL)
                threads = MAX_PARALLEL;
        offset = 0;
                if (pthread_join(p->pthread, NULL))
                        die("unable to join threaded lstat");
        }
 -      trace_performance_since(start, "preload index");
 +      trace_performance_leave("preload index");
  }
  #endif
  
diff --combined t/README
index 4d8dbc7c5f5800bb838a09a8ca87fab8a3de72ab,5670c7aad0ad10dcc55c8a6923b19a362c365776..d8b04c35c01344534776a01e85b7f5f4f988cc62
+++ b/t/README
@@@ -315,18 -315,21 +315,29 @@@ packs on demand. This normally only hap
  over 2GB. This variable forces the code path on any object larger than
  <n> bytes.
  
- GIT_TEST_OE_DELTA_SIZE=<n> exercises the uncomon pack-objects code
+ GIT_TEST_OE_DELTA_SIZE=<n> exercises the uncommon pack-objects code
  path where deltas larger than this limit require extra memory
  allocation for bookkeeping.
  
 +GIT_TEST_VALIDATE_INDEX_CACHE_ENTRIES=<boolean> checks that cache-tree
 +records are valid when the index is written out or after a merge. This
 +is mostly to catch missing invalidation. Default is true.
 +
 +GIT_TEST_COMMIT_GRAPH=<boolean>, when true, forces the commit-graph to
 +be written after every 'git commit' command, and overrides the
 +'core.commitGraph' setting to true.
 +
+ GIT_TEST_FSMONITOR=$PWD/t7519/fsmonitor-all exercises the fsmonitor
+ code path for utilizing a file system monitor to speed up detecting
+ new or changed files.
+ GIT_TEST_INDEX_VERSION=<n> exercises the index read/write code path
+ for the index version specified.  Can be set to any valid version
+ (currently 2, 3, or 4).
+ GIT_TEST_PRELOAD_INDEX=<boolean> exercises the preload-index code path
+ by overriding the minimum number of cache entries required per thread.
  Naming Tests
  ------------
  
@@@ -401,13 -404,13 +412,13 @@@ This test harness library does the foll
     consistently when command line arguments --verbose (or -v),
     --debug (or -d), and --immediate (or -i) is given.
  
 -Do's, don'ts & things to keep in mind
 --------------------------------------
 +Do's & don'ts
 +-------------
  
  Here are a few examples of things you probably should and shouldn't do
  when writing tests.
  
 -Do:
 +Here are the "do's:"
  
   - Put all code inside test_expect_success and other assertions.
  
     Windows, where the shell (MSYS bash) mangles absolute path names.
     For details, see the commit message of 4114156ae9.
  
 -Don't:
 + - Remember that inside the <script> part, the standard output and
 +   standard error streams are discarded, and the test harness only
 +   reports "ok" or "not ok" to the end user running the tests. Under
 +   --verbose, they are shown to help debug the tests.
  
 - - exit() within a <script> part.
 +And here are the "don'ts:"
 +
 + - Don't exit() within a <script> part.
  
     The harness will catch this as a programming error of the test.
     Use test_done instead if you need to stop the tests early (see
     "Skipping tests" below).
  
 - - use '! git cmd' when you want to make sure the git command exits
 -   with failure in a controlled way by calling "die()".  Instead,
 + - Don't use '! git cmd' when you want to make sure the git command
 +   exits with failure in a controlled way by calling "die()".  Instead,
     use 'test_must_fail git cmd'.  This will signal a failure if git
     dies in an unexpected way (e.g. segfault).
  
     platform commands; just use '! cmd'.  We are not in the business
     of verifying that the world given to us sanely works.
  
 - - use perl without spelling it as "$PERL_PATH". This is to help our
 -   friends on Windows where the platform Perl often adds CR before
 + - Don't feed the output of a git command to a pipe, as in:
 +
 +     git -C repo ls-files |
 +     xargs -n 1 basename |
 +     grep foo
 +
 +   which will discard git's exit code and may mask a crash. In the
 +   above example, all exit codes are ignored except grep's.
 +
 +   Instead, write the output of that command to a temporary
 +   file with ">" or assign it to a variable with "x=$(git ...)" rather
 +   than pipe it.
 +
 + - Don't use command substitution in a way that discards git's exit
 +   code. When assigning to a variable, the exit code is not discarded,
 +   e.g.:
 +
 +     x=$(git cat-file -p $sha) &&
 +     ...
 +
 +   is OK because a crash in "git cat-file" will cause the "&&" chain
 +   to fail, but:
 +
 +     test "refs/heads/foo" = "$(git symbolic-ref HEAD)"
 +
 +   is not OK and a crash in git could go undetected.
 +
 + - Don't use perl without spelling it as "$PERL_PATH". This is to help
 +   our friends on Windows where the platform Perl often adds CR before
     the end of line, and they bundle Git with a version of Perl that
     does not do so, whose path is specified with $PERL_PATH. Note that we
     provide a "perl" function which uses $PERL_PATH under the hood, so
     (but you do, for example, on a shebang line or in a sub script
     created via "write_script").
  
 - - use sh without spelling it as "$SHELL_PATH", when the script can
 -   be misinterpreted by broken platform shell (e.g. Solaris).
 + - Don't use sh without spelling it as "$SHELL_PATH", when the script
 +   can be misinterpreted by broken platform shell (e.g. Solaris).
  
 - - chdir around in tests.  It is not sufficient to chdir to
 + - Don't chdir around in tests.  It is not sufficient to chdir to
     somewhere and then chdir back to the original location later in
     the test, as any intermediate step can fail and abort the test,
     causing the next test to start in an unexpected directory.  Do so
     inside a subshell if necessary.
  
 - - save and verify the standard error of compound commands, i.e. group
 -   commands, subshells, and shell functions (except test helper
 + - Don't save and verify the standard error of compound commands, i.e.
 +   group commands, subshells, and shell functions (except test helper
     functions like 'test_must_fail') like this:
  
       ( cd dir && git cmd ) 2>error &&
       ( cd dir && git cmd 2>../error ) &&
       test_cmp expect error
  
 - - Break the TAP output
 + - Don't break the TAP output
  
     The raw output from your test may be interpreted by a TAP harness. TAP
     harnesses will ignore everything they don't know about, but don't step
     but the best indication is to just run the tests with prove(1),
     it'll complain if anything is amiss.
  
 -Keep in mind:
 -
 - - Inside the <script> part, the standard output and standard error
 -   streams are discarded, and the test harness only reports "ok" or
 -   "not ok" to the end user running the tests. Under --verbose, they
 -   are shown to help debugging the tests.
 -
  
  Skipping tests
  --------------
@@@ -839,28 -817,6 +850,28 @@@ library for your script to use
     the symbolic link in the file system and a part that does; then only
     the latter part need be protected by a SYMLINKS prerequisite (see below).
  
 + - test_oid_init
 +
 +   This function loads facts and useful object IDs related to the hash
 +   algorithm(s) in use from the files in t/oid-info.
 +
 + - test_oid_cache
 +
 +   This function reads per-hash algorithm information from standard
 +   input (usually a heredoc) in the format described in
 +   t/oid-info/README.  This is useful for test-specific values, such as
 +   object IDs, which must vary based on the hash algorithm.
 +
 +   Certain fixed values, such as hash sizes and common placeholder
 +   object IDs, can be loaded with test_oid_init (described above).
 +
 + - test_oid <key>
 +
 +   This function looks up a value for the hash algorithm in use, based
 +   on the key given.  The value must have been loaded using
 +   test_oid_init or test_oid_cache.  Providing an unknown key is an
 +   error.
 +
  Prerequisites
  -------------
  
diff --combined t/t0000-basic.sh
index 26601e698bd3abebd2e1f10ba6012f80c65ffa85,52c02b7c7e067c1de41bd0b37eed436201f1f178..4d23373526945eea7bc4e875beac5fdc4451cac8
@@@ -87,6 -87,10 +87,10 @@@ _run_sub_test_lib_test_common () 
                passing metrics
                '
  
+               # Tell the framework that we are self-testing to make sure
+               # it yields a stable result.
+               GIT_TEST_FRAMEWORK_SELFTEST=t &&
                # Point to the t/test-lib.sh, which isn't in ../ as usual
                . "\$TEST_DIRECTORY"/test-lib.sh
                EOF
@@@ -821,87 -825,9 +825,87 @@@ test_expect_success 'tests clean up eve
        EOF
  "
  
 +test_expect_success 'test_oid setup' '
 +      test_oid_init
 +'
 +
 +test_expect_success 'test_oid provides sane info by default' '
 +      test_oid zero >actual &&
 +      grep "^00*\$" actual &&
 +      rawsz="$(test_oid rawsz)" &&
 +      hexsz="$(test_oid hexsz)" &&
 +      test "$hexsz" -eq $(wc -c <actual) &&
 +      test $(( $rawsz * 2)) -eq "$hexsz"
 +'
 +
 +test_expect_success 'test_oid can look up data for SHA-1' '
 +      test_when_finished "test_detect_hash" &&
 +      test_set_hash sha1 &&
 +      test_oid zero >actual &&
 +      grep "^00*\$" actual &&
 +      rawsz="$(test_oid rawsz)" &&
 +      hexsz="$(test_oid hexsz)" &&
 +      test $(wc -c <actual) -eq 40 &&
 +      test "$rawsz" -eq 20 &&
 +      test "$hexsz" -eq 40
 +'
 +
 +test_expect_success 'test_oid can look up data for SHA-256' '
 +      test_when_finished "test_detect_hash" &&
 +      test_set_hash sha256 &&
 +      test_oid zero >actual &&
 +      grep "^00*\$" actual &&
 +      rawsz="$(test_oid rawsz)" &&
 +      hexsz="$(test_oid hexsz)" &&
 +      test $(wc -c <actual) -eq 64 &&
 +      test "$rawsz" -eq 32 &&
 +      test "$hexsz" -eq 64
 +'
 +
  ################################################################
  # Basics of the basics
  
 +test_oid_cache <<\EOF
 +path0f sha1:f87290f8eb2cbbea7857214459a0739927eab154
 +path0f sha256:638106af7c38be056f3212cbd7ac65bc1bac74f420ca5a436ff006a9d025d17d
 +
 +path0s sha1:15a98433ae33114b085f3eb3bb03b832b3180a01
 +path0s sha256:3a24cc53cf68edddac490bbf94a418a52932130541361f685df685e41dd6c363
 +
 +path2f sha1:3feff949ed00a62d9f7af97c15cd8a30595e7ac7
 +path2f sha256:2a7f36571c6fdbaf0e3f62751a0b25a3f4c54d2d1137b3f4af9cb794bb498e5f
 +
 +path2s sha1:d8ce161addc5173867a3c3c730924388daedbc38
 +path2s sha256:18fd611b787c2e938ddcc248fabe4d66a150f9364763e9ec133dd01d5bb7c65a
 +
 +path2d sha1:58a09c23e2ca152193f2786e06986b7b6712bdbe
 +path2d sha256:00e4b32b96e7e3d65d79112dcbea53238a22715f896933a62b811377e2650c17
 +
 +path3f sha1:0aa34cae68d0878578ad119c86ca2b5ed5b28376
 +path3f sha256:09f58616b951bd571b8cb9dc76d372fbb09ab99db2393f5ab3189d26c45099ad
 +
 +path3s sha1:8599103969b43aff7e430efea79ca4636466794f
 +path3s sha256:fce1aed087c053306f3f74c32c1a838c662bbc4551a7ac2420f5d6eb061374d0
 +
 +path3d sha1:21ae8269cacbe57ae09138dcc3a2887f904d02b3
 +path3d sha256:9b60497be959cb830bf3f0dc82bcc9ad9e925a24e480837ade46b2295e47efe1
 +
 +subp3f sha1:00fb5908cb97c2564a9783c0c64087333b3b464f
 +subp3f sha256:a1a9e16998c988453f18313d10375ee1d0ddefe757e710dcae0d66aa1e0c58b3
 +
 +subp3s sha1:6649a1ebe9e9f1c553b66f5a6e74136a07ccc57c
 +subp3s sha256:81759d9f5e93c6546ecfcadb560c1ff057314b09f93fe8ec06e2d8610d34ef10
 +
 +subp3d sha1:3c5e5399f3a333eddecce7a9b9465b63f65f51e2
 +subp3d sha256:76b4ef482d4fa1c754390344cf3851c7f883b27cf9bc999c6547928c46aeafb7
 +
 +root sha1:087704a96baf1c2d1c869a8b084481e121c88b5b
 +root sha256:9481b52abab1b2ffeedbf9de63ce422b929f179c1b98ff7bee5f8f1bc0710751
 +
 +simpletree sha1:7bb943559a305bdd6bdee2cef6e5df2413c3d30a
 +simpletree sha256:1710c07a6c86f9a3c7376364df04c47ee39e5a5e221fcdd84b743bc9bb7e2bc5
 +EOF
 +
  # updating a new file without --add should fail.
  test_expect_success 'git update-index without --add should fail adding' '
        test_must_fail git update-index should-be-empty
@@@ -917,8 -843,8 +921,8 @@@ test_expect_success 'writing tree out w
  '
  
  # we know the shape and contents of the tree and know the object ID for it.
 -test_expect_success SHA1 'validate object ID of a known tree' '
 -      test "$tree" = 7bb943559a305bdd6bdee2cef6e5df2413c3d30a
 +test_expect_success 'validate object ID of a known tree' '
 +      test "$tree" = "$(test_oid simpletree)"
      '
  
  # Removing paths.
@@@ -960,16 -886,16 +964,16 @@@ test_expect_success 'showing stage wit
        git ls-files --stage >current
  '
  
 -test_expect_success SHA1 'validate git ls-files output for a known tree' '
 -      cat >expected <<-\EOF &&
 -      100644 f87290f8eb2cbbea7857214459a0739927eab154 0       path0
 -      120000 15a98433ae33114b085f3eb3bb03b832b3180a01 0       path0sym
 -      100644 3feff949ed00a62d9f7af97c15cd8a30595e7ac7 0       path2/file2
 -      120000 d8ce161addc5173867a3c3c730924388daedbc38 0       path2/file2sym
 -      100644 0aa34cae68d0878578ad119c86ca2b5ed5b28376 0       path3/file3
 -      120000 8599103969b43aff7e430efea79ca4636466794f 0       path3/file3sym
 -      100644 00fb5908cb97c2564a9783c0c64087333b3b464f 0       path3/subp3/file3
 -      120000 6649a1ebe9e9f1c553b66f5a6e74136a07ccc57c 0       path3/subp3/file3sym
 +test_expect_success 'validate git ls-files output for a known tree' '
 +      cat >expected <<-EOF &&
 +      100644 $(test_oid path0f) 0     path0
 +      120000 $(test_oid path0s) 0     path0sym
 +      100644 $(test_oid path2f) 0     path2/file2
 +      120000 $(test_oid path2s) 0     path2/file2sym
 +      100644 $(test_oid path3f) 0     path3/file3
 +      120000 $(test_oid path3s) 0     path3/file3sym
 +      100644 $(test_oid subp3f) 0     path3/subp3/file3
 +      120000 $(test_oid subp3s) 0     path3/subp3/file3sym
        EOF
        test_cmp expected current
  '
@@@ -978,20 -904,20 +982,20 @@@ test_expect_success 'writing tree out w
        tree=$(git write-tree)
  '
  
 -test_expect_success SHA1 'validate object ID for a known tree' '
 -      test "$tree" = 087704a96baf1c2d1c869a8b084481e121c88b5b
 +test_expect_success 'validate object ID for a known tree' '
 +      test "$tree" = "$(test_oid root)"
  '
  
  test_expect_success 'showing tree with git ls-tree' '
      git ls-tree $tree >current
  '
  
 -test_expect_success SHA1 'git ls-tree output for a known tree' '
 -      cat >expected <<-\EOF &&
 -      100644 blob f87290f8eb2cbbea7857214459a0739927eab154    path0
 -      120000 blob 15a98433ae33114b085f3eb3bb03b832b3180a01    path0sym
 -      040000 tree 58a09c23e2ca152193f2786e06986b7b6712bdbe    path2
 -      040000 tree 21ae8269cacbe57ae09138dcc3a2887f904d02b3    path3
 +test_expect_success 'git ls-tree output for a known tree' '
 +      cat >expected <<-EOF &&
 +      100644 blob $(test_oid path0f)  path0
 +      120000 blob $(test_oid path0s)  path0sym
 +      040000 tree $(test_oid path2d)  path2
 +      040000 tree $(test_oid path3d)  path3
        EOF
        test_cmp expected current
  '
@@@ -1002,16 -928,16 +1006,16 @@@ test_expect_success 'showing tree with 
        git ls-tree -r $tree >current
  '
  
 -test_expect_success SHA1 'git ls-tree -r output for a known tree' '
 -      cat >expected <<-\EOF &&
 -      100644 blob f87290f8eb2cbbea7857214459a0739927eab154    path0
 -      120000 blob 15a98433ae33114b085f3eb3bb03b832b3180a01    path0sym
 -      100644 blob 3feff949ed00a62d9f7af97c15cd8a30595e7ac7    path2/file2
 -      120000 blob d8ce161addc5173867a3c3c730924388daedbc38    path2/file2sym
 -      100644 blob 0aa34cae68d0878578ad119c86ca2b5ed5b28376    path3/file3
 -      120000 blob 8599103969b43aff7e430efea79ca4636466794f    path3/file3sym
 -      100644 blob 00fb5908cb97c2564a9783c0c64087333b3b464f    path3/subp3/file3
 -      120000 blob 6649a1ebe9e9f1c553b66f5a6e74136a07ccc57c    path3/subp3/file3sym
 +test_expect_success 'git ls-tree -r output for a known tree' '
 +      cat >expected <<-EOF &&
 +      100644 blob $(test_oid path0f)  path0
 +      120000 blob $(test_oid path0s)  path0sym
 +      100644 blob $(test_oid path2f)  path2/file2
 +      120000 blob $(test_oid path2s)  path2/file2sym
 +      100644 blob $(test_oid path3f)  path3/file3
 +      120000 blob $(test_oid path3s)  path3/file3sym
 +      100644 blob $(test_oid subp3f)  path3/subp3/file3
 +      120000 blob $(test_oid subp3s)  path3/subp3/file3sym
        EOF
        test_cmp expected current
  '
@@@ -1021,19 -947,19 +1025,19 @@@ test_expect_success 'showing tree with 
        git ls-tree -r -t $tree >current
  '
  
 -test_expect_success SHA1 'git ls-tree -r output for a known tree' '
 -      cat >expected <<-\EOF &&
 -      100644 blob f87290f8eb2cbbea7857214459a0739927eab154    path0
 -      120000 blob 15a98433ae33114b085f3eb3bb03b832b3180a01    path0sym
 -      040000 tree 58a09c23e2ca152193f2786e06986b7b6712bdbe    path2
 -      100644 blob 3feff949ed00a62d9f7af97c15cd8a30595e7ac7    path2/file2
 -      120000 blob d8ce161addc5173867a3c3c730924388daedbc38    path2/file2sym
 -      040000 tree 21ae8269cacbe57ae09138dcc3a2887f904d02b3    path3
 -      100644 blob 0aa34cae68d0878578ad119c86ca2b5ed5b28376    path3/file3
 -      120000 blob 8599103969b43aff7e430efea79ca4636466794f    path3/file3sym
 -      040000 tree 3c5e5399f3a333eddecce7a9b9465b63f65f51e2    path3/subp3
 -      100644 blob 00fb5908cb97c2564a9783c0c64087333b3b464f    path3/subp3/file3
 -      120000 blob 6649a1ebe9e9f1c553b66f5a6e74136a07ccc57c    path3/subp3/file3sym
 +test_expect_success 'git ls-tree -r output for a known tree' '
 +      cat >expected <<-EOF &&
 +      100644 blob $(test_oid path0f)  path0
 +      120000 blob $(test_oid path0s)  path0sym
 +      040000 tree $(test_oid path2d)  path2
 +      100644 blob $(test_oid path2f)  path2/file2
 +      120000 blob $(test_oid path2s)  path2/file2sym
 +      040000 tree $(test_oid path3d)  path3
 +      100644 blob $(test_oid path3f)  path3/file3
 +      120000 blob $(test_oid path3s)  path3/file3sym
 +      040000 tree $(test_oid subp3d)  path3/subp3
 +      100644 blob $(test_oid subp3f)  path3/subp3/file3
 +      120000 blob $(test_oid subp3s)  path3/subp3/file3sym
        EOF
        test_cmp expected current
  '
@@@ -1042,27 -968,26 +1046,27 @@@ test_expect_success 'writing partial tr
        ptree=$(git write-tree --prefix=path3)
  '
  
 -test_expect_success SHA1 'validate object ID for a known tree' '
 -      test "$ptree" = 21ae8269cacbe57ae09138dcc3a2887f904d02b3
 +test_expect_success 'validate object ID for a known tree' '
 +      test "$ptree" = $(test_oid path3d)
  '
  
  test_expect_success 'writing partial tree out with git write-tree --prefix' '
        ptree=$(git write-tree --prefix=path3/subp3)
  '
  
 -test_expect_success SHA1 'validate object ID for a known tree' '
 -      test "$ptree" = 3c5e5399f3a333eddecce7a9b9465b63f65f51e2
 +test_expect_success 'validate object ID for a known tree' '
 +      test "$ptree" = $(test_oid subp3d)
  '
  
  test_expect_success 'put invalid objects into the index' '
        rm -f .git/index &&
 -      cat >badobjects <<-\EOF &&
 -      100644 blob 1000000000000000000000000000000000000000    dir/file1
 -      100644 blob 2000000000000000000000000000000000000000    dir/file2
 -      100644 blob 3000000000000000000000000000000000000000    dir/file3
 -      100644 blob 4000000000000000000000000000000000000000    dir/file4
 -      100644 blob 5000000000000000000000000000000000000000    dir/file5
 +      suffix=$(echo $ZERO_OID | sed -e "s/^.//") &&
 +      cat >badobjects <<-EOF &&
 +      100644 blob $(test_oid 001)     dir/file1
 +      100644 blob $(test_oid 002)     dir/file2
 +      100644 blob $(test_oid 003)     dir/file3
 +      100644 blob $(test_oid 004)     dir/file4
 +      100644 blob $(test_oid 005)     dir/file5
        EOF
        git update-index --index-info <badobjects
  '
@@@ -1085,19 -1010,19 +1089,19 @@@ test_expect_success 'git read-tree foll
        test "$newtree" = "$tree"
  '
  
 -test_expect_success SHA1 'validate git diff-files output for a know cache/work tree state' '
 -      cat >expected <<\EOF &&
 -:100644 100644 f87290f8eb2cbbea7857214459a0739927eab154 0000000000000000000000000000000000000000 M    path0
 -:120000 120000 15a98433ae33114b085f3eb3bb03b832b3180a01 0000000000000000000000000000000000000000 M    path0sym
 -:100644 100644 3feff949ed00a62d9f7af97c15cd8a30595e7ac7 0000000000000000000000000000000000000000 M    path2/file2
 -:120000 120000 d8ce161addc5173867a3c3c730924388daedbc38 0000000000000000000000000000000000000000 M    path2/file2sym
 -:100644 100644 0aa34cae68d0878578ad119c86ca2b5ed5b28376 0000000000000000000000000000000000000000 M    path3/file3
 -:120000 120000 8599103969b43aff7e430efea79ca4636466794f 0000000000000000000000000000000000000000 M    path3/file3sym
 -:100644 100644 00fb5908cb97c2564a9783c0c64087333b3b464f 0000000000000000000000000000000000000000 M    path3/subp3/file3
 -:120000 120000 6649a1ebe9e9f1c553b66f5a6e74136a07ccc57c 0000000000000000000000000000000000000000 M    path3/subp3/file3sym
 +test_expect_success 'validate git diff-files output for a know cache/work tree state' '
 +      cat >expected <<EOF &&
 +:100644 100644 $(test_oid path0f) $ZERO_OID M path0
 +:120000 120000 $(test_oid path0s) $ZERO_OID M path0sym
 +:100644 100644 $(test_oid path2f) $ZERO_OID M path2/file2
 +:120000 120000 $(test_oid path2s) $ZERO_OID M path2/file2sym
 +:100644 100644 $(test_oid path3f) $ZERO_OID M path3/file3
 +:120000 120000 $(test_oid path3s) $ZERO_OID M path3/file3sym
 +:100644 100644 $(test_oid subp3f) $ZERO_OID M path3/subp3/file3
 +:120000 120000 $(test_oid subp3s) $ZERO_OID M path3/subp3/file3sym
  EOF
        git diff-files >current &&
 -      test_cmp current expected
 +      test_cmp expected current
  '
  
  test_expect_success 'git update-index --refresh should succeed' '
@@@ -1110,23 -1035,23 +1114,23 @@@ test_expect_success 'no diff after chec
  '
  
  ################################################################
 -P=087704a96baf1c2d1c869a8b084481e121c88b5b
 +P=$(test_oid root)
  
 -test_expect_success SHA1 'git commit-tree records the correct tree in a commit' '
 +test_expect_success 'git commit-tree records the correct tree in a commit' '
        commit0=$(echo NO | git commit-tree $P) &&
        tree=$(git show --pretty=raw $commit0 |
                 sed -n -e "s/^tree //p" -e "/^author /q") &&
        test "z$tree" = "z$P"
  '
  
 -test_expect_success SHA1 'git commit-tree records the correct parent in a commit' '
 +test_expect_success 'git commit-tree records the correct parent in a commit' '
        commit1=$(echo NO | git commit-tree $P -p $commit0) &&
        parent=$(git show --pretty=raw $commit1 |
                sed -n -e "s/^parent //p" -e "/^author /q") &&
        test "z$commit0" = "z$parent"
  '
  
 -test_expect_success SHA1 'git commit-tree omits duplicated parent in a commit' '
 +test_expect_success 'git commit-tree omits duplicated parent in a commit' '
        commit2=$(echo NO | git commit-tree $P -p $commit0 -p $commit0) &&
             parent=$(git show --pretty=raw $commit2 |
                sed -n -e "s/^parent //p" -e "/^author /q" |
diff --combined t/t1700-split-index.sh
index be22398a8545419f3d12d4d48cb636c5273b5206,f6a856f24c8c4c08e7a664041b1b9a9885970b24..8f8807d1c1dc387a153a066153211899415e879f
@@@ -6,7 -6,7 +6,7 @@@ test_description='split index mode test
  
  # We need total control of index splitting here
  sane_unset GIT_TEST_SPLIT_INDEX
- sane_unset GIT_FSMONITOR_TEST
+ sane_unset GIT_TEST_FSMONITOR
  
  test_expect_success 'enable split index' '
        git config splitIndex.maxPercentChange 100 &&
@@@ -57,7 -57,7 +57,7 @@@ test_expect_success 'disable split inde
        EOF
        test_cmp ls-files.expect ls-files.actual &&
  
 -      BASE=$(test-tool dump-split-index .git/index | grep "^own" | sed "s/own/base/") &&
 +      BASE=$(test-tool dump-split-index .git/index | sed -n "s/^own/base/p") &&
        test-tool dump-split-index .git/index | sed "/^own/d" >actual &&
        cat >expect <<-EOF &&
        not a split index
index 8384ad258c359572d83bb38fd69f61ec6fe612e7,3f0dd980106c035329cb640838d91730c20b13fd..3e0a61db2348577ed5c6cef4f844c2a26548de1d
@@@ -4,13 -4,6 +4,6 @@@ test_description='git status with file 
  
  . ./test-lib.sh
  
- #
- # To run the entire git test suite using fsmonitor:
- #
- # copy t/t7519/fsmonitor-all to a location in your path and then set
- # GIT_FSMONITOR_TEST=fsmonitor-all and run your tests.
- #
  # Note, after "git reset --hard HEAD" no extensions exist other than 'TREE'
  # "git update-index --fsmonitor" can be used to get the extension written
  # before testing the results.
@@@ -84,21 -77,21 +77,21 @@@ test_expect_success 'setup' 
  
  # test that the fsmonitor extension is off by default
  test_expect_success 'fsmonitor extension is off by default' '
 -      test-dump-fsmonitor >actual &&
 +      test-tool dump-fsmonitor >actual &&
        grep "^no fsmonitor" actual
  '
  
  # test that "update-index --fsmonitor" adds the fsmonitor extension
  test_expect_success 'update-index --fsmonitor" adds the fsmonitor extension' '
        git update-index --fsmonitor &&
 -      test-dump-fsmonitor >actual &&
 +      test-tool dump-fsmonitor >actual &&
        grep "^fsmonitor last update" actual
  '
  
  # test that "update-index --no-fsmonitor" removes the fsmonitor extension
  test_expect_success 'update-index --no-fsmonitor" removes the fsmonitor extension' '
        git update-index --no-fsmonitor &&
 -      test-dump-fsmonitor >actual &&
 +      test-tool dump-fsmonitor >actual &&
        grep "^no fsmonitor" actual
  '
  
@@@ -245,9 -238,9 +238,9 @@@ d
                git config core.preloadIndex $preload_val &&
                if test $preload_val = true
                then
-                       GIT_FORCE_PRELOAD_TEST=$preload_val; export GIT_FORCE_PRELOAD_TEST
+                       GIT_TEST_PRELOAD_INDEX=$preload_val; export GIT_TEST_PRELOAD_INDEX
                else
-                       unset GIT_FORCE_PRELOAD_TEST
+                       sane_unset GIT_TEST_PRELOAD_INDEX
                fi
        '
  
@@@ -307,9 -300,9 +300,9 @@@ test_expect_success 'splitting the inde
        dirty_repo &&
        git update-index --fsmonitor  &&
        git ls-files -f >expect &&
 -      test-dump-fsmonitor >&2 && echo &&
 +      test-tool dump-fsmonitor >&2 && echo &&
        git update-index --fsmonitor --split-index &&
 -      test-dump-fsmonitor >&2 && echo &&
 +      test-tool dump-fsmonitor >&2 && echo &&
        git ls-files -f >actual &&
        test_cmp expect actual
  '
@@@ -333,7 -326,7 +326,7 @@@ test_expect_success UNTRACKED_CACHE 'ig
                git update-index --fsmonitor &&
                GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace-before" \
                git status &&
 -              test-dump-untracked-cache >../before
 +              test-tool dump-untracked-cache >../before
        ) &&
        cat >>dot-git/.git/hooks/fsmonitor-test <<-\EOF &&
        printf ".git\0"
                cd dot-git &&
                GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace-after" \
                git status &&
 -              test-dump-untracked-cache >../after
 +              test-tool dump-untracked-cache >../after
        ) &&
        grep "directory invalidation" trace-before >>before &&
        grep "directory invalidation" trace-after >>after &&
diff --combined t/test-lib.sh
index 3f95bfda605f7ad1f9b0b0385ffdc91e5cca415e,364a11ea25c5e3d2321229fba06cfc7200ac6f64..897e6fcc94a195bd8b4493deee411ba9c6ba9f15
@@@ -134,9 -134,40 +134,40 @@@ export EDITO
  GIT_TRACE_BARE=1
  export GIT_TRACE_BARE
  
- if test -n "${TEST_GIT_INDEX_VERSION:+isset}"
+ check_var_migration () {
+       # the warnings and hints given from this helper depends
+       # on end-user settings, which will disrupt the self-test
+       # done on the test framework itself.
+       case "$GIT_TEST_FRAMEWORK_SELFTEST" in
+       t)      return ;;
+       esac
+       old_name=$1 new_name=$2
+       eval "old_isset=\${${old_name}:+isset}"
+       eval "new_isset=\${${new_name}:+isset}"
+       case "$old_isset,$new_isset" in
+       isset,)
+               echo >&2 "warning: $old_name is now $new_name"
+               echo >&2 "hint: set $new_name too during the transition period"
+               eval "$new_name=\$$old_name"
+               ;;
+       isset,isset)
+               # do this later
+               # echo >&2 "warning: $old_name is now $new_name"
+               # echo >&2 "hint: remove $old_name"
+               ;;
+       esac
+ }
+ check_var_migration GIT_FSMONITOR_TEST GIT_TEST_FSMONITOR
+ check_var_migration TEST_GIT_INDEX_VERSION GIT_TEST_INDEX_VERSION
+ check_var_migration GIT_FORCE_PRELOAD_TEST GIT_TEST_PRELOAD_INDEX
+ # Use specific version of the index file format
+ if test -n "${GIT_TEST_INDEX_VERSION:+isset}"
  then
-       GIT_INDEX_VERSION="$TEST_GIT_INDEX_VERSION"
+       GIT_INDEX_VERSION="$GIT_TEST_INDEX_VERSION"
        export GIT_INDEX_VERSION
  fi
  
        test_set_prereq C_LOCALE_OUTPUT
  fi
  
 +if test -z "$GIT_TEST_CHECK_CACHE_TREE"
 +then
 +      GIT_TEST_CHECK_CACHE_TREE=true
 +      export GIT_TEST_CHECK_CACHE_TREE
 +fi
 +
  test_lazy_prereq PIPE '
        # test whether the filesystem supports FIFOs
        test_have_prereq !MINGW,!CYGWIN &&