All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeff King <peff@peff.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 01/11] test-lib: catch misspelt 'test_expect_successo'
Date: Thu, 26 Mar 2026 00:08:28 -0400	[thread overview]
Message-ID: <20260326040828.GA686242@coredump.intra.peff.net> (raw)
In-Reply-To: <20260325062114.2067946-2-gitster@pobox.com>

On Tue, Mar 24, 2026 at 11:21:04PM -0700, Junio C Hamano wrote:

>  # Test the binaries we have just built.  The tests are kept in
>  # t/ subdirectory and are run in 'trash directory' subdirectory.
> +
> +set -e

This causes failures in t0005 and t3600 with dash, but not bash.

It looks like the suppression of "-e" on the left-hand-side of an && is
different when there is command substitution in play:

  $ dash -c 'OUT=$( ((yes; echo $? 1>&3) | :) 3>&1) && echo out=$OUT'
  out=141

  $ dash -ec 'OUT=$( ((yes; echo $? 1>&3) | :) 3>&1) && echo out=$OUT'
  out=

whereas with bash, both produce 141.

The idea is that $OUT becomes the exit status of "yes" here, and we are
expecting to see SIGPIPE. With "-e" in effect, the failing "yes" will
terminate before we echo $?.

To demonstrate the effect as we build it up from smaller pieces:

  # produces 141, SIGPIPE from yes
  dash -c '((yes; echo $? 1>&3) | :) 3>&1'

  # produces nothing, "-e" kills subshell after yes fails
  dash -ec '((yes; echo $? 1>&3) | :) 3>&1'

  # produces 141 (and "ok"), as the && suppresses -e
  dash -ec '((yes; echo $? 1>&3) | :) 3>&1 && echo ok'

  # produces "out="; the $() makes us forget that we're on LHS of &&
  dash -ec 'OUT=$( ((yes; echo $? 1>&3) | :) 3>&1) && echo out=$OUT'

The actual failing code in t0005 is:

  OUT=$( ((large_git; echo $? 1>&3) | :) 3>&1 ) &&
  test_match_signal 13 "$OUT"

and the one in t3600 is similar. I guess you could do:

diff --git a/t/t0005-signals.sh b/t/t0005-signals.sh
index afba0fc3fc..0bf1f16750 100755
--- a/t/t0005-signals.sh
+++ b/t/t0005-signals.sh
@@ -42,7 +42,7 @@ test_expect_success 'create blob' '
 '
 
 test_expect_success !MINGW 'a constipated git dies with SIGPIPE' '
-	OUT=$( ((large_git; echo $? 1>&3) | :) 3>&1 ) &&
+	OUT=$( ((large_git || echo $? 1>&3) | :) 3>&1 ) &&
 	test_match_signal 13 "$OUT"
 '
 

That neglects to echo $? when large_git surprisingly succeeds, but that
would mean $OUT is empty, which would cause the test to (correctly)
fail. I kind of hate it, though.

-Peff

  reply	other threads:[~2026-03-26  4:08 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-25  6:21 [PATCH 00/11] detect misspelt test_expect_success and friends Junio C Hamano
2026-03-25  6:21 ` [PATCH 01/11] test-lib: catch misspelt 'test_expect_successo' Junio C Hamano
2026-03-26  4:08   ` Jeff King [this message]
2026-03-26 14:27     ` Junio C Hamano
2026-03-26 17:29       ` Jeff King
2026-03-27  7:53         ` Patrick Steinhardt
2026-03-27 18:11           ` Junio C Hamano
2026-03-31 11:43             ` Patrick Steinhardt
2026-03-25  6:21 ` [PATCH 02/11] t0008: make test "set -e" clean Junio C Hamano
2026-03-25  6:21 ` [PATCH 03/11] t6002: " Junio C Hamano
2026-03-25  7:15   ` Patrick Steinhardt
2026-03-25 15:45     ` Junio C Hamano
2026-03-25  6:21 ` [PATCH 04/11] t4032: " Junio C Hamano
2026-03-25  7:15   ` Patrick Steinhardt
2026-03-25  6:21 ` [PATCH 05/11] t7450: " Junio C Hamano
2026-03-25  7:15   ` Patrick Steinhardt
2026-03-25  6:21 ` [PATCH 06/11] tests: make svn " Junio C Hamano
2026-03-25  7:15   ` Patrick Steinhardt
2026-03-25  6:21 ` [PATCH 07/11] t7508: make " Junio C Hamano
2026-03-25  6:21 ` [PATCH 08/11] t9200: " Junio C Hamano
2026-03-25  7:16   ` Patrick Steinhardt
2026-03-25  6:21 ` [PATCH 09/11] t940?: " Junio C Hamano
2026-03-25  6:21 ` [PATCH 10/11] t5570: " Junio C Hamano
2026-03-25  7:16   ` Patrick Steinhardt
2026-03-25 15:50     ` Junio C Hamano
2026-03-25  6:21 ` [PATCH 11/11] t9902: " Junio C Hamano
2026-03-25  7:08 ` [PATCH 00/11] detect misspelt test_expect_success and friends Patrick Steinhardt
2026-03-25 13:47   ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260326040828.GA686242@coredump.intra.peff.net \
    --to=peff@peff.net \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.