Merge branch 'rr/test-use-shell-path-not-shell'
authorJunio C Hamano <gitster@pobox.com>
Sun, 30 Sep 2012 05:27:56 +0000 (22:27 -0700)
committerJunio C Hamano <gitster@pobox.com>
Sun, 30 Sep 2012 05:27:56 +0000 (22:27 -0700)
Fixes a brown-paper bag bug.

* rr/test-use-shell-path-not-shell:
test-lib: use $SHELL_PATH, not $SHELL

1  2 
t/test-lib.sh
diff --combined t/test-lib.sh
index bff3d7570c675c7b6fbc71342909b0a930aae1a0,49d8b21d2d1eb301105f3aee2ff91f27344c12a2..bfc223815cff486866caac3118052c7ac432ca76
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see http://www.gnu.org/licenses/ .
  
- # if --tee was passed, write the output not only to the terminal, but
- # additionally to the file test-results/$BASENAME.out, too.
- case "$GIT_TEST_TEE_STARTED, $* " in
- done,*)
-       # do not redirect again
-       ;;
- *' --tee '*|*' --va'*)
-       mkdir -p test-results
-       BASE=test-results/$(basename "$0" .sh)
-       (GIT_TEST_TEE_STARTED=done ${SHELL-sh} "$0" "$@" 2>&1;
-        echo $? > $BASE.exit) | tee $BASE.out
-       test "$(cat $BASE.exit)" = 0
-       exit
-       ;;
- esac
  # Keep the original TERM for say_color
  ORIGINAL_TERM=$TERM
  
@@@ -51,18 -35,25 +35,34 @@@ the
  fi
  GIT_BUILD_DIR="$TEST_DIRECTORY"/..
  
 +################################################################
 +# It appears that people try to run tests without building...
 +"$GIT_BUILD_DIR/git" >/dev/null
 +if test $? != 1
 +then
 +      echo >&2 'error: you do not seem to have built git yet.'
 +      exit 1
 +fi
 +
  . "$GIT_BUILD_DIR"/GIT-BUILD-OPTIONS
  export PERL_PATH SHELL_PATH
  
+ # if --tee was passed, write the output not only to the terminal, but
+ # additionally to the file test-results/$BASENAME.out, too.
+ case "$GIT_TEST_TEE_STARTED, $* " in
+ done,*)
+       # do not redirect again
+       ;;
+ *' --tee '*|*' --va'*)
+       mkdir -p test-results
+       BASE=test-results/$(basename "$0" .sh)
+       (GIT_TEST_TEE_STARTED=done ${SHELL_PATH} "$0" "$@" 2>&1;
+        echo $? > $BASE.exit) | tee $BASE.out
+       test "$(cat $BASE.exit)" = 0
+       exit
+       ;;
+ esac
  # For repeatability, reset the environment to known value.
  LANG=C
  LC_ALL=C
@@@ -102,27 -93,6 +102,27 @@@ export GIT_AUTHOR_EMAIL GIT_AUTHOR_NAM
  export GIT_COMMITTER_EMAIL GIT_COMMITTER_NAME
  export EDITOR
  
 +# Add libc MALLOC and MALLOC_PERTURB test
 +# only if we are not executing the test with valgrind
 +if expr " $GIT_TEST_OPTS " : ".* --valgrind " >/dev/null ||
 +   test -n "TEST_NO_MALLOC_"
 +then
 +      setup_malloc_check () {
 +              : nothing
 +      }
 +      teardown_malloc_check () {
 +              : nothing
 +      }
 +else
 +      setup_malloc_check () {
 +              MALLOC_CHECK_=3 MALLOC_PERTURB_=165
 +              export MALLOC_CHECK_ MALLOC_PERTURB_
 +      }
 +      teardown_malloc_check () {
 +              unset MALLOC_CHECK_ MALLOC_PERTURB_
 +      }
 +fi
 +
  # Protect ourselves from common misconfiguration to export
  # CDPATH into the environment
  unset CDPATH
  unset GREP_OPTIONS
  
  case $(echo $GIT_TRACE |tr "[A-Z]" "[a-z]") in
 -      1|2|true)
 -              echo "* warning: Some tests will not work if GIT_TRACE" \
 -                      "is set as to trace on STDERR ! *"
 -              echo "* warning: Please set GIT_TRACE to something" \
 -                      "other than 1, 2 or true ! *"
 -              ;;
 +1|2|true)
 +      echo "* warning: Some tests will not work if GIT_TRACE" \
 +              "is set as to trace on STDERR ! *"
 +      echo "* warning: Please set GIT_TRACE to something" \
 +              "other than 1, 2 or true ! *"
 +      ;;
  esac
  
  # Convenience
        esac
  done
  
 -if test -n "$color"; then
 +if test -n "$color"
 +then
        say_color () {
                (
                TERM=$ORIGINAL_TERM
                export TERM
                case "$1" in
 -                      error) tput bold; tput setaf 1;; # bold red
 -                      skip)  tput bold; tput setaf 2;; # bold green
 -                      pass)  tput setaf 2;;            # green
 -                      info)  tput setaf 3;;            # brown
 -                      *) test -n "$quiet" && return;;
 +              error)
 +                      tput bold; tput setaf 1;; # bold red
 +              skip)
 +                      tput bold; tput setaf 2;; # bold green
 +              pass)
 +                      tput setaf 2;;            # green
 +              info)
 +                      tput setaf 3;;            # brown
 +              *)
 +                      test -n "$quiet" && return;;
                esac
                shift
                printf "%s" "$*"
