git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 1/2] t/test-lib.sh: support Korn shell by converting GIT_EXIT_OK to GIT_EXIT_CODE

From
Brandon Casey <drafnel@gmail.com>
Date
Oct 9, 2009, 22:37 UTC
Message-ID
<ee63ef30910091537i40a8cc68y2513f07c91fb35b@mail.gmail.com>
In-Reply-To
<7vhbu8s151.fsf@alter.siamese.dyndns.org>

I'm away from a computer right now. Junio, if gmail is showing me the entirety of your workaround, then no, I don't think that will work. Your code will always exit non-zero, but there are cases where 'exit 0' is called and a '0' exit status is desired. e.g. when test_done is called.

I'll look more closely at the suggestions when I get back to a computer.
-brandon
On 10/9/09, Junio C Hamano <gitster@pobox.com> wrote:
Show 57 quoted lines
> Brandon Casey <casey@nrlssc.navy.mil> writes:
>
>> From: Brandon Casey <drafnel@gmail.com>
>>
>> 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.
>
> That's somewhat unexpected, as I did not think this was an anomaly in
> bash.  FWIW, dash seems to behave the same way.
>
>     The environment in which the shell executes a trap on EXIT shall be
>     identical to the environment immediately after the last command executed
>     before the trap on EXIT was taken.
>
> If the trap action was triggered because somebody called "exit 13", $? is
> expected to contain that value, because that is the last command executed
> before the trap on EXIT was taken, no?
>
>> 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.
>
> I wonder if the attached is a more clear and contained workaround for this
> issue.
>
> ---
>  t/test-lib.sh |    9 ++++++++-
>  1 files changed, 8 insertions(+), 1 deletions(-)
>
> diff --git a/t/test-lib.sh b/t/test-lib.sh
> index f2ca536..c47a295 100644
> --- a/t/test-lib.sh
> +++ b/t/test-lib.sh
> @@ -185,7 +185,14 @@ die () {
>  	code=$?
>  	if test -n "$GIT_EXIT_OK"
>  	then
> -		exit $code
> +		# Korn does not update $? when "exit 47" triggers
> +		# the EXIT trap.
> +		if test $code = 0
> +		then
> +			exit 1
> +		else
> +			exit $code
> +		fi
>  	else
>  		echo >&5 "FATAL: Unexpected exit with code $code"
>  		exit 1
>
-- 
Sent from my mobile device
Previous: Junio C HamanoNext: Junio C Hamano
Message 6 of 11 in “t/test-lib.sh: support Korn shell by converting GIT_EXIT_OK to GIT_EXIT_CODE”
  1. 1/2 t/test-lib.sh: support Korn shell by converting GIT_EXIT_OK to GIT_EXIT_CODEBrandon Casey, Oct 9, 2009
  2. 2/2 Makefile: use the native (Korn) shell on SunOS and IRIX/IRIX64Brandon Casey, Oct 9, 2009
  3. Jonathan NiederOct 9, 2009
  4. Jonathan NiederOct 9, 2009
  5. Junio C HamanoOct 9, 2009
  6. Brandon CaseyOct 9, 2009
  7. Junio C HamanoOct 10, 2009
  8. Clemens BuchacherOct 10, 2009
  9. Andreas SchwabOct 10, 2009
  10. Ben WaltonOct 10, 2009
  11. Jeff KingOct 10, 2009

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.