# [PATCH] t9903: fix broken && chain

3 messages from 2016-09-05 to 2016-09-07. Participants: Johannes Sixt, Jeff King, Junio C Hamano.
Thread: https://gitlist.dev/t/44009

## Johannes Sixt, 2016-09-05 19:00

Subject: [PATCH] t9903: fix broken && chain
Message-ID: <61de943c-df93-58e9-ca48-c469a71a1d43@kdbg.org>
URL: https://gitlist.dev/e/61de943c-df93-58e9-ca48-c469a71a1d43%40kdbg.org

```
We might wonder why our && chain check does not catch this case:
The && chain check uses a strange exit code with the expectation that
the second or later part of a broken && chain would not exit with this
particular code.

This expectation does not work in this case because __git_ps1, being
the first command in the second part of the broken && chain, records
the current exit code, does its work, and finally returns to the caller
with the recorded exit code. This fools our && chain check.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
---
  t/t9903-bash-prompt.sh | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/t/t9903-bash-prompt.sh b/t/t9903-bash-prompt.sh
index 0db4469..97c9b32 100755
--- a/t/t9903-bash-prompt.sh
+++ b/t/t9903-bash-prompt.sh
@@ -177,7 +177,7 @@ test_expect_success 'prompt - interactive rebase' '
  	git checkout b1 &&
  	test_when_finished "git checkout master" &&
  	git rebase -i HEAD^ &&
-	test_when_finished "git rebase --abort"
+	test_when_finished "git rebase --abort" &&
  	__git_ps1 >"$actual" &&
  	test_cmp expected "$actual"
  '
-- 
2.10.0.85.gea34e30

```

## Jeff King, 2016-09-06 07:15

Subject: Re: [PATCH] t9903: fix broken && chain
Message-ID: <20160906071507.pmbpsjoo4me3o6za@sigill.intra.peff.net>
URL: https://gitlist.dev/e/20160906071507.pmbpsjoo4me3o6za%40sigill.intra.peff.net
In-Reply-To: <61de943c-df93-58e9-ca48-c469a71a1d43@kdbg.org>

```
On Mon, Sep 05, 2016 at 09:00:47PM +0200, Johannes Sixt wrote:

> We might wonder why our && chain check does not catch this case:
> The && chain check uses a strange exit code with the expectation that
> the second or later part of a broken && chain would not exit with this
> particular code.
> 
> This expectation does not work in this case because __git_ps1, being
> the first command in the second part of the broken && chain, records
> the current exit code, does its work, and finally returns to the caller
> with the recorded exit code. This fools our && chain check.

Wow. Good find. Patch itself is obviously correct.

-Peff

```

## Junio C Hamano, 2016-09-07 18:35

Subject: Re: [PATCH] t9903: fix broken && chain
Message-ID: <xmqqbmzzmubj.fsf@gitster.mtv.corp.google.com>
URL: https://gitlist.dev/e/xmqqbmzzmubj.fsf%40gitster.mtv.corp.google.com
In-Reply-To: <61de943c-df93-58e9-ca48-c469a71a1d43@kdbg.org>

```
Johannes Sixt <j6t@kdbg.org> writes:

> We might wonder why our && chain check does not catch this case:
> The && chain check uses a strange exit code with the expectation that
> the second or later part of a broken && chain would not exit with this
> particular code.
>
> This expectation does not work in this case because __git_ps1, being
> the first command in the second part of the broken && chain, records
> the current exit code, does its work, and finally returns to the caller
> with the recorded exit code. This fools our && chain check.
>
> Signed-off-by: Johannes Sixt <j6t@kdbg.org>
> ---
>  t/t9903-bash-prompt.sh | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/t/t9903-bash-prompt.sh b/t/t9903-bash-prompt.sh
> index 0db4469..97c9b32 100755
> --- a/t/t9903-bash-prompt.sh
> +++ b/t/t9903-bash-prompt.sh
> @@ -177,7 +177,7 @@ test_expect_success 'prompt - interactive rebase' '
>  	git checkout b1 &&
>  	test_when_finished "git checkout master" &&
>  	git rebase -i HEAD^ &&
> -	test_when_finished "git rebase --abort"
> +	test_when_finished "git rebase --abort" &&
>  	__git_ps1 >"$actual" &&
>  	test_cmp expected "$actual"
>  '

Thanks.

```
