merge(3p/git): Merge git subtree at v2.29.2
This also bumps the stable nixpkgs to 20.09 as of 2020-11-21, because there is some breakage in the git build related to the netrc credentials helper which someone has taken care of in nixpkgs. The stable channel is not used for anything other than git, so this should be fine. Change-Id: I3575a19dab09e1e9556cf8231d717de9890484fb
This commit is contained in:
parent
082c006c04
commit
f4609b896f
1485 changed files with 241535 additions and 109418 deletions
207
third_party/git/t/test-lib.sh
vendored
207
third_party/git/t/test-lib.sh
vendored
|
|
@ -78,20 +78,23 @@ then
|
|||
exit 1
|
||||
fi
|
||||
|
||||
# Parse options while taking care to leave $@ intact, so we will still
|
||||
# have all the original command line options when executing the test
|
||||
# script again for '--tee' and '--verbose-log' below.
|
||||
store_arg_to=
|
||||
prev_opt=
|
||||
for opt
|
||||
do
|
||||
if test -n "$store_arg_to"
|
||||
opt_required_arg=
|
||||
# $1: option string
|
||||
# $2: name of the var where the arg will be stored
|
||||
mark_option_requires_arg () {
|
||||
if test -n "$opt_required_arg"
|
||||
then
|
||||
eval $store_arg_to=\$opt
|
||||
store_arg_to=
|
||||
prev_opt=
|
||||
continue
|
||||
echo "error: options that require args cannot be bundled" \
|
||||
"together: '$opt_required_arg' and '$1'" >&2
|
||||
exit 1
|
||||
fi
|
||||
opt_required_arg=$1
|
||||
store_arg_to=$2
|
||||
}
|
||||
|
||||
parse_option () {
|
||||
local opt="$1"
|
||||
|
||||
case "$opt" in
|
||||
-d|--d|--de|--deb|--debu|--debug)
|
||||
|
|
@ -101,7 +104,7 @@ do
|
|||
-l|--l|--lo|--lon|--long|--long-|--long-t|--long-te|--long-tes|--long-test|--long-tests)
|
||||
GIT_TEST_LONG=t; export GIT_TEST_LONG ;;
|
||||
-r)
|
||||
store_arg_to=run_list
|
||||
mark_option_requires_arg "$opt" run_list
|
||||
;;
|
||||
--run=*)
|
||||
run_list=${opt#--*=} ;;
|
||||
|
|
@ -185,12 +188,42 @@ do
|
|||
*)
|
||||
echo "error: unknown test option '$opt'" >&2; exit 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
prev_opt=$opt
|
||||
# Parse options while taking care to leave $@ intact, so we will still
|
||||
# have all the original command line options when executing the test
|
||||
# script again for '--tee' and '--verbose-log' later.
|
||||
for opt
|
||||
do
|
||||
if test -n "$store_arg_to"
|
||||
then
|
||||
eval $store_arg_to=\$opt
|
||||
store_arg_to=
|
||||
opt_required_arg=
|
||||
continue
|
||||
fi
|
||||
|
||||
case "$opt" in
|
||||
--*|-?)
|
||||
parse_option "$opt" ;;
|
||||
-?*)
|
||||
# bundled short options must be fed separately to parse_option
|
||||
opt=${opt#-}
|
||||
while test -n "$opt"
|
||||
do
|
||||
extra=${opt#?}
|
||||
this=${opt%$extra}
|
||||
opt=$extra
|
||||
parse_option "-$this"
|
||||
done
|
||||
;;
|
||||
*)
|
||||
echo "error: unknown test option '$opt'" >&2; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
if test -n "$store_arg_to"
|
||||
then
|
||||
echo "error: $prev_opt requires an argument" >&2
|
||||
echo "error: $opt_required_arg requires an argument" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
|
@ -212,6 +245,8 @@ fi
|
|||
|
||||
TEST_STRESS_JOB_SFX="${GIT_TEST_STRESS_JOB_NR:+.stress-$GIT_TEST_STRESS_JOB_NR}"
|
||||
TEST_NAME="$(basename "$0" .sh)"
|
||||
TEST_NUMBER="${TEST_NAME%%-*}"
|
||||
TEST_NUMBER="${TEST_NUMBER#t}"
|
||||
TEST_RESULTS_DIR="$TEST_OUTPUT_DIRECTORY/test-results"
|
||||
TEST_RESULTS_BASE="$TEST_RESULTS_DIR/$TEST_NAME$TEST_STRESS_JOB_SFX"
|
||||
TRASH_DIRECTORY="trash directory.$TEST_NAME$TEST_STRESS_JOB_SFX"
|
||||
|
|
@ -402,17 +437,27 @@ unset VISUAL EMAIL LANGUAGE COLUMNS $("$PERL_PATH" -e '
|
|||
unset XDG_CACHE_HOME
|
||||
unset XDG_CONFIG_HOME
|
||||
unset GITPERLLIB
|
||||
GIT_AUTHOR_EMAIL=author@example.com
|
||||
TEST_AUTHOR_LOCALNAME=author
|
||||
TEST_AUTHOR_DOMAIN=example.com
|
||||
GIT_AUTHOR_EMAIL=${TEST_AUTHOR_LOCALNAME}@${TEST_AUTHOR_DOMAIN}
|
||||
GIT_AUTHOR_NAME='A U Thor'
|
||||
GIT_COMMITTER_EMAIL=committer@example.com
|
||||
GIT_AUTHOR_DATE='1112354055 +0200'
|
||||
TEST_COMMITTER_LOCALNAME=committer
|
||||
TEST_COMMITTER_DOMAIN=example.com
|
||||
GIT_COMMITTER_EMAIL=${TEST_COMMITTER_LOCALNAME}@${TEST_COMMITTER_DOMAIN}
|
||||
GIT_COMMITTER_NAME='C O Mitter'
|
||||
GIT_COMMITTER_DATE='1112354055 +0200'
|
||||
GIT_MERGE_VERBOSITY=5
|
||||
GIT_MERGE_AUTOEDIT=no
|
||||
export GIT_MERGE_VERBOSITY GIT_MERGE_AUTOEDIT
|
||||
export GIT_AUTHOR_EMAIL GIT_AUTHOR_NAME
|
||||
export GIT_COMMITTER_EMAIL GIT_COMMITTER_NAME
|
||||
export GIT_COMMITTER_DATE GIT_AUTHOR_DATE
|
||||
export EDITOR
|
||||
|
||||
GIT_DEFAULT_HASH="${GIT_TEST_DEFAULT_HASH:-sha1}"
|
||||
export GIT_DEFAULT_HASH
|
||||
|
||||
# Tests using GIT_TRACE typically don't want <timestamp> <file>:<line> output
|
||||
GIT_TRACE_BARE=1
|
||||
export GIT_TRACE_BARE
|
||||
|
|
@ -488,25 +533,13 @@ case $(echo $GIT_TRACE |tr "[A-Z]" "[a-z]") in
|
|||
;;
|
||||
esac
|
||||
|
||||
# Convenience
|
||||
#
|
||||
# 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]'
|
||||
_x35="$_x05$_x05$_x05$_x05$_x05$_x05$_x05"
|
||||
_x40="$_x35$_x05"
|
||||
|
||||
# Zero SHA-1
|
||||
_z40=0000000000000000000000000000000000000000
|
||||
|
||||
OID_REGEX="$_x40"
|
||||
ZERO_OID=$_z40
|
||||
EMPTY_TREE=4b825dc642cb6eb9a060e54bf8d69288fbee4904
|
||||
EMPTY_BLOB=e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
|
||||
|
||||
# Line feed
|
||||
LF='
|
||||
'
|
||||
|
||||
# Single quote
|
||||
SQ=\'
|
||||
|
||||
# UTF-8 ZERO WIDTH NON-JOINER, which HFS+ ignores
|
||||
# when case-folding filenames
|
||||
u200c=$(printf '\342\200\214')
|
||||
|
|
@ -567,6 +600,7 @@ export TERM
|
|||
|
||||
error () {
|
||||
say_color error "error: $*"
|
||||
finalize_junit_xml
|
||||
GIT_EXIT_OK=t
|
||||
exit 1
|
||||
}
|
||||
|
|
@ -695,7 +729,7 @@ test_failure_ () {
|
|||
say_color error "not ok $test_count - $1"
|
||||
shift
|
||||
printf '%s\n' "$*" | sed -e 's/^/# /'
|
||||
test "$immediate" = "" || { GIT_EXIT_OK=t; exit 1; }
|
||||
test "$immediate" = "" || { finalize_junit_xml; GIT_EXIT_OK=t; exit 1; }
|
||||
}
|
||||
|
||||
test_known_broken_ok_ () {
|
||||
|
|
@ -872,6 +906,7 @@ maybe_setup_valgrind () {
|
|||
fi
|
||||
}
|
||||
|
||||
trace_level_=0
|
||||
want_trace () {
|
||||
test "$trace" = t && {
|
||||
test "$verbose" = t || test "$verbose_log" = t
|
||||
|
|
@ -885,7 +920,7 @@ want_trace () {
|
|||
test_eval_inner_ () {
|
||||
# Do not add anything extra (including LF) after '$*'
|
||||
eval "
|
||||
want_trace && set -x
|
||||
want_trace && trace_level_=$(($trace_level_+1)) && set -x
|
||||
$*"
|
||||
}
|
||||
|
||||
|
|
@ -916,7 +951,8 @@ test_eval_ () {
|
|||
test_eval_ret_=$?
|
||||
if want_trace
|
||||
then
|
||||
set +x
|
||||
test 1 = $trace_level_ && set +x
|
||||
trace_level_=$(($trace_level_-1))
|
||||
fi
|
||||
} 2>/dev/null 4>&2
|
||||
|
||||
|
|
@ -994,6 +1030,12 @@ test_skip () {
|
|||
to_skip=t
|
||||
skipped_reason="GIT_SKIP_TESTS"
|
||||
fi
|
||||
if test -z "$to_skip" && test -n "$run_list" &&
|
||||
! match_test_selector_list '--run' $test_count "$run_list"
|
||||
then
|
||||
to_skip=t
|
||||
skipped_reason="--run"
|
||||
fi
|
||||
if test -z "$to_skip" && test -n "$test_prereq" &&
|
||||
! test_have_prereq "$test_prereq"
|
||||
then
|
||||
|
|
@ -1006,12 +1048,6 @@ test_skip () {
|
|||
fi
|
||||
skipped_reason="missing $missing_prereq${of_prereq}"
|
||||
fi
|
||||
if test -z "$to_skip" && test -n "$run_list" &&
|
||||
! match_test_selector_list '--run' $test_count "$run_list"
|
||||
then
|
||||
to_skip=t
|
||||
skipped_reason="--run"
|
||||
fi
|
||||
|
||||
case "$to_skip" in
|
||||
t)
|
||||
|
|
@ -1063,6 +1099,27 @@ write_junit_xml_testcase () {
|
|||
junit_have_testcase=t
|
||||
}
|
||||
|
||||
finalize_junit_xml () {
|
||||
if test -n "$write_junit_xml" && test -n "$junit_xml_path"
|
||||
then
|
||||
test -n "$junit_have_testcase" || {
|
||||
junit_start=$(test-tool date getnanos)
|
||||
write_junit_xml_testcase "all tests skipped"
|
||||
}
|
||||
|
||||
# adjust the overall time
|
||||
junit_time=$(test-tool date getnanos $junit_suite_start)
|
||||
sed -e "s/\(<testsuite.*\) time=\"[^\"]*\"/\1/" \
|
||||
-e "s/<testsuite [^>]*/& time=\"$junit_time\"/" \
|
||||
-e '/^ *<\/testsuite/d' \
|
||||
<"$junit_xml_path" >"$junit_xml_path.new"
|
||||
mv "$junit_xml_path.new" "$junit_xml_path"
|
||||
|
||||
write_junit_xml " </testsuite>" "</testsuites>"
|
||||
write_junit_xml=
|
||||
fi
|
||||
}
|
||||
|
||||
test_atexit_cleanup=:
|
||||
test_atexit_handler () {
|
||||
# In a succeeding test script 'test_atexit_handler' is invoked
|
||||
|
|
@ -1085,21 +1142,7 @@ test_done () {
|
|||
# removed, so the commands can access pidfiles and socket files.
|
||||
test_atexit_handler
|
||||
|
||||
if test -n "$write_junit_xml" && test -n "$junit_xml_path"
|
||||
then
|
||||
test -n "$junit_have_testcase" || {
|
||||
junit_start=$(test-tool date getnanos)
|
||||
write_junit_xml_testcase "all tests skipped"
|
||||
}
|
||||
|
||||
# adjust the overall time
|
||||
junit_time=$(test-tool date getnanos $junit_suite_start)
|
||||
sed "s/<testsuite [^>]*/& time=\"$junit_time\"/" \
|
||||
<"$junit_xml_path" >"$junit_xml_path.new"
|
||||
mv "$junit_xml_path.new" "$junit_xml_path"
|
||||
|
||||
write_junit_xml " </testsuite>" "</testsuites>"
|
||||
fi
|
||||
finalize_junit_xml
|
||||
|
||||
if test -z "$HARNESS_ACTIVE"
|
||||
then
|
||||
|
|
@ -1367,6 +1410,21 @@ then
|
|||
fi
|
||||
fi
|
||||
|
||||
# Convenience
|
||||
# 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]'
|
||||
_x35="$_x05$_x05$_x05$_x05$_x05$_x05$_x05"
|
||||
_x40="$_x35$_x05"
|
||||
|
||||
test_oid_init
|
||||
|
||||
ZERO_OID=$(test_oid zero)
|
||||
OID_REGEX=$(echo $ZERO_OID | sed -e 's/0/[0-9a-f]/g')
|
||||
OIDPATH_REGEX=$(test_oid_to_path $ZERO_OID | sed -e 's/0/[0-9a-f]/g')
|
||||
EMPTY_TREE=$(test_oid empty_tree)
|
||||
EMPTY_BLOB=$(test_oid empty_blob)
|
||||
_z40=$ZERO_OID
|
||||
|
||||
# Provide an implementation of the 'yes' utility; the upper bound
|
||||
# limit is there to help Windows that cannot stop this loop from
|
||||
# wasting cycles when the downstream stops reading, so do not be
|
||||
|
|
@ -1391,23 +1449,23 @@ yes () {
|
|||
# The GIT_TEST_FAIL_PREREQS code hooks into test_set_prereq(), and
|
||||
# thus needs to be set up really early, and set an internal variable
|
||||
# for convenience so the hot test_set_prereq() codepath doesn't need
|
||||
# to call "git env--helper". Only do that work if needed by seeing if
|
||||
# GIT_TEST_FAIL_PREREQS is set at all.
|
||||
# to call "git env--helper" (via test_bool_env). Only do that work
|
||||
# if needed by seeing if GIT_TEST_FAIL_PREREQS is set at all.
|
||||
GIT_TEST_FAIL_PREREQS_INTERNAL=
|
||||
if test -n "$GIT_TEST_FAIL_PREREQS"
|
||||
then
|
||||
if git env--helper --type=bool --default=0 --exit-code GIT_TEST_FAIL_PREREQS
|
||||
if test_bool_env GIT_TEST_FAIL_PREREQS false
|
||||
then
|
||||
GIT_TEST_FAIL_PREREQS_INTERNAL=true
|
||||
test_set_prereq FAIL_PREREQS
|
||||
fi
|
||||
else
|
||||
test_lazy_prereq FAIL_PREREQS '
|
||||
git env--helper --type=bool --default=0 --exit-code GIT_TEST_FAIL_PREREQS
|
||||
test_bool_env GIT_TEST_FAIL_PREREQS false
|
||||
'
|
||||
fi
|
||||
|
||||
# Fix some commands on Windows
|
||||
# Fix some commands on Windows, and other OS-specific things
|
||||
uname_s=$(uname -s)
|
||||
case $uname_s in
|
||||
*MINGW*)
|
||||
|
|
@ -1445,6 +1503,14 @@ case $uname_s in
|
|||
;;
|
||||
esac
|
||||
|
||||
# Detect arches where a few things don't work
|
||||
uname_m=$(uname -m)
|
||||
case $uname_m in
|
||||
parisc* | hppa*)
|
||||
test_set_prereq HPPA
|
||||
;;
|
||||
esac
|
||||
|
||||
( COLUMNS=1 && test $COLUMNS = 1 ) && test_set_prereq COLUMNS_CAN_BE_1
|
||||
test -z "$NO_PERL" && test_set_prereq PERL
|
||||
test -z "$NO_PTHREADS" && test_set_prereq PTHREADS
|
||||
|
|
@ -1462,7 +1528,7 @@ then
|
|||
fi
|
||||
|
||||
test_lazy_prereq C_LOCALE_OUTPUT '
|
||||
! git env--helper --type=bool --default=0 --exit-code GIT_TEST_GETTEXT_POISON
|
||||
! test_bool_env GIT_TEST_GETTEXT_POISON false
|
||||
'
|
||||
|
||||
if test -z "$GIT_TEST_CHECK_CACHE_TREE"
|
||||
|
|
@ -1584,7 +1650,7 @@ run_with_limited_cmdline () {
|
|||
}
|
||||
|
||||
test_lazy_prereq CMDLINE_LIMIT '
|
||||
test_have_prereq !MINGW,!CYGWIN &&
|
||||
test_have_prereq !HPPA,!MINGW,!CYGWIN &&
|
||||
run_with_limited_cmdline true
|
||||
'
|
||||
|
||||
|
|
@ -1593,10 +1659,19 @@ run_with_limited_stack () {
|
|||
}
|
||||
|
||||
test_lazy_prereq ULIMIT_STACK_SIZE '
|
||||
test_have_prereq !MINGW,!CYGWIN &&
|
||||
test_have_prereq !HPPA,!MINGW,!CYGWIN &&
|
||||
run_with_limited_stack true
|
||||
'
|
||||
|
||||
run_with_limited_open_files () {
|
||||
(ulimit -n 32 && "$@")
|
||||
}
|
||||
|
||||
test_lazy_prereq ULIMIT_FILE_DESCRIPTORS '
|
||||
test_have_prereq !MINGW,!CYGWIN &&
|
||||
run_with_limited_open_files true
|
||||
'
|
||||
|
||||
build_option () {
|
||||
git version --build-options |
|
||||
sed -ne "s/^$1: //p"
|
||||
|
|
@ -1617,7 +1692,11 @@ test_lazy_prereq CURL '
|
|||
# which will not work with other hash algorithms and tests that work but don't
|
||||
# test anything meaningful (e.g. special values which cause short collisions).
|
||||
test_lazy_prereq SHA1 '
|
||||
test $(git hash-object /dev/null) = e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
|
||||
case "$GIT_DEFAULT_HASH" in
|
||||
sha1) true ;;
|
||||
"") test $(git hash-object /dev/null) = e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 ;;
|
||||
*) false ;;
|
||||
esac
|
||||
'
|
||||
|
||||
test_lazy_prereq REBASE_P '
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue