[PATCH 1/2] t/test-lib.sh: support Korn shell by converting GIT_EXIT_OK to GIT_EXIT_CODE
From: Brandon Casey <hidden>
Date: 2016-06-15 22:47:29
Subsystem:
the rest · Maintainer:
Linus Torvalds
From: Brandon Casey <redacted> Commit 6e7b5aaf introduced the concept of GIT_EXIT_OK as a way to indicate to die(), the exit handler, whether the exit was initiated by the test harness, or whether it was unexpected. die() expects $? to contain the value passed to exit(), and when GIT_EXIT_OK is set, die() calls exit with the value in $?. This works as expected when using the Bash shell. For the Korn shell, $? has the value of the last executed statement _before_ the call to exit. If that statement completed successfully, then die() would incorrectly exit with a successful status when GIT_EXIT_OK is set. So, rather than relying on the behavior of Bash in order to get the exit code from $? inside die(), change GIT_EXIT_OK into GIT_EXIT_CODE, and set it to the code that we want to exit with. This allows the test suite to be run with the Korn shell. Signed-off-by: Brandon Casey <redacted> --- t/test-lib.sh | 15 ++++++++------- 1 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/t/test-lib.sh b/t/test-lib.sh
index f2ca536..64e793a 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh@@ -150,7 +150,7 @@ fi error () { say_color error "error: $*" - GIT_EXIT_OK=t + GIT_EXIT_CODE=1 exit 1 }
@@ -183,16 +183,16 @@ test_success=0 die () { code=$? - if test -n "$GIT_EXIT_OK" + if test -n "$GIT_EXIT_CODE" then - exit $code + exit $GIT_EXIT_CODE else echo >&5 "FATAL: Unexpected exit with code $code" exit 1 fi } -GIT_EXIT_OK= +GIT_EXIT_CODE= trap 'die' EXIT # The semantics of the editor variables are that of invoking
@@ -295,7 +295,7 @@ test_failure_ () { say_color error "FAIL $test_count: $1" shift echo "$@" | sed -e 's/^/ /' - test "$immediate" = "" || { GIT_EXIT_OK=t; exit 1; } + test "$immediate" = "" || { GIT_EXIT_CODE=1; exit 1; } } test_known_broken_ok_ () {
@@ -508,7 +508,6 @@ test_create_repo () { } test_done () { - GIT_EXIT_OK=t test_results_dir="$TEST_DIRECTORY/test-results" mkdir -p "$test_results_dir" test_results_path="$test_results_dir/${0%.sh}-$$"
@@ -539,9 +538,11 @@ test_done () { cd "$(dirname "$remove_trash")" && rm -rf "$(basename "$remove_trash")" + GIT_EXIT_CODE=0 exit 0 ;; *) + GIT_EXIT_CODE=1 say_color error "failed $test_failure among $msg" exit 1 ;;
@@ -655,7 +656,7 @@ case "$test" in esac test ! -z "$debug" || remove_trash=$TRASH_DIRECTORY rm -fr "$test" || { - GIT_EXIT_OK=t + GIT_EXIT_CODE=1 echo >&5 "FATAL: Cannot prepare test area" exit 1 }
--
1.6.5.rc3