@@@ -332,12 -296,9 +332,12 @@@ test_run_ () 
  
        if test -z "$immediate" || test $eval_ret = 0 || test -n "$expecting_failure"
        then
 +              setup_malloc_check
                test_eval_ "$test_cleanup"
 +              teardown_malloc_check
        fi
 -      if test "$verbose" = "t" && test -n "$HARNESS_ACTIVE"; then
 +      if test "$verbose" = "t" && test -n "$HARNESS_ACTIVE"
 +      then
                echo ""
        fi
        return "$eval_ret"
@@@ -385,8 -346,7 +385,8 @@@ test_at_end_hook_ () 
  test_done () {
        GIT_EXIT_OK=t
  
 -      if test -z "$HARNESS_ACTIVE"; then
 +      if test -z "$HARNESS_ACTIVE"
 +      then
                test_results_dir="$TEST_OUTPUT_DIRECTORY/test-results"
                mkdir -p "$test_results_dir"
                test_results_path="$test_results_dir/${0%.sh}-$$.counts"
        case "$test_failure" in
        0)
                # Maybe print SKIP message
 +              if test -n "$skip_all" && test $test_count -gt 0
 +              then
 +                      error "Can't use skip_all after running some tests"
 +              fi
                [ -z "$skip_all" ] || skip_all=" # SKIP $skip_all"
  
 -              if test $test_external_has_tap -eq 0; then
 -                      say_color pass "# passed all $msg"
 +              if test $test_external_has_tap -eq 0
 +              then
 +                      if test $test_count -gt 0
 +                      then
 +                              say_color pass "# passed all $msg"
 +                      fi
                        say "1..$test_count$skip_all"
                fi
  
                exit 0 ;;
  
        *)
 -              if test $test_external_has_tap -eq 0; then
 +              if test $test_external_has_tap -eq 0
 +              then
                        say_color error "# failed $test_failure among $msg"
                        say "1..$test_count"
                fi
@@@ -520,26 -471,22 +520,26 @@@ the
        PATH=$GIT_VALGRIND/bin:$PATH
        GIT_EXEC_PATH=$GIT_VALGRIND/bin
        export GIT_VALGRIND
 -elif test -n "$GIT_TEST_INSTALLED" ; then
 +elif test -n "$GIT_TEST_INSTALLED"
 +then
        GIT_EXEC_PATH=$($GIT_TEST_INSTALLED/git --exec-path)  ||
        error "Cannot run git from $GIT_TEST_INSTALLED."
        PATH=$GIT_TEST_INSTALLED:$GIT_BUILD_DIR:$PATH
        GIT_EXEC_PATH=${GIT_TEST_EXEC_PATH:-$GIT_EXEC_PATH}
  else # normal case, use ../bin-wrappers only unless $with_dashes:
        git_bin_dir="$GIT_BUILD_DIR/bin-wrappers"
 -      if ! test -x "$git_bin_dir/git" ; then
 -              if test -z "$with_dashes" ; then
 +      if ! test -x "$git_bin_dir/git"
 +      then
 +              if test -z "$with_dashes"
 +              then
                        say "$git_bin_dir/git is not executable; using GIT_EXEC_PATH"
                fi
                with_dashes=t
        fi
        PATH="$git_bin_dir:$PATH"
        GIT_EXEC_PATH=$GIT_BUILD_DIR
 -      if test -n "$with_dashes" ; then
 +      if test -n "$with_dashes"
 +      then
                PATH="$GIT_BUILD_DIR:$PATH"
        fi
  fi
@@@ -574,8 -521,7 +574,8 @@@ the
        }
  fi
  
 -if ! test -x "$GIT_BUILD_DIR"/test-chmtime; then
 +if ! test -x "$GIT_BUILD_DIR"/test-chmtime
 +then
        echo >&2 'You need to build test-chmtime:'
        echo >&2 'Run "make test-chmtime" in the source (toplevel) directory'
        exit 1
@@@ -598,8 -544,7 +598,8 @@@ rm -fr "$test" || 
  HOME="$TRASH_DIRECTORY"
  export HOME
  
 -if test -z "$TEST_NO_CREATE_REPO"; then
 +if test -z "$TEST_NO_CREATE_REPO"
 +then
        test_create_repo "$test"
  else
        mkdir -p "$test"
@@@ -714,29 -659,9 +714,29 @@@ test_i18ngrep () 
        fi
  }
  
 -# test whether the filesystem supports symbolic links
 -ln -s x y 2>/dev/null && test -h y 2>/dev/null && test_set_prereq SYMLINKS
 -rm -f y
 +test_lazy_prereq SYMLINKS '
 +      # test whether the filesystem supports symbolic links
 +      ln -s x y && test -h y
 +'
 +
 +test_lazy_prereq CASE_INSENSITIVE_FS '
 +      echo good >CamelCase &&
 +      echo bad >camelcase &&
 +      test "$(cat CamelCase)" != good
 +'
 +
 +test_lazy_prereq UTF8_NFD_TO_NFC '
 +      # check whether FS converts nfd unicode to nfc
 +      auml=$(printf "\303\244")
 +      aumlcdiar=$(printf "\141\314\210")
 +      >"$auml" &&
 +      case "$(echo *)" in
 +      "$aumlcdiar")
 +              true ;;
 +      *)
 +              false ;;
 +      esac
 +'
  
  # When the tests are run as root, permission tests will report that
  # things are writable when they shouldn't be.