Merge branch 'js/test-git-installed'
authorJunio C Hamano <gitster@pobox.com>
Mon, 19 Nov 2018 07:24:41 +0000 (16:24 +0900)
committerJunio C Hamano <gitster@pobox.com>
Mon, 19 Nov 2018 07:24:41 +0000 (16:24 +0900)
Update the "test installed Git" mode of our test suite to work better.

* js/test-git-installed:
  tests: explicitly use `git.exe` on Windows
  tests: do not require Git to be built when testing an installed Git
  t/lib-gettext: test installed git-sh-i18n if GIT_TEST_INSTALLED is set
  tests: respect GIT_TEST_INSTALLED when initializing repositories
  tests: fix GIT_TEST_INSTALLED's PATH to include t/helper/

1  2 
Makefile
t/lib-gettext.sh
t/test-lib-functions.sh
t/test-lib.sh

diff --combined Makefile
+++ b/Makefile
@@@ -59,13 -59,6 +59,13 @@@ all:
  # Define CURL_CONFIG to curl's configuration program that prints information
  # about the library (e.g., its version number).  The default is 'curl-config'.
  #
 +# Define CURL_LDFLAGS to specify flags that you need to link when using libcurl,
 +# if you do not want to rely on the libraries provided by CURL_CONFIG.  The
 +# default value is a result of `curl-config --libs`.  An example value for
 +# CURL_LDFLAGS is as follows:
 +#
 +#     CURL_LDFLAGS=-lcurl
 +#
  # Define NO_EXPAT if you do not have expat installed.  git-http-push is
  # not built, and you cannot push using http:// and https:// transports (dumb).
  #
  #
  # Define NEEDS_SSL_WITH_CRYPTO if you need -lssl when using -lcrypto (Darwin).
  #
 -# Define NEEDS_SSL_WITH_CURL if you need -lssl with -lcurl (Minix).
 -#
 -# Define NEEDS_IDN_WITH_CURL if you need -lidn when using -lcurl (Minix).
 -#
  # Define NEEDS_LIBICONV if linking with libc is not enough (Darwin).
  #
  # Define NEEDS_LIBINTL_BEFORE_LIBICONV if you need libintl before libiconv.
  # Define MMAP_PREVENTS_DELETE if a file that is currently mmapped cannot be
  # deleted or cannot be replaced using rename().
  #
 +# Define NO_POLL_H if you don't have poll.h.
 +#
  # Define NO_SYS_POLL_H if you don't have sys/poll.h.
  #
  # Define NO_POLL if you do not have or don't want to use poll().
 -# This also implies NO_SYS_POLL_H.
 +# This also implies NO_POLL_H and NO_SYS_POLL_H.
  #
  # Define NEEDS_SYS_PARAM_H if you need to include sys/param.h to compile,
  # *PLEASE* REPORT to git@vger.kernel.org if your platform needs this;
  # Define HAVE_DEV_TTY if your system can open /dev/tty to interact with the
  # user.
  #
 -# Define GETTEXT_POISON if you are debugging the choice of strings marked
 -# for translation.  In a GETTEXT_POISON build, you can turn all strings marked
 -# for translation into gibberish by setting the GIT_GETTEXT_POISON variable
 -# (to any value) in your environment.
 -#
  # Define JSMIN to point to JavaScript minifier that functions as
  # a filter to have gitweb.js minified.
  #
