Merge branch 'tb/test-apfs-utf8-normalization'
authorJunio C Hamano <gitster@pobox.com>
Wed, 23 May 2018 05:38:21 +0000 (14:38 +0900)
committerJunio C Hamano <gitster@pobox.com>
Wed, 23 May 2018 05:38:21 +0000 (14:38 +0900)
A test to see if the filesystem normalizes UTF-8 filename has been
updated to check what we need to know in a more direct way, i.e. a
path created in NFC form can be accessed with NFD form (or vice
versa) to cope with APFS as well as HFS.

* tb/test-apfs-utf8-normalization:
test: correct detection of UTF8_NFD_TO_NFC for APFS

1  2 
t/test-lib.sh
diff --combined t/test-lib.sh
index ea2bbaaa7ab4dc77d0ef13cafbe45d1b12bd67e8,8abd135a4715757e67ecf7d4dba1274457bb9799..f3771ab195bad599e908b2ceb1d956fed5213e9b
@@@ -44,11 -44,6 +44,11 @@@ GIT_BUILD_DIR="$TEST_DIRECTORY"/.
  : ${ASAN_OPTIONS=detect_leaks=0:abort_on_error=1}
  export ASAN_OPTIONS
  
 +# If LSAN is in effect we _do_ want leak checking, but we still
 +# want to abort so that we notice the problems.
 +: ${LSAN_OPTIONS=abort_on_error=1}
 +export LSAN_OPTIONS
 +
  ################################################################
  # It appears that people try to run tests without building...
  "$GIT_BUILD_DIR/git" >/dev/null
@@@ -80,7 -75,7 +80,7 @@@ done,*
        # from any previous runs.
        >"$GIT_TEST_TEE_OUTPUT_FILE"
  
 -      (GIT_TEST_TEE_STARTED=done ${SHELL_PATH} "$0" "$@" 2>&1;
 +      (GIT_TEST_TEE_STARTED=done ${TEST_SHELL_PATH} "$0" "$@" 2>&1;
         echo $? >"$BASE.exit") | tee -a "$GIT_TEST_TEE_OUTPUT_FILE"
        test "$(cat "$BASE.exit")" = 0
        exit
@@@ -116,7 -111,6 +116,7 @@@ unset VISUAL EMAIL LANGUAGE COLUMNS $("
        my @vars = grep(/^GIT_/ && !/^GIT_($ok)/o, @env);
        print join("\n", @vars);
  ')
 +unset XDG_CACHE_HOME
  unset XDG_CONFIG_HOME
  unset GITPERLLIB
  GIT_AUTHOR_EMAIL=author@example.com
@@@ -176,10 -170,9 +176,10 @@@ esa
  
  # Convenience
  #
 -# A regexp to match 5 and 40 hexdigits
 +# A regexp to match 5, 35 and 40 hexdigits
  _x05='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]'
 -_x40="$_x05$_x05$_x05$_x05$_x05$_x05$_x05$_x05"
 +_x35="$_x05$_x05$_x05$_x05$_x05$_x05$_x05"
 +_x40="$_x35$_x05"
  
  # Zero SHA-1
  _z40=0000000000000000000000000000000000000000
@@@ -195,7 -188,7 +195,7 @@@ LF=
  # when case-folding filenames
  u200c=$(printf '\342\200\214')
  
 -export _x05 _x40 _z40 LF u200c EMPTY_TREE EMPTY_BLOB
 +export _x05 _x35 _x40 _z40 LF u200c EMPTY_TREE EMPTY_BLOB
  
  # Each test should start with something like this, after copyright notices:
  #
                GIT_TEST_CHAIN_LINT=0
                shift ;;
        -x)
 -              trace=t
 -              verbose=t
 +              # Some test scripts can't be reliably traced  with '-x',
 +              # unless the test is run with a Bash version supporting
 +              # BASH_XTRACEFD (introduced in Bash v4.1).  Check whether
 +              # this test is marked as such, and ignore '-x' if it
 +              # isn't executed with a suitable Bash version.
 +              if test -z "$test_untraceable" || {
 +                   test -n "$BASH_VERSION" && {
 +                     test ${BASH_VERSINFO[0]} -gt 4 || {
 +                       test ${BASH_VERSINFO[0]} -eq 4 &&
 +                       test ${BASH_VERSINFO[1]} -ge 1
 +                     }
 +                   }
 +                 }
 +              then
 +                      trace=t
 +              else
 +                      echo >&2 "warning: ignoring -x; '$0' is untraceable without BASH_XTRACEFD"
 +              fi
                shift ;;
        --verbose-log)
                verbose_log=t
