t: prepare execution of potentially failing commands for `set -e`

Several of our tests verify whether a certain binary can be executed,
potentially skipping tests in case we cannot, for example because the
binary doesn't exist. In those cases we often run the binary outside of
any conditionally.

This will start to fail once we enable `set -e`, as that will cause us
to bail out the test immediately. Improve these tests by executing them
inside of a conditional instead.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
main
Patrick Steinhardt 2026-04-21 09:34:19 +02:00 committed by Junio C Hamano
parent 0c6600cdc7
commit 5f0d596fe4
11 changed files with 24 additions and 24 deletions

View File

@ -15,8 +15,7 @@ GIT_SVN_DIR=$GIT_DIR/svn/refs/remotes/git-svn
SVN_TREE=$GIT_SVN_DIR/svn-tree
test_set_port SVNSERVE_PORT

svn >/dev/null 2>&1
if test $? -ne 1
if ! svn help >/dev/null 2>&1
then
skip_all='skipping git svn tests, svn not found'
test_done
@ -27,13 +26,13 @@ export svnrepo
svnconf=$PWD/svnconf
export svnconf

x=0
perl -w -e "
use SVN::Core;
use SVN::Repos;
\$SVN::Core::VERSION gt '1.1.0' or exit(42);
system(qw/svnadmin create --fs-type fsfs/, \$ENV{svnrepo}) == 0 or exit(41);
" >&3 2>&4
x=$?
" >&3 2>&4 || x=$?
if test $x -ne 0
then
if test $x -eq 42; then

View File

@ -235,11 +235,10 @@ start_httpd() {

test_atexit stop_httpd

"$LIB_HTTPD_PATH" -d "$HTTPD_ROOT_PATH" \
if ! "$LIB_HTTPD_PATH" -d "$HTTPD_ROOT_PATH" \
-f "$TEST_PATH/apache.conf" $HTTPD_PARA \
-c "Listen 127.0.0.1:$LIB_HTTPD_PORT" -k start \
>&3 2>&4
if test $? -ne 0
then
cat "$HTTPD_ROOT_PATH"/error.log >&4 2>/dev/null
test_skip_or_die GIT_TEST_HTTPD "web server setup failed"

View File

@ -28,7 +28,8 @@ check_encoding () {
8859)
grep "^encoding ISO8859-1" ;;
*)
grep "^encoding ISO8859-1"; test "$?" != 0 ;;
ret=0; grep "^encoding ISO8859-1" || ret=$?
test "$ret" != 0 ;;
esac || return 1
j=$i
i=$(($i+1))

View File

@ -503,8 +503,8 @@ test_expect_success LONG_IS_64BIT 'set up repository with huge blob' '
# would generate the whole 64GB).
test_expect_success LONG_IS_64BIT 'generate tar with huge size' '
{
git archive HEAD
echo $? >exit-code
{ ret=0 && git archive HEAD || ret=$?; } &&
echo "$ret" >exit-code
} | test_copy_bytes 4096 >huge.tar &&
echo 141 >expect &&
test_cmp expect exit-code

View File

@ -198,7 +198,7 @@ test_expect_success !MINGW 'git submodule status --recursive propagates SIGPIPE'
(
cd repo &&
GIT_ALLOW_PROTOCOL=file git submodule add "$(pwd)"/../submodule &&
{ git submodule status --recursive 2>err; echo $?>status; } |
{ { ret=0 && git submodule status --recursive 2>err || ret=$?; } && echo $ret >status; } |
grep -q recursive-submodule-path-1 &&
test_must_be_empty err &&
test_match_signal 13 "$(cat status)"

View File

@ -11,8 +11,7 @@ if ! test_have_prereq PERL; then
test_done
fi

cvs >/dev/null 2>&1
if test $? -ne 1
if ! cvs version >/dev/null 2>&1
then
skip_all='skipping git cvsexportcommit tests, cvs not found'
test_done

View File

@ -17,12 +17,13 @@ if ! test_have_prereq PERL; then
skip_all='skipping git cvsserver tests, perl not available'
test_done
fi
cvs >/dev/null 2>&1
if test $? -ne 1

if ! cvs version >/dev/null 2>&1
then
skip_all='skipping git-cvsserver tests, cvs not found'
test_done
fi

perl -e 'use DBI; use DBD::SQLite' >/dev/null 2>&1 || {
skip_all='skipping git-cvsserver tests, Perl SQLite interface unavailable'
test_done

View File

@ -60,12 +60,12 @@ check_status_options() {
return $stat
}

cvs >/dev/null 2>&1
if test $? -ne 1
if ! cvs version >/dev/null 2>&1
then
skip_all='skipping git-cvsserver tests, cvs not found'
test_done
fi

if ! test_have_prereq PERL
then
skip_all='skipping git-cvsserver tests, perl not available'

View File

@ -68,12 +68,12 @@ check_diff() {

#########

cvs >/dev/null 2>&1
if test $? -ne 1
if ! cvs version >/dev/null 2>&1
then
skip_all='skipping git-cvsserver tests, cvs not found'
test_done
fi

if ! test_have_prereq PERL
then
skip_all='skipping git-cvsserver tests, perl not available'

View File

@ -1248,8 +1248,7 @@ test_might_fail () {
test_expect_code () {
want_code=$1
shift
"$@" 2>&7
exit_code=$?
exit_code=0; "$@" 2>&7 || exit_code=$?
if test $exit_code = $want_code
then
return 0

View File

@ -143,8 +143,8 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
################################################################
# It appears that people try to run tests without building...
GIT_BINARY="${GIT_TEST_INSTALLED:-$GIT_BUILD_DIR}/git$X"
"$GIT_BINARY" >/dev/null
if test $? != 1

if ! "$GIT_BINARY" version >/dev/null
then
if test -n "$GIT_TEST_INSTALLED"
then
@ -454,8 +454,10 @@ then
# from any previous runs.
>"$GIT_TEST_TEE_OUTPUT_FILE"

(GIT_TEST_TEE_STARTED=done ${TEST_SHELL_PATH} "$0" "$@" 2>&1;
echo $? >"$TEST_RESULTS_BASE.exit") | tee -a "$GIT_TEST_TEE_OUTPUT_FILE"
(
ret=0 && GIT_TEST_TEE_STARTED=done ${TEST_SHELL_PATH} "$0" "$@" 2>&1 || ret=$?
echo "$ret" >"$TEST_RESULTS_BASE.exit"
) | tee -a "$GIT_TEST_TEE_OUTPUT_FILE"
test "$(cat "$TEST_RESULTS_BASE.exit")" = 0
exit
fi