@@@ -993,7 -993,6 +993,7 @@@ LIB_OBJS += sub-process.
  LIB_OBJS += symlinks.o
  LIB_OBJS += tag.o
  LIB_OBJS += tempfile.o
 +LIB_OBJS += thread-utils.o
  LIB_OBJS += tmp-objdir.o
  LIB_OBJS += trace.o
  LIB_OBJS += trailer.o
        ifdef CURLDIR
                # Try "-Wl,-rpath=$(CURLDIR)/$(lib)" in such a case.
                BASIC_CFLAGS += -I$(CURLDIR)/include
 -              CURL_LIBCURL = -L$(CURLDIR)/$(lib) $(CC_LD_DYNPATH)$(CURLDIR)/$(lib) -lcurl
 +              CURL_LIBCURL = -L$(CURLDIR)/$(lib) $(CC_LD_DYNPATH)$(CURLDIR)/$(lib)
        else
 -              CURL_LIBCURL = -lcurl
 -      endif
 -      ifdef NEEDS_SSL_WITH_CURL
 -              CURL_LIBCURL += -lssl
 -              ifdef NEEDS_CRYPTO_WITH_SSL
 -                      CURL_LIBCURL += -lcrypto
 -              endif
 -      endif
 -      ifdef NEEDS_IDN_WITH_CURL
 -              CURL_LIBCURL += -lidn
 +              CURL_LIBCURL =
        endif
  
 +ifdef CURL_LDFLAGS
 +      CURL_LIBCURL += $(CURL_LDFLAGS)
 +else
 +      CURL_LIBCURL += $(shell $(CURL_CONFIG) --libs)
 +endif
 +
        REMOTE_CURL_PRIMARY = git-remote-http$X
        REMOTE_CURL_ALIASES = git-remote-https$X git-remote-ftp$X git-remote-ftps$X
        REMOTE_CURL_NAMES = $(REMOTE_CURL_PRIMARY) $(REMOTE_CURL_ALIASES)
@@@ -1451,14 -1453,13 +1451,14 @@@ ifdef NO_SYMLINK_HEA
        BASIC_CFLAGS += -DNO_SYMLINK_HEAD
  endif
  ifdef GETTEXT_POISON
 -      BASIC_CFLAGS += -DGETTEXT_POISON
 +$(warning The GETTEXT_POISON option has been removed in favor of runtime GIT_TEST_GETTEXT_POISON. See t/README!)
  endif
  ifdef NO_GETTEXT
        BASIC_CFLAGS += -DNO_GETTEXT
        USE_GETTEXT_SCHEME ?= fallthrough
  endif
  ifdef NO_POLL
 +      NO_POLL_H = YesPlease
        NO_SYS_POLL_H = YesPlease
        COMPAT_CFLAGS += -DNO_POLL -Icompat/poll
        COMPAT_OBJS += compat/poll/poll.o
@@@ -1497,9 -1498,6 +1497,9 @@@ endi
  ifdef NO_SYS_SELECT_H
        BASIC_CFLAGS += -DNO_SYS_SELECT_H
  endif
 +ifdef NO_POLL_H
 +      BASIC_CFLAGS += -DNO_POLL_H
 +endif
  ifdef NO_SYS_POLL_H
        BASIC_CFLAGS += -DNO_SYS_POLL_H
  endif
@@@ -1679,6 -1677,7 +1679,6 @@@ ifdef NO_PTHREAD
  else
        BASIC_CFLAGS += $(PTHREAD_CFLAGS)
        EXTLIBS += $(PTHREAD_LIBS)
 -      LIB_OBJS += thread-utils.o
  endif
  
  ifdef HAVE_PATHS_H
@@@ -2112,7 -2111,7 +2112,7 @@@ $(SCRIPT_LIB) : % : %.sh GIT-SCRIPT-DEF
        $(QUIET_GEN)$(cmd_munge_script) && \
        mv $@+ $@
  
 -git.res: git.rc GIT-VERSION-FILE
 +git.res: git.rc GIT-VERSION-FILE GIT-PREFIX
        $(QUIET_RC)$(RC) \
          $(join -DMAJOR= -DMINOR= -DMICRO= -DPATCHLEVEL=, $(wordlist 1, 4, \
            $(shell echo $(GIT_VERSION) 0 0 0 0 | tr '.a-zA-Z-' ' '))) \
@@@ -2592,6 -2591,7 +2592,7 @@@ GIT-BUILD-OPTIONS: FORC
        @echo NO_UNIX_SOCKETS=\''$(subst ','\'',$(subst ','\'',$(NO_UNIX_SOCKETS)))'\' >>$@+
        @echo PAGER_ENV=\''$(subst ','\'',$(subst ','\'',$(PAGER_ENV)))'\' >>$@+
        @echo DC_SHA1=\''$(subst ','\'',$(subst ','\'',$(DC_SHA1)))'\' >>$@+
+       @echo X=\'$(X)\' >>$@+
  ifdef TEST_OUTPUT_DIRECTORY
        @echo TEST_OUTPUT_DIRECTORY=\''$(subst ','\'',$(subst ','\'',$(TEST_OUTPUT_DIRECTORY)))'\' >>$@+
  endif
@@@ -2605,6 -2605,7 +2606,6 @@@ ifdef GIT_TEST_CMP_USE_COPIED_CONTEX
        @echo GIT_TEST_CMP_USE_COPIED_CONTEXT=YesPlease >>$@+
  endif
        @echo NO_GETTEXT=\''$(subst ','\'',$(subst ','\'',$(NO_GETTEXT)))'\' >>$@+
 -      @echo GETTEXT_POISON=\''$(subst ','\'',$(subst ','\'',$(GETTEXT_POISON)))'\' >>$@+
  ifdef GIT_PERF_REPEAT_COUNT
        @echo GIT_PERF_REPEAT_COUNT=\''$(subst ','\'',$(subst ','\'',$(GIT_PERF_REPEAT_COUNT)))'\' >>$@+
  endif
@@@ -3099,16 -3100,14 +3100,16 @@@ cover_db_html: cover_d
  # An example command to build against libFuzzer from LLVM 4.0.0:
  #
  # make CC=clang CXX=clang++ \
 -#      CFLAGS="-fsanitize-coverage=trace-pc-guard -fsanitize=address" \
 +#      FUZZ_CXXFLAGS="-fsanitize-coverage=trace-pc-guard -fsanitize=address" \
  #      LIB_FUZZING_ENGINE=/usr/lib/llvm-4.0/lib/libFuzzer.a \
  #      fuzz-all
  #
 +FUZZ_CXXFLAGS ?= $(CFLAGS)
 +
  .PHONY: fuzz-all
  
  $(FUZZ_PROGRAMS): all
 -      $(QUIET_LINK)$(CXX) $(CFLAGS) $(LIB_OBJS) $(BUILTIN_OBJS) \
 +      $(QUIET_LINK)$(CXX) $(FUZZ_CXXFLAGS) $(LIB_OBJS) $(BUILTIN_OBJS) \
                $(XDIFF_OBJS) $(EXTLIBS) git.o $@.o $(LIB_FUZZING_ENGINE) -o $@
  
  fuzz-all: $(FUZZ_PROGRAMS)
diff --combined t/lib-gettext.sh
@@@ -10,9 -10,14 +10,14 @@@ GIT_TEXTDOMAINDIR="$GIT_BUILD_DIR/po/bu
  GIT_PO_PATH="$GIT_BUILD_DIR/po"
  export GIT_TEXTDOMAINDIR GIT_PO_PATH
  