@@@ -296,11 -273,6 +296,11 @@@ the
        test -z "$valgrind" && valgrind=memcheck
        test -z "$verbose" && verbose_only="$valgrind_only"
  elif test -n "$valgrind"
 +then
 +      test -z "$verbose_log" && verbose=t
 +fi
 +
 +if test -n "$trace" && test -z "$verbose_log"
  then
        verbose=t
  fi
@@@ -608,9 -580,7 +608,9 @@@ maybe_setup_valgrind () 
  }
  
  want_trace () {
 -      test "$trace" = t && test "$verbose" = t
 +      test "$trace" = t && {
 +              test "$verbose" = t || test "$verbose_log" = t
 +      }
  }
  
  # This is a separate function because some tests use
@@@ -625,40 -595,26 +625,40 @@@ test_eval_inner_ () 
  }
  
  test_eval_ () {
 -      # We run this block with stderr redirected to avoid extra cruft
 -      # during a "-x" trace. Once in "set -x" mode, we cannot prevent
 +      # If "-x" tracing is in effect, then we want to avoid polluting stderr
 +      # with non-test commands. But once in "set -x" mode, we cannot prevent
        # the shell from printing the "set +x" to turn it off (nor the saving
        # of $? before that). But we can make sure that the output goes to
        # /dev/null.
        #
 -      # The test itself is run with stderr put back to &4 (so either to
 -      # /dev/null, or to the original stderr if --verbose was used).
 +      # There are a few subtleties here:
 +      #
 +      #   - we have to redirect descriptor 4 in addition to 2, to cover
 +      #     BASH_XTRACEFD
 +      #
 +      #   - the actual eval has to come before the redirection block (since
 +      #     it needs to see descriptor 4 to set up its stderr)
 +      #
 +      #   - likewise, any error message we print must be outside the block to
 +      #     access descriptor 4
 +      #
 +      #   - checking $? has to come immediately after the eval, but it must
 +      #     be _inside_ the block to avoid polluting the "set -x" output
 +      #
 +
 +      test_eval_inner_ "$@" </dev/null >&3 2>&4
        {
 -              test_eval_inner_ "$@" </dev/null >&3 2>&4
                test_eval_ret_=$?
                if want_trace
                then
                        set +x
 -                      if test "$test_eval_ret_" != 0
 -                      then
 -                              say_color error >&4 "error: last command exited with \$?=$test_eval_ret_"
 -                      fi
                fi
 -      } 2>/dev/null
 +      } 2>/dev/null 4>&2
 +
 +      if test "$test_eval_ret_" != 0 && want_trace
 +      then
 +              say_color error >&4 "error: last command exited with \$?=$test_eval_ret_"
 +      fi
        return $test_eval_ret_
  }
  
@@@ -957,16 -913,16 +957,16 @@@ the
        fi
  fi
  
 -GITPERLLIB="$GIT_BUILD_DIR"/perl/blib/lib:"$GIT_BUILD_DIR"/perl/blib/arch/auto/Git
 +GITPERLLIB="$GIT_BUILD_DIR"/perl/build/lib
  export GITPERLLIB
  test -d "$GIT_BUILD_DIR"/templates/blt || {
        error "You haven't built things yet, have you?"
  }
  
 -if ! test -x "$GIT_BUILD_DIR"/t/helper/test-chmtime
 +if ! test -x "$GIT_BUILD_DIR"/t/helper/test-tool
  then
 -      echo >&2 'You need to build test-chmtime:'
 -      echo >&2 'Run "make t/helper/test-chmtime" in the source (toplevel) directory'
 +      echo >&2 'You need to build test-tool:'
 +      echo >&2 'Run "make t/helper/test-tool" in the source (toplevel) directory'
        exit 1
  fi
  
