Merge branch 'jk/test-with-x' into maint
authorJunio C Hamano <gitster@pobox.com>
Tue, 25 Aug 2015 23:09:16 +0000 (16:09 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 25 Aug 2015 23:09:16 +0000 (16:09 -0700)
Running tests with the "-x" option to make them verbose had some
unpleasant interactions with other features of the test suite.

* jk/test-with-x:
test-lib: disable trace when test is not verbose
test-lib: turn off "-x" tracing during chain-lint check

1  2 
t/test-lib.sh
diff --combined t/test-lib.sh
index cea6cda6048e22e111f2c1f2c216d448868394ac,ab8461648494848b05170ac402f66acd168baee1..16c4d7b516649a13e3f07e081e91e1212afc61a5
@@@ -15,6 -15,9 +15,6 @@@
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see http://www.gnu.org/licenses/ .
  
 -# Keep the original TERM for say_color
 -ORIGINAL_TERM=$TERM
 -
  # Test the binaries we have just built.  The tests are kept in
  # t/ subdirectory and are run in 'trash directory' subdirectory.
  if test -z "$TEST_DIRECTORY"
@@@ -65,12 -68,12 +65,12 @@@ done,*
  esac
  
  # For repeatability, reset the environment to known value.
 +# TERM is sanitized below, after saving color control sequences.
  LANG=C
  LC_ALL=C
  PAGER=cat
  TZ=UTC
 -TERM=dumb
 -export LANG LC_ALL PAGER TERM TZ
 +export LANG LC_ALL PAGER TZ
  EDITOR=:
  # A call to "unset" with no arguments causes at least Solaris 10
  # /usr/xpg4/bin/sh and /bin/ksh to bail out.  So keep the unsets
@@@ -149,7 -152,10 +149,7 @@@ unset UNZI
  
  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 ! *"
 +      GIT_TRACE=4
        ;;
  esac
  
@@@ -178,14 -184,8 +178,14 @@@ export _x05 _x40 _z40 LF u200
  # This test checks if command xyzzy does the right thing...
  # '
  # . ./test-lib.sh
 +test "x$TERM" != "xdumb" && (
 +              test -t 1 &&
 +              tput bold >/dev/null 2>&1 &&
 +              tput setaf 1 >/dev/null 2>&1 &&
 +              tput sgr0 >/dev/null 2>&1
 +      ) &&
 +      color=t
  
 -unset color
  while test "$#" -ne 0
  do
        case "$1" in
@@@ -256,44 -256,6 +256,44 @@@ the
        verbose=t
  fi
  
 +if test -n "$color"
 +then
 +      # Save the color control sequences now rather than run tput
 +      # each time say_color() is called.  This is done for two
 +      # reasons:
 +      #   * TERM will be changed to dumb
 +      #   * HOME will be changed to a temporary directory and tput
 +      #     might need to read ~/.terminfo from the original HOME
 +      #     directory to get the control sequences
 +      # Note:  This approach assumes the control sequences don't end
 +      # in a newline for any terminal of interest (command
 +      # substitutions strip trailing newlines).  Given that most
 +      # (all?) terminals in common use are related to ECMA-48, this
 +      # shouldn't be a problem.
 +      say_color_error=$(tput bold; tput setaf 1) # bold red
 +      say_color_skip=$(tput setaf 4) # blue
 +      say_color_warn=$(tput setaf 3) # brown/yellow
 +      say_color_pass=$(tput setaf 2) # green
 +      say_color_info=$(tput setaf 6) # cyan
 +      say_color_reset=$(tput sgr0)
 +      say_color_="" # no formatting for normal text
 +      say_color () {
 +              test -z "$1" && test -n "$quiet" && return
 +              eval "say_color_color=\$say_color_$1"
 +              shift
 +              printf "%s\\n" "$say_color_color$*$say_color_reset"
 +      }
 +else
 +      say_color() {
 +              test -z "$1" && test -n "$quiet" && return
 +              shift
 +              printf "%s\n" "$*"
 +      }
 +fi
 +
 +TERM=dumb
 +export TERM
 +
  error () {
        say_color error "error: $*"
        GIT_EXIT_OK=t
@@@ -343,7 -305,6 +343,7 @@@ die () 
  
  GIT_EXIT_OK=
  trap 'die' EXIT
 +trap 'exit $?' INT
  
  # The user-facing functions are loaded from a separate file so that
  # test_perf subshells can have them too
@@@ -531,6 -492,10 +531,10 @@@ maybe_setup_valgrind () 
        fi
  }
  
+ want_trace () {
+       test "$trace" = t && test "$verbose" = t
+ }
  # This is a separate function because some tests use
  # "return" to end a test_expect_success block early
  # (and we want to make sure we run any cleanup like
  test_eval_inner_ () {
        # Do not add anything extra (including LF) after '$*'
        eval "
-               test \"$trace\" = t && set -x
+               want_trace && set -x
                $*"
  }
  
@@@ -554,7 -519,7 +558,7 @@@ test_eval_ () 
        {
                test_eval_inner_ "$@" </dev/null >&3 2>&4
                test_eval_ret_=$?
-               if test "$trace" = t
+               if want_trace
                then
                        set +x
                        if test "$test_eval_ret_" != 0
@@@ -571,12 -536,17 +575,17 @@@ test_run_ () 
        expecting_failure=$2
  
        if test "${GIT_TEST_CHAIN_LINT:-1}" != 0; then
+               # turn off tracing for this test-eval, as it simply creates
+               # confusing noise in the "-x" output
+               trace_tmp=$trace
+               trace=
                # 117 is magic because it is unlikely to match the exit
                # code of other programs
                test_eval_ "(exit 117) && $1"
                if test "$?" != 117; then
                        error "bug in the test script: broken &&-chain: $1"
                fi
+               trace=$trace_tmp
        fi
  
        setup_malloc_check
@@@ -870,6 -840,52 +879,6 @@@ HOME="$TRASH_DIRECTORY
  GNUPGHOME="$HOME/gnupg-home-not-used"
  export HOME GNUPGHOME
  
 -# run the tput tests *after* changing HOME (in case ncurses needs
 -# ~/.terminfo for $TERM)
 -test -n "${color+set}" || test "x$ORIGINAL_TERM" != "xdumb" && (
 -              TERM=$ORIGINAL_TERM &&
 -              export TERM &&
 -              test -t 1 &&
 -              tput bold >/dev/null 2>&1 &&
 -              tput setaf 1 >/dev/null 2>&1 &&
 -              tput sgr0 >/dev/null 2>&1
 -      ) &&
 -      color=t
 -
 -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 setaf 4;; # blue
 -              warn)
 -                      tput setaf 3;; # brown/yellow
 -              pass)
 -                      tput setaf 2;; # green
 -              info)
 -                      tput setaf 6;; # cyan
 -              *)
 -                      test -n "$quiet" && return;;
 -              esac
 -              shift
 -              printf "%s" "$*"
 -              tput sgr0
 -              echo
 -              )
 -      }
 -else
 -      say_color() {
 -              test -z "$1" && test -n "$quiet" && return
 -              shift
 -              printf "%s\n" "$*"
 -      }
 -fi
 -
  if test -z "$TEST_NO_CREATE_REPO"
  then
        test_create_repo "$TRASH_DIRECTORY"
@@@ -1073,9 -1089,3 +1082,9 @@@ test_lazy_prereq UNZIP 
        "$GIT_UNZIP" -v
        test $? -ne 127
  '
 +
 +run_with_limited_cmdline () {
 +      (ulimit -s 128 && "$@")
 +}
 +
 +test_lazy_prereq CMDLINE_LIMIT 'run_with_limited_cmdline true'