- . "$GIT_BUILD_DIR"/git-sh-i18n
+ if test -n "$GIT_TEST_INSTALLED"
+ then
+       . "$(git --exec-path)"/git-sh-i18n
+ else
+       . "$GIT_BUILD_DIR"/git-sh-i18n
+ fi
  
 -if test_have_prereq GETTEXT && ! test_have_prereq GETTEXT_POISON
 +if test_have_prereq GETTEXT && test_have_prereq C_LOCALE_OUTPUT
  then
        # is_IS.UTF-8 on Solaris and FreeBSD, is_IS.utf8 on Debian
        is_IS_locale=$(locale -a 2>/dev/null |
diff --combined t/test-lib-functions.sh
@@@ -778,16 -778,16 +778,16 @@@ test_cmp_bin() 
  
  # 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
 +# under GIT_TEST_GETTEXT_POISON this pretends that the command produced expected
  # results.
  test_i18ncmp () {
 -      test -n "$GETTEXT_POISON" || test_cmp "$@"
 +      ! test_have_prereq C_LOCALE_OUTPUT || 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
 +# under GIT_TEST_GETTEXT_POISON this pretends that the command produced expected
  # results.
  test_i18ngrep () {
        eval "last_arg=\${$#}"
                error "bug in the test script: too few parameters to test_i18ngrep"
        fi
  
 -      if test -n "$GETTEXT_POISON"
 +      if test_have_prereq !C_LOCALE_OUTPUT
        then
                # pretend success
                return 0
@@@ -923,7 -923,8 +923,8 @@@ test_create_repo () 
        mkdir -p "$repo"
        (
                cd "$repo" || error "Cannot setup test environment"
-               "$GIT_EXEC_PATH/git-init" "--template=$GIT_BUILD_DIR/templates/blt/" >&3 2>&4 ||
+               "${GIT_TEST_INSTALLED:-$GIT_EXEC_PATH}/git$X" init \
+                       "--template=$GIT_BUILD_DIR/templates/blt/" >&3 2>&4 ||
                error "cannot run git init -- have you built things yet?"
                mv .git/hooks .git/hooks-disabled
        ) || exit
diff --combined t/test-lib.sh
@@@ -49,18 -49,28 +49,28 @@@ export ASAN_OPTION
  : ${LSAN_OPTIONS=abort_on_error=1}
  export LSAN_OPTIONS
  
+ if test ! -f "$GIT_BUILD_DIR"/GIT-BUILD-OPTIONS
+ then
+       echo >&2 'error: GIT-BUILD-OPTIONS missing (has Git been built?).'
+       exit 1
+ fi
+ . "$GIT_BUILD_DIR"/GIT-BUILD-OPTIONS
+ export PERL_PATH SHELL_PATH
  ################################################################
  # It appears that people try to run tests without building...
- "$GIT_BUILD_DIR/git" >/dev/null
+ "${GIT_TEST_INSTALLED:-$GIT_BUILD_DIR}/git$X" >/dev/null
  if test $? != 1
  then
-       echo >&2 'error: you do not seem to have built git yet.'
+       if test -n "$GIT_TEST_INSTALLED"
+       then
+               echo >&2 "error: there is no working Git at '$GIT_TEST_INSTALLED'"
+       else
+               echo >&2 'error: you do not seem to have built git yet.'
+       fi
        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
@@@ -95,16 -105,6 +105,16 @@@ PAGER=ca
  TZ=UTC
  export LANG LC_ALL PAGER TZ
  EDITOR=:
 +
 +# GIT_TEST_GETTEXT_POISON should not influence git commands executed
 +# during initialization of test-lib and the test repo. Back it up,
 +# unset and then restore after initialization is finished.
 +if test -n "$GIT_TEST_GETTEXT_POISON"
 +then
 +      GIT_TEST_GETTEXT_POISON_ORIG=$GIT_TEST_GETTEXT_POISON
 +      unset GIT_TEST_GETTEXT_POISON
 +fi
 +
  # 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
  # deriving from the command substitution clustered with the other
@@@ -967,7 -967,7 +977,7 @@@ 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
+       PATH=$GIT_TEST_INSTALLED:$GIT_BUILD_DIR/t/helper:$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"
@@@ -1114,15 -1114,13 +1124,15 @@@ test -n "$USE_LIBPCRE1" && test_set_pre
  test -n "$USE_LIBPCRE2" && test_set_prereq LIBPCRE2
  test -z "$NO_GETTEXT" && test_set_prereq GETTEXT
  
 +if test -n "$GIT_TEST_GETTEXT_POISON_ORIG"
 +then
 +      GIT_TEST_GETTEXT_POISON=$GIT_TEST_GETTEXT_POISON_ORIG
 +      unset GIT_TEST_GETTEXT_POISON_ORIG
 +fi
 +
  # Can we rely on git's output in the C locale?
 -if test -n "$GETTEXT_POISON"
 +if test -z "$GIT_TEST_GETTEXT_POISON"
  then
 -      GIT_GETTEXT_POISON=YesPlease
 -      export GIT_GETTEXT_POISON
 -      test_set_prereq GETTEXT_POISON
 -else
        test_set_prereq C_LOCALE_OUTPUT
  fi