@@@ -1066,8 -1022,6 +1066,8 @@@ test -z "$NO_PERL" && test_set_prereq P
  test -z "$NO_PTHREADS" && test_set_prereq PTHREADS
  test -z "$NO_PYTHON" && test_set_prereq PYTHON
  test -n "$USE_LIBPCRE1$USE_LIBPCRE2" && test_set_prereq PCRE
 +test -n "$USE_LIBPCRE1" && test_set_prereq LIBPCRE1
 +test -n "$USE_LIBPCRE2" && test_set_prereq LIBPCRE2
  test -z "$NO_GETTEXT" && test_set_prereq GETTEXT
  
  # Can we rely on git's output in the C locale?
        test_set_prereq C_LOCALE_OUTPUT
  fi
  
 -# Use this instead of test_cmp to compare files that contain expected and
 -# actual output from git commands that can be translated.  When running
 -# under GETTEXT_POISON this pretends that the command produced expected
 -# results.
 -test_i18ncmp () {
 -      test -n "$GETTEXT_POISON" || test_cmp "$@"
 -}
 -
 -# Use this instead of "grep expected-string actual" to see if the
 -# output from a git command that can be translated either contains an
 -# expected string, or does not contain an unwanted one.  When running
 -# under GETTEXT_POISON this pretends that the command produced expected
 -# results.
 -test_i18ngrep () {
 -      if test -n "$GETTEXT_POISON"
 -      then
 -          : # pretend success
 -      elif test "x!" = "x$1"
 -      then
 -              shift
 -              ! grep "$@"
 -      else
 -              grep "$@"
 -      fi
 -}
 -
  test_lazy_prereq PIPE '
        # test whether the filesystem supports FIFOs
 -      case $(uname -s) in
 -      CYGWIN*|MINGW*)
 -              false
 -              ;;
 -      *)
 -              rm -f testfifo && mkfifo testfifo
 -              ;;
 -      esac
 +      test_have_prereq !MINGW,!CYGWIN &&
 +      rm -f testfifo && mkfifo testfifo
  '
  
  test_lazy_prereq SYMLINKS '
@@@ -1106,12 -1092,7 +1106,7 @@@ test_lazy_prereq UTF8_NFD_TO_NFC 
        auml=$(printf "\303\244")
        aumlcdiar=$(printf "\141\314\210")
        >"$auml" &&
-       case "$(echo *)" in
-       "$aumlcdiar")
-               true ;;
-       *)
-               false ;;
-       esac
+       test -f "$aumlcdiar"
  '
  
  test_lazy_prereq AUTOIDENT '
@@@ -1124,10 -1105,6 +1119,10 @@@ test_lazy_prereq EXPENSIVE 
        test -n "$GIT_TEST_LONG"
  '
  
 +test_lazy_prereq EXPENSIVE_ON_WINDOWS '
 +      test_have_prereq EXPENSIVE || test_have_prereq !MINGW,!CYGWIN
 +'
 +
  test_lazy_prereq USR_BIN_TIME '
        test -x /usr/bin/time
  '
@@@ -1183,19 -1160,7 +1178,19 @@@ run_with_limited_cmdline () 
        (ulimit -s 128 && "$@")
  }
  
 -test_lazy_prereq CMDLINE_LIMIT 'run_with_limited_cmdline true'
 +test_lazy_prereq CMDLINE_LIMIT '
 +      test_have_prereq !MINGW,!CYGWIN &&
 +      run_with_limited_cmdline true
 +'
 +
 +run_with_limited_stack () {
 +      (ulimit -s 128 && "$@")
 +}
 +
 +test_lazy_prereq ULIMIT_STACK_SIZE '
 +      test_have_prereq !MINGW,!CYGWIN &&
 +      run_with_limited_stack true
 +'
  
  build_option () {
        git version --build-options |
@@@ -1206,9 -1171,5 +1201,9 @@@ test_lazy_prereq LONG_IS_64BIT 
        test 8 -le "$(build_option sizeof-long)"
  '
  
 -test_lazy_prereq TIME_IS_64BIT 'test-date is64bit'
 -test_lazy_prereq TIME_T_IS_64BIT 'test-date time_t-is64bit'
 +test_lazy_prereq TIME_IS_64BIT 'test-tool date is64bit'
 +test_lazy_prereq TIME_T_IS_64BIT 'test-tool date time_t-is64bit'
 +
 +test_lazy_prereq CURL '
 +      curl --version
 +'