Subject: Re: [PATCH v4 12/12] t: detect errors outside of test cases

From: Ben Knoble <[email-masked]>
Date: Sat, 18 Apr 2026 08:17:10 -0400

> Le 18 avr. 2026 à 02:50, Jeff King <[email-masked]> a écrit :
> 
> On Fri, Apr 17, 2026 at 12:50:58PM +0200, Patrick Steinhardt wrote:
> 
>> --- a/ci/run-build-and-tests.sh
>> +++ b/ci/run-build-and-tests.sh
>> @@ -15,6 +15,11 @@ fedora-breaking-changes-musl|linux-breaking-changes)
>>    MESONFLAGS="$MESONFLAGS -Drust=enabled"
>>    ;;
>> linux-TEST-vars)
>> +    # Ubuntu uses Dash by default, but we only enable use of `set -e`
>> +    # when using Bash 5+. Ensure that we have at least one CI job that uses
>> +    # it.
>> +    export TEST_SHELL_PATH=/usr/bin/bash
> 
> Thinking on this a little more, it is a shame we cannot easily enable
> this for dash. That would hit most CI jobs, but also the local builds of
> most developers. And finding problems early and locally often saves a
> lot of time versus finding them in CI.
> 
> Unfortunately I could not find a way to detect whether we are running
> dash at all, let alone a recent version. But what if we let the user
> tell us? Something like:

I was just wishing for similar! I imagine it would be useful for folks who occasionally test Zsh’s POSIX mode and want to see how it handles -e

> diff --git a/t/test-lib.sh b/t/test-lib.sh
> index 1f7868c537..a0d07f75fb 100644
> --- a/t/test-lib.sh
> +++ b/t/test-lib.sh
> @@ -17,9 +17,10 @@
> 
> # Enable the use of errexit so that any unexpected failures will cause us to
> # abort tests, even when outside of a specific test case. Note that we only
> -# enable this on Bash 5 and newer, as `set -e` has wildly different behaviour
> -# across shells. The list of allowed shells may be extended going forward.
> -if test "${BASH_VERSINFO:=0}" -ge 5
> +# enable this by default on Bash 5 and newer, as `set -e` has wildly different
> +# behaviour across shells. If you trust your shell's `set -e` implementation,
> +# you can set GIT_TEST_USE_SET_E manually.
> +if test "$GIT_TEST_USE_SET_E" = 1 && test "${BASH_VERSINFO:=0}" -ge 5
> then
>    set -e
> fi

I guess that should be || instead of &&?

> 
> And then those of us who want to stick:
> 
>  export GIT_TEST_USE_SET_E = 1
> 
> in our config.mak can do so, and we could even set it in the ci/ scripts
> for all of the ubuntu builds.
> 
> -Peff

Thanks